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 파형이 이렇게 생겼다" 의 스냅샷.

amplitude (mV) ▲ │ PD spike │ │ │ _____╱ ╲___________ │ ╱ ╲ ╲___ │ ╱ ╲___ │ ╲___ └────────────────────────────────────────▶ sample index 0 499 └─────── trig_depth = 500 samples ──────┘

패킷 구조

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개
}

이걸로 뭘 만들어 쓰나

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 와의 본질적 차이

SCOPEPQN
무엇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 가 뜬다" 의 시각화.

amplitude ▲ ╳ │ ╳ ╳ ╳ ← bin[~145] 부근에 늘 큰 펄스 │ ╳ ╳ ╳╳ │ ╳ ╳ ╳ ╳ │ ╳ ╳ ╳ ╳ ╳ ← bin[~17] 부근에 작은 펄스 자주 │ ╳╳ ╳ ╳ ╳ ╳ └──────────────────────────────▶ phase (0~360°) 17 145

구현: internal/prpsdata/ 가 PQN bin 바이트를 받아 PRPS Point 배열로 변환.

PRPD — Phase-Resolved PD heatmap

위상 × 크기 격자에 누적 발생 횟수를 색으로 칠한 heatmap. 절연 결함의 종류를 패턴으로 식별하는 핵심 그래프.

amplitude ▲ │ ░ ▓░ │ ▓▓ ▓▓▓░ │ ▓░ ▓▓▓ │ ▓▓░░ ░▓░ │ ░ ░░ └──────────────────────────────▶ phase (0~360°) 진한 색 = 발생 빈도 높음, 옅은 색 = 드뭄

구현: scopedata.MakePrpdData() — SCOPE 사이클당 1점(X = phase, Y = trigMax)을 누적해서 heatmap 격자에 찍음.

TF — Time-Frequency

SCOPE 원파형에 FFT를 걸어 시간·주파수 분포의 spread를 좌표로 뽑은 점. 펄스가 얼마나 짧고(시간 spread 작음) 얼마나 좁은 대역인지(주파수 spread 작음)에 따라 PD 종류 식별. 사이클당 1점이 누적된다.

T_spread ▲ │ ╳ ← 단단/광대역 (긴 펄스) │ ╳ ╳ │ ╳ ╳ ╳ │ ╳ ╳ │ ╳ ← 짧고 좁은 대역 └──────────────▶ F_spread

구현: internal/fft/fft.go TF() + scopedata.MakeTfData().

관계 정리

┌──────────────┐ │ 장비 (T90) │ └──┬────────┬──┘ │ │ SCOPE 패킷 PQN 패킷 │ │ ▼ ▼ ┌────┐ ┌────┐ │ Hub│ │ Hub│ └─┬──┘ └─┬──┘ ┌──────┼──────┐ │ ▼ ▼ ▼ │ Scope PRPD TF │ 그래프 heatmap │ ▼ PRPS line

구체적 패킷 byte layout 은 T90 프로토콜, 접속·시작·종료 시퀀스는 패킷 흐름.