# WAVE09（相位轮 0°/90°，2026-11-04 19:15:32 触发）wave_read.py 输出全套

## dump
FILE            : WAVE09.BIN  (5250 bytes)
magic           : 57 52 01  ('WR' + version byte 1)
ver             : 1
fs_hz           : 1000
pts_per_cycle   : 20
ch_count        : 8
pts_per_ch      : 320  (320 ms at 1000 Hz)
pre_pts         : 160
trig_src        : 1 (MANUAL)
trig_elm        : 0
t0_ms           : 386333 (ms since power-on)
wall            : 1793819731 (epoch s)
eng             : 0 (pin-domain)
flags_seq       : 0x00  VALID bits: (none)
clip_mask       : 0x00E6  [UB UC IB IC IN]
frame_seq       : 386258
CRC16(hdr)      : 0xB00D  OK   covers [0,126), low byte first
CRC16(data)     : 0xF8AA  OK   covers 5120 bytes, low byte first
-- channel table (8 entries x 12 B) --
IDX SEM NAME  SRC        BITS AVAIL       K_Q16   B_CODES       LSB_uV       FLAG
  0   0 UA    TPAFE5160    16 0x00    10000000         0   152.587891          .
  1   1 UB    STM32-ADC1   12 0x02    52800000         0   805.664062    CLIPPED
  2   2 UC    STM32-ADC1   12 0x02    52800000         0   805.664062    CLIPPED
  3   3 UN    TPAFE5160    16 0x00    10000000         0   152.587891          .
  4   4 IA    TPAFE5160    16 0x00    10000000         0   152.587891          .
  5   5 IB    STM32-ADC1   12 0x02    52800000         0   805.664062    CLIPPED
  6   6 IC    STM32-ADC1   12 0x02    52800000         0   805.664062    CLIPPED
  7   7 IN    STM32-ADC1   12 0x02    52800000         0   805.664062    CLIPPED

## fft --ch 0 --all
unit: mV  eng=0 (pin-domain)  [pin-domain = ADC pin voltage, NOT calibrated secondary]
 CH NAME  SRC         CYCLE  RMS-f[mV] ANG-f[deg] RMS-2x[mV] RMS-5x[mV] NOTE
      (f = fundamental; 2x/5x = 2nd and 5th harmonic; angle reference = first sample of this window, not a phase lock to the signal generator)
  0 UA    TPAFE5160       0     995.94   -122.50       0.81       0.43
  0 UA    TPAFE5160       1     995.90   -122.50       0.98       0.40
  0 UA    TPAFE5160       2     995.91   -122.52       0.88       0.44
  0 UA    TPAFE5160       3     995.92   -122.52       0.87       0.48
  0 UA    TPAFE5160       4     995.83   -122.54       0.85       0.48
  0 UA    TPAFE5160       5     995.92   -122.54       0.88       0.40
  0 UA    TPAFE5160       6     995.91   -122.56       0.90       0.41
  0 UA    TPAFE5160       7     995.85   -122.57       0.88       0.36
  0 UA    TPAFE5160       8     995.88   -122.58       0.89       0.39
  0 UA    TPAFE5160       9     995.86   -122.60       0.87       0.35
  0 UA    TPAFE5160      10     995.88   -122.61       0.84       0.35
  0 UA    TPAFE5160      11     995.95   -122.62       0.88       0.36
  0 UA    TPAFE5160      12     995.91   -122.63       0.89       0.39
  0 UA    TPAFE5160      13     995.90   -122.64       0.87       0.41
  0 UA    TPAFE5160      14     995.89   -122.65       0.88       0.40
  0 UA    TPAFE5160      15     995.83   -122.66       0.82       0.41
  0 UA    TPAFE5160     ALL mean=    995.89 min=    995.83 max=    995.95  over 16 cycles
