5종 데이터 한눈에
장비가 보내는 두 종류 원본 데이터(SCOPE / PQN) 와 그로부터 SW가 파생하는 세 가지 분석 데이터(PRPS / PRPD / TF). 이 다섯 개를 구분 못 하면 코드/UI가 헷갈린다.
한 장 표
| 데이터 | 출처 | 도메인 | 축 | 채널 | UI 위치 |
|---|---|---|---|---|---|
| SCOPE | 장비 직접 송신 | 시간 | 샘플 인덱스 | 0~7 | Realtime · Scope 그래프 |
| PQN | 장비 직접 송신 | 시간(위상) | 위상 슬롯 0~255 | 0~7 + 8(sync) | (원본은 표시 안 함, 파생만 표시) |
| PRPS | SW: PQN 누적 | 시간(위상) | 위상 0~360° | 0~7 | Realtime · PRPS 그래프 |
| PRPD | SW: SCOPE 사이클당 1점 누적 | 시간(위상) | 위상 × 크기 heatmap | 0~7 | Realtime · PRPD heatmap, PRPD Analyze 페이지 |
| TF | SW: SCOPE에 FFT | 주파수 | 시간 spread × 주파수 spread | 0~7 | TF Analyze 페이지 |
SCOPE — 원파형
ADC가 잡은 전압 vs 시간 원샘플. TRIG 조건이 만족된
순간 직전·직후 trig_depth 개(기본 500) int16을 통째로 보낸다.
그래서 SCOPE는 "지금 PD 파형이 이렇게 생겼다" 의 스냅샷.
패킷 구조
SCOPE_DATA_PACKET {
PACKET_HEADER header;
uint32 ch_number; // 0~7
int32 phase; // 사이클 내 위상 (10ns 단위 카운트)
int32 cycle_index; // PQN과 매칭용
float sync_freq; // 실제 sync 주파수 Hz
// 뒤에 int16 샘플 trig_depth개
}
이걸로 뭘 만들어 쓰나
- Scope 그래프 — 그대로 그림
- PRPD point — 사이클당 1점 (X = phase, Y = peak amplitude)
- TF — FFT 적용해 시간×주파수 spread
PQN — 위상 슬롯 PD 히스토그램
한 사이클을 256 슬롯으로 잘라 각 슬롯에서의 PD 펄스 크기를 기록한 배열. 한 채널·한 사이클당 256개 uint16. 이게 한 묶음. 자세한 그림은 PQN 깊게 보기 참조.
패킷 구조
PQN_DATA_PACKET {
PACKET_HEADER header;
uint32 ch_number; // 0~7 입력, 8 = sync 채널 (항상 전송)
int32 cycle_index; // SCOPE와 매칭용
float sync_freq;
// 뒤에 uint16 bin 데이터 buffer_size개 (보통 256)
}
SCOPE 와의 본질적 차이
| SCOPE | PQN | |
|---|---|---|
| 무엇 | raw 파형 | phase-binned PD 크기 |
| X 축 | 샘플 인덱스 (시간) | 슬롯 인덱스 (위상) |
| 한 묶음 | 한 채널·한 TRIG 발생당 trig_depth 샘플 | 한 채널·한 사이클당 256 bin |
| 전송 트리거 | TRIG 발생 즉시 | buffer_size 수집 후 sync 정렬해 묶음 |
| 채널 수 | 0~7 (8개) | 0~7 + 8(sync) (9개) |
| 관측 단위 | µs 스케일 펄스 모양 | ms 스케일 사이클 통계 |
PRPS — Phase-Resolved Pulse Sequence
여러 사이클의 PQN bin 점들을 같은 위상 축에 겹쳐 그린 선/점 plot. "이 위상에서는 평소 어느 정도 크기로 PD 가 뜬다" 의 시각화.
구현: internal/prpsdata/ 가 PQN bin 바이트를 받아 PRPS Point 배열로 변환.
PRPD — Phase-Resolved PD heatmap
위상 × 크기 격자에 누적 발생 횟수를 색으로 칠한 heatmap. 절연 결함의 종류를 패턴으로 식별하는 핵심 그래프.
구현: scopedata.MakePrpdData() — SCOPE 사이클당 1점(X = phase, Y = trigMax)을 누적해서 heatmap 격자에 찍음.
TF — Time-Frequency
SCOPE 원파형에 FFT를 걸어 시간·주파수 분포의 spread를 좌표로 뽑은 점. 펄스가 얼마나 짧고(시간 spread 작음) 얼마나 좁은 대역인지(주파수 spread 작음)에 따라 PD 종류 식별. 사이클당 1점이 누적된다.
구현: internal/fft/fft.go TF() + scopedata.MakeTfData().