note: mV = (code + b_codes) * k_q16/65536/1000 (adc_cal_apply formula, unit labeled by header eng, never re-guessed); full-cycle window, coefficients = sin/cos(2*pi*k/N)*sqrt(2)/N as in App/algo/phasor.c; phase = atan2(im,re) deg

## fft --ch 3 --all
unit: mV  eng=0 (pin-domain)  [pin-domain = ADC pin voltage, NOT calibrated secondary]
 CH NAME  SRC         CYCLE  RMS-f[mV] ANG-f[deg] RMS-2x[mV] RMS-5x[mV] NOTE
      (f = fundamental; 2x/5x = 2nd and 5th harmonic; angle reference = first sample of this window, not a phase lock to the signal generator)
  3 UN    TPAFE5160       0     996.92   +147.46       0.67       0.36
  3 UN    TPAFE5160       1     996.75   +147.45       0.72       0.33
  3 UN    TPAFE5160       2     996.78   +147.44       0.70       0.35
  3 UN    TPAFE5160       3     996.84   +147.44       0.74       0.31
  3 UN    TPAFE5160       4     996.85   +147.42       0.63       0.37
  3 UN    TPAFE5160       5     996.84   +147.41       0.69       0.33
  3 UN    TPAFE5160       6     996.84   +147.40       0.67       0.30
  3 UN    TPAFE5160       7     996.78   +147.39       0.71       0.30
  3 UN    TPAFE5160       8     996.81   +147.37       0.69       0.31
  3 UN    TPAFE5160       9     996.91   +147.36       0.65       0.32
  3 UN    TPAFE5160      10     996.86   +147.35       0.71       0.38
  3 UN    TPAFE5160      11     996.85   +147.34       0.66       0.39
  3 UN    TPAFE5160      12     996.80   +147.33       0.68       0.39
  3 UN    TPAFE5160      13     996.85   +147.31       0.65       0.37
  3 UN    TPAFE5160      14     996.86   +147.30       0.75       0.33
  3 UN    TPAFE5160      15     996.84   +147.29       0.72       0.34
  3 UN    TPAFE5160     ALL mean=    996.84 min=    996.75 max=    996.92  over 16 cycles
note: mV = (code + b_codes) * k_q16/65536/1000 (adc_cal_apply formula, unit labeled by header eng, never re-guessed); full-cycle window, coefficients = sin/cos(2*pi*k/N)*sqrt(2)/N as in App/algo/phasor.c; phase = atan2(im,re) deg

## shape
unit: mV eng=0(pin-domain)   min-run for rail pin = 4 samples
 CH NAME  SRC        CYCLES  AMP[mVpk]  POL    SYM  PIN_LO  PIN_HI  RAIL
  0 UA    TPAFE5160   16.00    1406.25    -  0.002       0       0     .
  1 UB    STM32-ADC1  23.50      14.90    +  1.614       0       0     .
  2 UC    STM32-ADC1  21.50      15.71    +  1.625       0       0     .
  3 UN    TPAFE5160   16.00    1408.16    +  0.001       0       0     .
  4 IA    TPAFE5160   52.00       0.31    +  1.582       0       0     .
  5 IB    STM32-ADC1  21.50      14.10    +  1.622       0       0     .
  6 IC    STM32-ADC1  24.50      15.31    +  1.603       0       0     .
  7 IN    STM32-ADC1  20.50      16.11    +  1.604       0       0     .
clip reconcile: measured=0x0000 [-]  header=0x00E6 [UB UC IB IC IN]  MISMATCH
yardstick: equality (default card check) -- measured rail pins must equal the sealed clip_mask
note: header clip_mask is the seal-time CLIPPED STAMP, source-derived in V0.1 (App/algo/adc_cal.c: s_rom_k_stm32 -> CLIPPED, unipolar no-bias), NOT measured from samples; measured is this segment's rail pins. Real V0.1 AC waves bottom-rail the 5 stamped channels, so equality is expected on-board; a non-railed measurement means synthetic fixture (e.g. column ramps) or wiring change -- investigate, do not auto-blame the seal
