diff --git a/PROJECT_LOG.md b/PROJECT_LOG.md index b62412c..2c9de13 100644 --- a/PROJECT_LOG.md +++ b/PROJECT_LOG.md @@ -2661,3 +2661,72 @@ READY_BEHIND_EXPLICIT_MODE до отдельного контролируемо 500K-пакетами. Оборудование не опрашивалось, RF TX=0. Lab061 фиксируется этим отдельным коммитом; push выполняется пользователем отдельно. Следующий этап: STOP; Lab062 автоматически не начинать. + +# Запись 056 + +## Дата + +14 сентября 2026 года + +## Тема + +Lab062 — подготовка полного пакета 500K и аппаратный RX-only preflight + +## Выполнено + +От HEAD 25cc89f0c734f77141632d19dbcdb6b2f066d60b подготовлен один waveform +из16 полных PHY-пакетов по256 байт payload:1476096 отсчётов,0,184512с, +SHA-256 e84bbce227426c0aac13a48ded1286ca4a44fc6e3efce01f6e5a513217c87ff5. +Строгий программный roundtrip legacy/T2 дал16/16 HEADER/FEC/CRC и точных +payload в исходном порядке. Quick gate:962 теста ядра,35 функциональных +проверок,13 пропусков; pytest:962 passed,0 failed. + +Фактическая схема:1400МГц,500ксимв/с, Fs8Мвыб/с, расстояние примерно1,2м, +LOS в помещении; TX возле окна, RX на столе, одинаковая поляризация. Антенны, +кабели и USB-схема неподвижны. Усиления сохранены: TX VGA10дБ, RX LNA/VGA +24/24дБ, RF amplifier и Bias-Tee OFF. Общая опора:10МГц TCXO → MASTER → +MASTER CLKOUT → SLAVE CLKIN, длинный кабель сохранён. + +Один аппаратный RX-only preflight подтвердил MASTER/SLAVE reg29=0x26 и SLAVE +CLKIN=DETECTED на втором опросе через133,5795мс. Записано800000 отсчётов фона: +полный RMS2,314058, AC RMS0,985483 кода, max|I|/|Q|=6/8, clipping0/800000, +RX overruns0, неожиданно сильного сигнала нет. Отсутствие аналоговой компрессии +этим не доказано. CLKOUT выключены без ошибок, процессы до/после CLEAR. + +RF TX=0, TX-команд не было, усиления не менялись, preflight не повторялся. +Lab062 не коммитировалась, push не выполнялся. Следующий этап: STOP и ожидание +отдельного явного разрешения на единственный Lab062 TX; Lab063 не начинать. + +# Запись 057 + +## Дата + +14 сентября 2026 года + +## Тема + +Lab062 — единственный RF-сеанс полного пакета 500K и сравнение legacy/T2 + +## Выполнено + +После отдельного разрешения пользователя выполнен один TX-сеанс подготовленного потока из 16 +полных PHY-пакетов. Перед TX повторная проверка подтвердила MASTER/SLAVE reg29=0x26 и SLAVE +CLKIN=DETECTED. Автоматических и ручных повторов не было. RX сохранил 24 000 000 комплексных +отсчётов за 3,000 с, 48 000 000 байт, SHA-256 +ce0bd603e4ca356af67d504ee11c9e9f38171f31c7427fbe61216a28126b2b32; overruns0 и clipping0. + +В промежуточной строке TX-журнала зарегистрирован один underrun длиной до16672 байт, хотя +итоговая строка утилиты сообщила0. Ненулевое наблюдение сохранено, сеанс признан +`INVALID_TX_UNDERRUN`, повтор запрещён и не выполнялся. Cleanup прошёл без ошибок, SDR-процессы +после сеанса CLEAR, RF TX=0. + +Одна и та же RX-запись независимо обработана строгими режимами legacy и T2 без fallback. Оба +получили144 строгих кандидата,3 прохода PHY header,3 запуска и прохода FEC,3 запуска CRC,0 CRC +PASS и0/16 пакетов. T2 gain равен0. Диагностические границы всех16 пакетов найдены только после +строгого вердикта и не передавались приёмнику. По сопоставимой методике Lab058 средняя доля +ошибочных символов равна0,099287, EVM1,220401, matched/residual−1,730051дБ, медианная +неравномерность полосы p95–p05 равна6,660341дБ. Эти значения хуже Lab056 B, но их нельзя +отделить от TX underrun. + +Lab062 не коммитировалась, push не выполнялся, Lab063 не создана. Следующий этап: RF TX=0 и +отдельно согласовать только офлайн-локализацию underrun относительно границ пакетов. diff --git a/data/processed/lab062/capture_result.json b/data/processed/lab062/capture_result.json new file mode 100644 index 0000000..924b4bb --- /dev/null +++ b/data/processed/lab062/capture_result.json @@ -0,0 +1,130 @@ +{ + "lab": "Lab062", + "stage": "SINGLE_RF_CAPTURE", + "passed": false, + "rf_tx_count": 1, + "automatic_tx_repeats": 0, + "point": { + "frequency_hz": 1400000000, + "physical_path": "MASTER TX near window -> LOS indoor -> SLAVE RX on desk", + "path_confirmed": true, + "tx_antenna": "existing 1400 MHz antenna near window", + "rx_antenna": "existing 1400 MHz antenna on desk", + "distance_m": 1.2, + "orientation": "same polarization; fixed during preflight and RF session", + "visibility": "LOS indoor" + }, + "parameters": { + "rf_frequency_hz": 1400000000, + "sample_rate_hz": 8000000, + "symbol_rate": 500000, + "samples_per_symbol": 16, + "digital_carrier_hz": 50000.0, + "packets": 16, + "payload_bytes": 256, + "tx_vga_db": 10, + "rx_lna_db": 24, + "rx_vga_db": 24, + "rf_amplifier": false, + "bias_tee": false, + "geometry": { + "frequency_hz": 1400000000, + "physical_path": "MASTER TX near window -> LOS indoor -> SLAVE RX on desk", + "path_confirmed": true, + "tx_antenna": "existing 1400 MHz antenna near window", + "rx_antenna": "existing 1400 MHz antenna on desk", + "distance_m": 1.2, + "orientation": "same polarization; fixed during preflight and RF session", + "visibility": "LOS indoor" + }, + "clock_path": "10 MHz TCXO -> MASTER -> MASTER CLKOUT -> SLAVE CLKIN" + }, + "tx_sha256": "e84bbce227426c0aac13a48ded1286ca4a44fc6e3efce01f6e5a513217c87ff5", + "process_before": { + "state": "CLEAR", + "attempts": [ + { + "state": "CLEAR", + "mechanism": "psutil", + "matches": [], + "inspected": 304, + "errors": [] + } + ] + }, + "inventory": { + "passed": true, + "serials": [ + "000000000000000097c063dc2e5327d3", + "000000000000000097c063dc323b97d3" + ], + "master_serial": "000000000000000097c063dc323b97d3", + "slave_serial": "000000000000000097c063dc2e5327d3", + "raw_output": "hackrf_info version: 2024.02.1\nlibhackrf version: 2024.02.1 (0.9)\nFound HackRF\nIndex: 0\nSerial number: 000000000000000097c063dc323b97d3\nBoard ID Number: 4 (HackRF One)\nFirmware Version: 2024.02.1 (API:1.08)\nPart ID Number: 0xa000cb3c 0x00744f5a\nHardware Revision: r9\nHardware does not appear to have been manufactured by Great Scott Gadgets.\nHardware supported by installed firmware:\n HackRF One\n\nFound HackRF\nIndex: 1\nSerial number: 000000000000000097c063dc2e5327d3\nBoard ID Number: 4 (HackRF One)\nFirmware Version: 2024.02.1 (API:1.08)\nPart ID Number: 0xa000cb3c 0xbc4b4739\nHardware Revision: r9\nHardware does not appear to have been manufactured by Great Scott Gadgets.\nHardware supported by installed firmware:\n HackRF One" + }, + "clock": { + "passed": true, + "master_reg29": 38, + "slave_reg29": 38, + "slave_clkin_status": "DETECTED", + "slave_clock_wait": { + "state": "DETECTED", + "queries": 2, + "time_to_detect_ms": 140.9547000657767, + "elapsed_ms": 140.9547000657767, + "polls": [ + { + "query": 1, + "start_ms": 50.31830002553761, + "end_ms": 67.1174000017345, + "raw": "CLKIN status: no clock signal detected", + "state": "NOT_DETECTED", + "exit_code": 0 + }, + { + "query": 2, + "start_ms": 117.15810000896454, + "end_ms": 140.9547000657767, + "raw": "CLKIN status: clock signal detected", + "state": "DETECTED", + "exit_code": 0 + } + ] + }, + "master_serial": "000000000000000097c063dc323b97d3", + "slave_serial": "000000000000000097c063dc2e5327d3" + }, + "rx_level_before_tx": { + "samples": 65536, + "mean_i": 0.957977294921875, + "mean_q": 1.857269287109375, + "power_code2": 4.886199951171875, + "ac_power_code2": 0.5190302487462768, + "rms_code": 2.2104750510177387, + "peak_magnitude_code": 4.123105625617661, + "max_abs_i": 3.0, + "max_abs_q": 4.0, + "papr_db": 5.414776863475277, + "clipped_components_fraction": 0.0, + "clipped_samples_fraction": 0.0, + "saturation_detected": false, + "analog_compression": "UNKNOWN_WITHOUT_CALIBRATION" + }, + "rx_samples": 24000000, + "rx_bytes": 48000000, + "rx_duration_seconds": 3.0, + "error": "TX underrun или неоднозначный счётчик; повтор запрещён", + "process_after": { + "state": "CLEAR", + "attempts": [ + { + "state": "CLEAR", + "mechanism": "psutil", + "matches": [], + "inspected": 304, + "errors": [] + } + ] + }, + "cleanup_errors": [] +} \ No newline at end of file diff --git a/data/processed/lab062/legacy_rf_decode.json b/data/processed/lab062/legacy_rf_decode.json new file mode 100644 index 0000000..630b523 --- /dev/null +++ b/data/processed/lab062/legacy_rf_decode.json @@ -0,0 +1,2043 @@ +{ + "mode": "legacy", + "candidates": 144, + "true_packets_found": 0, + "header_pass": 3, + "fec_started": 3, + "fec_pass": 3, + "crc_started": 3, + "crc_pass": 0, + "packet_output": 0, + "exact_payload_match": 0, + "exact_ordered_payloads": false, + "passed": false, + "passed_packet_indexes": [], + "rows": [ + { + "absolute_refined": 4256091, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4254059, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4258123, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4252027, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4249996, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4247963, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4260155, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4262187, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4264219, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4348347, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4346316, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4350380, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4352411, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4344284, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4354443, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4342252, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4340220, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4440603, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4442635, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4438571, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4436539, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4444668, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4434508, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4446699, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4432475, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4532859, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4530827, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4534891, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4528795, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4536923, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4526763, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4538955, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4625115, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4623083, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4627147, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4629179, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4621051, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4631211, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4619019, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4633243, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4616987, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4631211, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4717371, + "reason": "CRC_FAIL", + "header": true, + "fec_started": true, + "fec": true, + "crc_started": true, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": 0.996778710432929, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4715339, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4713307, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4711275, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4709243, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4719403, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4721435, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4723467, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4725499, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4809627, + "reason": "PHY_HEADER_CHECKSUM_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4811660, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4807595, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4813692, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4805564, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4815724, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4803532, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4801500, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4817755, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4901883, + "reason": "PHY_HEADER_VERSION_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4899851, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4903915, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4897819, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4905947, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4895787, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4907979, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4910011, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4893755, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4994139, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4992107, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4996171, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4990075, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4998204, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4988043, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5000236, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4986011, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4994139, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 4996171, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5086395, + "reason": "PHY_HEADER_VERSION_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5084363, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5088427, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5090459, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5082331, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5080299, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5092491, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5078267, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5094523, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5176619, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5174587, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5172555, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5170523, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5178651, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5180683, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5182715, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5184747, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5186779, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5186779, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5270907, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5268875, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5272939, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5266844, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5274971, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5277003, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5264812, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5279035, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5270907, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5272939, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5363163, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5361131, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5365195, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5359099, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5367227, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5369259, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5357067, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5455419, + "reason": "CRC_FAIL", + "header": true, + "fec_started": true, + "fec": true, + "crc_started": true, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": -7.122211971387016, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5453387, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5457451, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5451355, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5459483, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5449323, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5461515, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5447292, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5463547, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5547675, + "reason": "CRC_FAIL", + "header": true, + "fec_started": true, + "fec": true, + "crc_started": true, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": -7.329993567335002, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5549707, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5545643, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5543611, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5551739, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5541580, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5553771, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5539547, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5555803, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5635867, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5633835, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5631803, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5639931, + "reason": "PHY_HEADER_VERSION_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5637899, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5641963, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5643995, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5646027, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5648059, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 5646027, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + { + "absolute_refined": 7175676, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + } + ], + "detector_statistics": { + "total_local_peaks": 825858, + "first_stage_candidates": 209956, + "cheap_stage_checked": 209956, + "cheap_stage_rejected": 209812, + "clusters": 21, + "representative_checks": 21, + "alternative_checks": 123 + }, + "candidate_overflow": 0 +} \ No newline at end of file diff --git a/data/processed/lab062/packet_comparison.csv b/data/processed/lab062/packet_comparison.csv new file mode 100644 index 0000000..aa68577 --- /dev/null +++ b/data/processed/lab062/packet_comparison.csv @@ -0,0 +1,17 @@ +packet_index,legacy_header,legacy_fec,legacy_crc,legacy_output,t2_header,t2_fec,t2_crc,t2_output,preamble_errors_t2,header_errors_t2,payload_errors_before_fec_t2,initial_frequency_hz_t2,t2_final_frequency_hz,t2_lock_status +1,False,False,False,False,False,False,False,False,108,20,367,-2.511306789128502,1.938828000443245,NOT_DEFINED_BY_IMPLEMENTATION +2,False,False,False,False,False,False,False,False,135,11,377,16.850274814266026,-2.223133252684196,NOT_DEFINED_BY_IMPLEMENTATION +3,False,False,False,False,False,False,False,False,466,115,2229,-266.23811405950204,-265.79617151697045,NOT_DEFINED_BY_IMPLEMENTATION +4,False,False,False,False,False,False,False,False,515,104,2266,297.2495839963796,293.7996556301242,NOT_DEFINED_BY_IMPLEMENTATION +5,False,False,False,False,False,False,False,False,108,27,369,-1.7121731230326125,-0.8347122576256625,NOT_DEFINED_BY_IMPLEMENTATION +6,True,True,False,False,True,True,False,False,112,10,345,4.67554618043703,-3.16390424095876,NOT_DEFINED_BY_IMPLEMENTATION +7,False,False,False,False,False,False,False,False,113,7,344,2.1125086049646824,1.0944814837028547,NOT_DEFINED_BY_IMPLEMENTATION +8,False,False,False,False,False,False,False,False,91,19,368,0.9638879273500407,0.35355297825700155,NOT_DEFINED_BY_IMPLEMENTATION +9,False,False,False,False,False,False,False,False,105,21,367,-2.6793109690685877,0.19088110622128074,NOT_DEFINED_BY_IMPLEMENTATION +10,False,False,False,False,False,False,False,False,116,7,345,-0.29035656707501434,0.9472030503555074,NOT_DEFINED_BY_IMPLEMENTATION +11,False,False,False,False,True,True,False,False,109,9,392,0.7573187277726318,-0.14196556023732618,NOT_DEFINED_BY_IMPLEMENTATION +12,False,False,False,False,False,False,False,False,297,110,2181,-223.04966205995262,-222.38930722105994,NOT_DEFINED_BY_IMPLEMENTATION +13,False,False,False,False,False,False,False,False,304,36,524,-0.16099769754669116,-2.081420319755734,NOT_DEFINED_BY_IMPLEMENTATION +14,True,True,False,False,False,False,False,False,314,127,2091,228.20916012396785,224.92813768839025,NOT_DEFINED_BY_IMPLEMENTATION +15,True,True,False,False,True,True,False,False,131,7,395,-9.95965988857566,2.2844456653638283,NOT_DEFINED_BY_IMPLEMENTATION +16,False,False,False,False,False,False,False,False,100,23,355,13.156526986310709,-0.8684121381823278,NOT_DEFINED_BY_IMPLEMENTATION diff --git a/data/processed/lab062/preflight_result.json b/data/processed/lab062/preflight_result.json new file mode 100644 index 0000000..29cbb58 --- /dev/null +++ b/data/processed/lab062/preflight_result.json @@ -0,0 +1,144 @@ +{ + "lab": "Lab062", + "stage": "RX_ONLY_PREFLIGHT", + "passed": true, + "rf_tx_count": 0, + "point": { + "frequency_hz": 1400000000, + "physical_path": "MASTER TX near window -> LOS indoor -> SLAVE RX on desk", + "path_confirmed": true, + "tx_antenna": "existing 1400 MHz antenna near window", + "rx_antenna": "existing 1400 MHz antenna on desk", + "distance_m": 1.2, + "orientation": "same polarization; fixed during preflight and RF session", + "visibility": "LOS indoor" + }, + "parameters": { + "rf_frequency_hz": 1400000000, + "sample_rate_hz": 8000000, + "symbol_rate": 500000, + "samples_per_symbol": 16, + "digital_carrier_hz": 50000.0, + "packets": 16, + "payload_bytes": 256, + "tx_vga_db": 10, + "rx_lna_db": 24, + "rx_vga_db": 24, + "rf_amplifier": false, + "bias_tee": false, + "geometry": { + "frequency_hz": 1400000000, + "physical_path": "MASTER TX near window -> LOS indoor -> SLAVE RX on desk", + "path_confirmed": true, + "tx_antenna": "existing 1400 MHz antenna near window", + "rx_antenna": "existing 1400 MHz antenna on desk", + "distance_m": 1.2, + "orientation": "same polarization; fixed during preflight and RF session", + "visibility": "LOS indoor" + }, + "clock_path": "10 MHz TCXO -> MASTER -> MASTER CLKOUT -> SLAVE CLKIN" + }, + "tx_sha256": "e84bbce227426c0aac13a48ded1286ca4a44fc6e3efce01f6e5a513217c87ff5", + "stop_before_tx": true, + "process_before": { + "state": "CLEAR", + "attempts": [ + { + "state": "CLEAR", + "mechanism": "psutil", + "matches": [], + "inspected": 308, + "errors": [] + } + ] + }, + "inventory": { + "passed": true, + "serials": [ + "000000000000000097c063dc2e5327d3", + "000000000000000097c063dc323b97d3" + ], + "master_serial": "000000000000000097c063dc323b97d3", + "slave_serial": "000000000000000097c063dc2e5327d3", + "raw_output": "hackrf_info version: 2024.02.1\nlibhackrf version: 2024.02.1 (0.9)\nFound HackRF\nIndex: 0\nSerial number: 000000000000000097c063dc323b97d3\nBoard ID Number: 4 (HackRF One)\nFirmware Version: 2024.02.1 (API:1.08)\nPart ID Number: 0xa000cb3c 0x00744f5a\nHardware Revision: r9\nHardware does not appear to have been manufactured by Great Scott Gadgets.\nHardware supported by installed firmware:\n HackRF One\n\nFound HackRF\nIndex: 1\nSerial number: 000000000000000097c063dc2e5327d3\nBoard ID Number: 4 (HackRF One)\nFirmware Version: 2024.02.1 (API:1.08)\nPart ID Number: 0xa000cb3c 0xbc4b4739\nHardware Revision: r9\nHardware does not appear to have been manufactured by Great Scott Gadgets.\nHardware supported by installed firmware:\n HackRF One" + }, + "clock": { + "passed": true, + "master_reg29": 38, + "slave_reg29": 38, + "slave_clkin_status": "DETECTED", + "slave_clock_wait": { + "state": "DETECTED", + "queries": 2, + "time_to_detect_ms": 133.57950001955032, + "elapsed_ms": 133.57950001955032, + "polls": [ + { + "query": 1, + "start_ms": 50.528000108897686, + "end_ms": 67.34060007147491, + "raw": "CLKIN status: no clock signal detected", + "state": "NOT_DETECTED", + "exit_code": 0 + }, + { + "query": 2, + "start_ms": 117.69610014744103, + "end_ms": 133.57950001955032, + "raw": "CLKIN status: clock signal detected", + "state": "DETECTED", + "exit_code": 0 + } + ] + }, + "master_serial": "000000000000000097c063dc323b97d3", + "slave_serial": "000000000000000097c063dc2e5327d3" + }, + "rx_process": { + "returncode": 0, + "stdout": "", + "stderr": "call hackrf_set_sample_rate(8000000 Hz/8.000 MHz)\ncall hackrf_set_hw_sync_mode(0)\ncall hackrf_set_freq(1400000000 Hz/1400.000 MHz)\ncall hackrf_set_amp_enable(0)\ncall hackrf_set_antenna_enable(0)\nsamples_to_xfer 800000/0Mio\nStop with Ctrl-C\n 1.8 MiB / 0.115 sec = 15.9 MiB/second, average power -34.5 dBfs, 9120 bytes free in buffer, 0 overruns, longest 0 bytes\n\nExiting...\nTotal time: 0.11549 s\nhackrf_stop_rx() done\nTransfer statistics:\n1847680 bytes transferred by M0\n1835008 bytes transferred by M4\n0 overruns, longest 0 bytes\nhackrf_close() done\nhackrf_exit() done\nfclose() done\nexit\n" + }, + "rx_level": { + "samples": 800000, + "mean_i": 0.9660625, + "mean_q": 1.85752875, + "power_code2": 5.35486625, + "ac_power_code2": 0.9711764390171878, + "rms_code": 2.3140583938180987, + "peak_magnitude_code": 8.246211251235321, + "max_abs_i": 6.0, + "max_abs_q": 8.0, + "papr_db": 11.037602848982825, + "clipped_components_fraction": 0.0, + "clipped_samples_fraction": 0.0, + "saturation_detected": false, + "analog_compression": "UNKNOWN_WITHOUT_CALIBRATION", + "ac_rms_code": 0.9854828456229909, + "unexpected_strong_signal": false, + "strong_signal_rule": "AC RMS >= 20.0 code or max |I|/|Q| >= 100.0 code", + "symbol_energy": "NOT_APPLICABLE_TO_BACKGROUND" + }, + "rx_sha256": "4cc0ceef5a95f84e5aa0c232d14ff1123efd307494b5c8a5646854be912fdbca", + "rx_overruns": 0, + "process_after": { + "state": "CLEAR", + "attempts": [ + { + "state": "CLEAR", + "mechanism": "psutil", + "matches": [], + "inspected": 308, + "errors": [] + } + ] + }, + "cleanup_errors": [], + "processed_correction": { + "source": "data/raw/lab062/preflight_result.json", + "removed_field": "rx_level.symbol_energy_code2_seconds", + "removed_value": 0.00026774331249999997, + "reason": "inherited Lab056 20 ksymbol/s normalization is not applicable to RX-only background", + "preflight_pass_affected": false + } +} \ No newline at end of file diff --git a/data/processed/lab062/preparation.json b/data/processed/lab062/preparation.json new file mode 100644 index 0000000..fc0d97f --- /dev/null +++ b/data/processed/lab062/preparation.json @@ -0,0 +1,80 @@ +{ + "lab": "Lab062", + "stage": "PREPARATION_ONLY", + "rf_tx_count": 0, + "head": "25cc89f0c734f77141632d19dbcdb6b2f066d60b", + "parameters": { + "rf_frequency_hz": 1400000000, + "sample_rate_hz": 8000000, + "symbol_rate": 500000, + "samples_per_symbol": 16, + "digital_carrier_hz": 50000.0, + "packets": 16, + "payload_bytes": 256, + "tx_vga_db": 10, + "rx_lna_db": 24, + "rx_vga_db": 24, + "rf_amplifier": false, + "bias_tee": false, + "geometry": { + "frequency_hz": 1400000000, + "physical_path": "MASTER TX near window -> LOS indoor -> SLAVE RX on desk", + "path_confirmed": true, + "tx_antenna": "existing 1400 MHz antenna near window", + "rx_antenna": "existing 1400 MHz antenna on desk", + "distance_m": 1.2, + "orientation": "same polarization; fixed during preflight and RF session", + "visibility": "LOS indoor" + }, + "clock_path": "10 MHz TCXO -> MASTER -> MASTER CLKOUT -> SLAVE CLKIN" + }, + "tx_samples": 1476096, + "tx_bytes": 2952192, + "tx_duration_seconds": 0.184512, + "tx_sha256": "e84bbce227426c0aac13a48ded1286ca4a44fc6e3efce01f6e5a513217c87ff5", + "rx_samples": 24000000, + "rx_duration_seconds": 3, + "automatic_retry": false, + "tx_command_prepared_not_run": [ + "C:\\Users\\user\\Tools\\HackRF\\Library\\bin\\hackrf_transfer.exe", + "-d", + "000000000000000097c063dc323b97d3", + "-t", + "C:\\Users\\user\\Desktop\\projects\\SDR_Rover\\data\\raw\\lab062\\tx_stream.cs8", + "-f", + "1400000000", + "-s", + "8000000", + "-n", + "1476096", + "-x", + "10", + "-a", + "0", + "-p", + "0", + "-B" + ], + "rx_command_prepared_not_run": [ + "C:\\Users\\user\\Tools\\HackRF\\Library\\bin\\hackrf_transfer.exe", + "-d", + "000000000000000097c063dc2e5327d3", + "-r", + "C:\\Users\\user\\Desktop\\projects\\SDR_Rover\\data\\raw\\lab062\\rx_stream.cs8", + "-f", + "1400000000", + "-s", + "8000000", + "-n", + "24000000", + "-l", + "24", + "-g", + "24", + "-a", + "0", + "-p", + "0", + "-B" + ] +} \ No newline at end of file diff --git a/data/processed/lab062/rf_analysis.json b/data/processed/lab062/rf_analysis.json new file mode 100644 index 0000000..075ef1f --- /dev/null +++ b/data/processed/lab062/rf_analysis.json @@ -0,0 +1,2986 @@ +{ + "lab": "Lab062", + "status": "RF_SESSION_INVALID_TX_UNDERRUN", + "rf_tx_count": 1, + "automatic_tx_repeats": 0, + "integrity": { + "tx_sha256": "e84bbce227426c0aac13a48ded1286ca4a44fc6e3efce01f6e5a513217c87ff5", + "rx_sha256": "ce0bd603e4ca356af67d504ee11c9e9f38171f31c7427fbe61216a28126b2b32", + "rx_samples": 24000000, + "rx_bytes": 48000000, + "rx_duration_seconds": 3.0, + "rx_overrun_values": [ + 0, + 0, + 0, + 0, + 0 + ], + "tx_underrun_values": [ + 1, + 0 + ], + "rx_overruns_max": 0, + "tx_underruns_max": 1, + "rx_clipping": false, + "rx_clipped_samples_fraction": 0.0 + }, + "clock": { + "passed": true, + "master_reg29": 38, + "slave_reg29": 38, + "slave_clkin_status": "DETECTED", + "slave_clock_wait": { + "state": "DETECTED", + "queries": 2, + "time_to_detect_ms": 140.9547000657767, + "elapsed_ms": 140.9547000657767, + "polls": [ + { + "query": 1, + "start_ms": 50.31830002553761, + "end_ms": 67.1174000017345, + "raw": "CLKIN status: no clock signal detected", + "state": "NOT_DETECTED", + "exit_code": 0 + }, + { + "query": 2, + "start_ms": 117.15810000896454, + "end_ms": 140.9547000657767, + "raw": "CLKIN status: clock signal detected", + "state": "DETECTED", + "exit_code": 0 + } + ] + }, + "master_serial": "000000000000000097c063dc323b97d3", + "slave_serial": "000000000000000097c063dc2e5327d3" + }, + "cleanup_errors": [], + "location": { + "rx_start_sample": 4256091, + "coarse_start_sample": 4256096, + "correlation_peak_to_median": 21.73905372619629, + "method": "TX first-frame correlation; used only after strict receiver verdict" + }, + "legacy": { + "mode": "legacy", + "candidates": 144, + "true_packets_found": 0, + "header_pass": 3, + "fec_started": 3, + "fec_pass": 3, + "crc_started": 3, + "crc_pass": 0, + "packet_output": 0, + "exact_payload_match": 0, + "exact_ordered_payloads": false, + "passed": false, + "passed_packet_indexes": [], + "detector_statistics": { + "total_local_peaks": 825858, + "first_stage_candidates": 209956, + "cheap_stage_checked": 209956, + "cheap_stage_rejected": 209812, + "clusters": 21, + "representative_checks": 21, + "alternative_checks": 123 + }, + "candidate_overflow": 0 + }, + "t2": { + "mode": "t2", + "candidates": 144, + "true_packets_found": 0, + "header_pass": 3, + "fec_started": 3, + "fec_pass": 3, + "crc_started": 3, + "crc_pass": 0, + "packet_output": 0, + "exact_payload_match": 0, + "exact_ordered_payloads": false, + "passed": false, + "passed_packet_indexes": [], + "detector_statistics": { + "total_local_peaks": 825858, + "first_stage_candidates": 209956, + "cheap_stage_checked": 209956, + "cheap_stage_rejected": 209812, + "clusters": 21, + "representative_checks": 21, + "alternative_checks": 123 + }, + "candidate_overflow": 0 + }, + "passed_by_both": [], + "passed_only_by_legacy": [], + "passed_only_by_t2": [], + "failed_by_both": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16 + ], + "packet_rows": [ + { + "packet_index": 1, + "nominal_rx_start": 4256091, + "legacy": { + "absolute_refined": 4256091, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "t2": { + "absolute_refined": 4256091, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -1.7194573300467735, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + "diagnostic_legacy": { + "packet_index": 1, + "measurable": true, + "preamble_symbol_errors": 107, + "header_symbol_errors": 20, + "payload_symbols_before_fec_errors": 360, + "symbols": 5724, + "symbol_errors": 487, + "symbol_error_rate": 0.08508036338225017, + "symbol_rms_deviation": 0.7282375976295775, + "initial_frequency_hz": -0.7221087309766124, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "diagnostic_t2": { + "packet_index": 1, + "measurable": true, + "preamble_symbol_errors": 108, + "header_symbol_errors": 20, + "payload_symbols_before_fec_errors": 367, + "symbols": 5724, + "symbol_errors": 495, + "symbol_error_rate": 0.08647798742138364, + "symbol_rms_deviation": 0.7288681252925577, + "initial_frequency_hz": -2.511306789128502, + "t2_final_frequency_hz": 1.938828000443245, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + } + }, + { + "packet_index": 2, + "nominal_rx_start": 4348347, + "legacy": { + "absolute_refined": 4348347, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "t2": { + "absolute_refined": 4348347, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 15.55265695495649, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + "diagnostic_legacy": { + "packet_index": 2, + "measurable": true, + "preamble_symbol_errors": 133, + "header_symbol_errors": 11, + "payload_symbols_before_fec_errors": 1231, + "symbols": 5724, + "symbol_errors": 1375, + "symbol_error_rate": 0.2402166317260657, + "symbol_rms_deviation": 0.9543416806376669, + "initial_frequency_hz": 27.975891292619526, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "diagnostic_t2": { + "packet_index": 2, + "measurable": true, + "preamble_symbol_errors": 135, + "header_symbol_errors": 11, + "payload_symbols_before_fec_errors": 377, + "symbols": 5724, + "symbol_errors": 523, + "symbol_error_rate": 0.09136967155835081, + "symbol_rms_deviation": 0.758288117273297, + "initial_frequency_hz": 16.850274814266026, + "t2_final_frequency_hz": -2.223133252684196, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + } + }, + { + "packet_index": 3, + "nominal_rx_start": 4440603, + "legacy": { + "absolute_refined": 4440603, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "t2": { + "absolute_refined": 4440603, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -269.48595250063136, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + "diagnostic_legacy": { + "packet_index": 3, + "measurable": true, + "preamble_symbol_errors": 121, + "header_symbol_errors": 8, + "payload_symbols_before_fec_errors": 728, + "symbols": 5724, + "symbol_errors": 857, + "symbol_error_rate": 0.1497204751921733, + "symbol_rms_deviation": 0.9290353690885089, + "initial_frequency_hz": 13.06949559719252, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "diagnostic_t2": { + "packet_index": 3, + "measurable": true, + "preamble_symbol_errors": 466, + "header_symbol_errors": 115, + "payload_symbols_before_fec_errors": 2229, + "symbols": 5724, + "symbol_errors": 2810, + "symbol_error_rate": 0.49091544374563245, + "symbol_rms_deviation": 3.729113175761662, + "initial_frequency_hz": -266.23811405950204, + "t2_final_frequency_hz": -265.79617151697045, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + } + }, + { + "packet_index": 4, + "nominal_rx_start": 4532859, + "legacy": { + "absolute_refined": 4532859, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "t2": { + "absolute_refined": 4532859, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 298.8501940081021, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + "diagnostic_legacy": { + "packet_index": 4, + "measurable": true, + "preamble_symbol_errors": 277, + "header_symbol_errors": 34, + "payload_symbols_before_fec_errors": 587, + "symbols": 5724, + "symbol_errors": 898, + "symbol_error_rate": 0.15688329839273235, + "symbol_rms_deviation": 1.0995220304949234, + "initial_frequency_hz": 0.15317242226936598, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "diagnostic_t2": { + "packet_index": 4, + "measurable": true, + "preamble_symbol_errors": 515, + "header_symbol_errors": 104, + "payload_symbols_before_fec_errors": 2266, + "symbols": 5724, + "symbol_errors": 2885, + "symbol_error_rate": 0.5040181691125087, + "symbol_rms_deviation": 3.99762569396499, + "initial_frequency_hz": 297.2495839963796, + "t2_final_frequency_hz": 293.7996556301242, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + } + }, + { + "packet_index": 5, + "nominal_rx_start": 4625115, + "legacy": { + "absolute_refined": 4625115, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "t2": { + "absolute_refined": 4625115, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -0.1417433222547976, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + "diagnostic_legacy": { + "packet_index": 5, + "measurable": true, + "preamble_symbol_errors": 114, + "header_symbol_errors": 30, + "payload_symbols_before_fec_errors": 438, + "symbols": 5724, + "symbol_errors": 582, + "symbol_error_rate": 0.10167714884696016, + "symbol_rms_deviation": 0.7605917935205363, + "initial_frequency_hz": -9.076045070444666, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "diagnostic_t2": { + "packet_index": 5, + "measurable": true, + "preamble_symbol_errors": 108, + "header_symbol_errors": 27, + "payload_symbols_before_fec_errors": 369, + "symbols": 5724, + "symbol_errors": 504, + "symbol_error_rate": 0.0880503144654088, + "symbol_rms_deviation": 0.7427948848927884, + "initial_frequency_hz": -1.7121731230326125, + "t2_final_frequency_hz": -0.8347122576256625, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + } + }, + { + "packet_index": 6, + "nominal_rx_start": 4717371, + "legacy": { + "absolute_refined": 4717371, + "reason": "CRC_FAIL", + "header": true, + "fec_started": true, + "fec": true, + "crc_started": true, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": 0.996778710432929, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "t2": { + "absolute_refined": 4717371, + "reason": "CRC_FAIL", + "header": true, + "fec_started": true, + "fec": true, + "crc_started": true, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": 4.67554618043703, + "t2_final_frequency_hz": -3.16390424095876, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + "diagnostic_legacy": { + "packet_index": 6, + "measurable": true, + "preamble_symbol_errors": 112, + "header_symbol_errors": 9, + "payload_symbols_before_fec_errors": 367, + "symbols": 5724, + "symbol_errors": 488, + "symbol_error_rate": 0.08525506638714186, + "symbol_rms_deviation": 0.7375791934023369, + "initial_frequency_hz": 0.996778710432929, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "diagnostic_t2": { + "packet_index": 6, + "measurable": true, + "preamble_symbol_errors": 112, + "header_symbol_errors": 10, + "payload_symbols_before_fec_errors": 345, + "symbols": 5724, + "symbol_errors": 467, + "symbol_error_rate": 0.08158630328441649, + "symbol_rms_deviation": 0.7409178937363988, + "initial_frequency_hz": 4.67554618043703, + "t2_final_frequency_hz": -3.16390424095876, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + } + }, + { + "packet_index": 7, + "nominal_rx_start": 4809627, + "legacy": { + "absolute_refined": 4809627, + "reason": "PHY_HEADER_CHECKSUM_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "t2": { + "absolute_refined": 4809627, + "reason": "PHY_HEADER_CHECKSUM_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -1.0113931346659666, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + "diagnostic_legacy": { + "packet_index": 7, + "measurable": true, + "preamble_symbol_errors": 114, + "header_symbol_errors": 7, + "payload_symbols_before_fec_errors": 371, + "symbols": 5724, + "symbol_errors": 492, + "symbol_error_rate": 0.0859538784067086, + "symbol_rms_deviation": 0.744908197961195, + "initial_frequency_hz": 5.940175010154092, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "diagnostic_t2": { + "packet_index": 7, + "measurable": true, + "preamble_symbol_errors": 113, + "header_symbol_errors": 7, + "payload_symbols_before_fec_errors": 344, + "symbols": 5724, + "symbol_errors": 464, + "symbol_error_rate": 0.08106219426974144, + "symbol_rms_deviation": 0.7438107396531283, + "initial_frequency_hz": 2.1125086049646824, + "t2_final_frequency_hz": 1.0944814837028547, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + } + }, + { + "packet_index": 8, + "nominal_rx_start": 4901883, + "legacy": { + "absolute_refined": 4901883, + "reason": "PHY_HEADER_VERSION_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "t2": { + "absolute_refined": 4901883, + "reason": "PHY_HEADER_VERSION_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 2.6855013821926375, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + "diagnostic_legacy": { + "packet_index": 8, + "measurable": true, + "preamble_symbol_errors": 91, + "header_symbol_errors": 18, + "payload_symbols_before_fec_errors": 555, + "symbols": 5724, + "symbol_errors": 664, + "symbol_error_rate": 0.11600279524807827, + "symbol_rms_deviation": 0.7809200982955484, + "initial_frequency_hz": 16.31826889989094, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "diagnostic_t2": { + "packet_index": 8, + "measurable": true, + "preamble_symbol_errors": 91, + "header_symbol_errors": 19, + "payload_symbols_before_fec_errors": 368, + "symbols": 5724, + "symbol_errors": 478, + "symbol_error_rate": 0.08350803633822501, + "symbol_rms_deviation": 0.7439678150627996, + "initial_frequency_hz": 0.9638879273500407, + "t2_final_frequency_hz": 0.35355297825700155, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + } + }, + { + "packet_index": 9, + "nominal_rx_start": 4994139, + "legacy": { + "absolute_refined": 4994139, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "t2": { + "absolute_refined": 4994139, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -1.6484857483023083, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + "diagnostic_legacy": { + "packet_index": 9, + "measurable": true, + "preamble_symbol_errors": 112, + "header_symbol_errors": 19, + "payload_symbols_before_fec_errors": 597, + "symbols": 5724, + "symbol_errors": 728, + "symbol_error_rate": 0.12718378756114604, + "symbol_rms_deviation": 0.8022029946227279, + "initial_frequency_hz": 15.501966262119087, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "diagnostic_t2": { + "packet_index": 9, + "measurable": true, + "preamble_symbol_errors": 105, + "header_symbol_errors": 21, + "payload_symbols_before_fec_errors": 367, + "symbols": 5724, + "symbol_errors": 493, + "symbol_error_rate": 0.08612858141160028, + "symbol_rms_deviation": 0.7596735274127128, + "initial_frequency_hz": -2.6793109690685877, + "t2_final_frequency_hz": 0.19088110622128074, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + } + }, + { + "packet_index": 10, + "nominal_rx_start": 5086395, + "legacy": { + "absolute_refined": 5086395, + "reason": "PHY_HEADER_VERSION_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "t2": { + "absolute_refined": 5086395, + "reason": "PHY_HEADER_CHECKSUM_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -1.3448756520541327, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + "diagnostic_legacy": { + "packet_index": 10, + "measurable": true, + "preamble_symbol_errors": 124, + "header_symbol_errors": 8, + "payload_symbols_before_fec_errors": 366, + "symbols": 5724, + "symbol_errors": 498, + "symbol_error_rate": 0.0870020964360587, + "symbol_rms_deviation": 0.7375734946099162, + "initial_frequency_hz": -6.242974129682536, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "diagnostic_t2": { + "packet_index": 10, + "measurable": true, + "preamble_symbol_errors": 116, + "header_symbol_errors": 7, + "payload_symbols_before_fec_errors": 345, + "symbols": 5724, + "symbol_errors": 468, + "symbol_error_rate": 0.08176100628930817, + "symbol_rms_deviation": 0.7348667301480266, + "initial_frequency_hz": -0.29035656707501434, + "t2_final_frequency_hz": 0.9472030503555074, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + } + }, + { + "packet_index": 11, + "nominal_rx_start": 5178651, + "legacy": { + "absolute_refined": 5178651, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "t2": { + "absolute_refined": 5178651, + "reason": "CRC_FAIL", + "header": true, + "fec_started": true, + "fec": true, + "crc_started": true, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": 0.7573187277726318, + "t2_final_frequency_hz": -0.14196556023732618, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + "diagnostic_legacy": { + "packet_index": 11, + "measurable": true, + "preamble_symbol_errors": 117, + "header_symbol_errors": 11, + "payload_symbols_before_fec_errors": 732, + "symbols": 5724, + "symbol_errors": 860, + "symbol_error_rate": 0.15024458420684836, + "symbol_rms_deviation": 0.8065946424074535, + "initial_frequency_hz": 18.225799382136096, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "diagnostic_t2": { + "packet_index": 11, + "measurable": true, + "preamble_symbol_errors": 109, + "header_symbol_errors": 9, + "payload_symbols_before_fec_errors": 392, + "symbols": 5724, + "symbol_errors": 510, + "symbol_error_rate": 0.08909853249475891, + "symbol_rms_deviation": 0.7349259375543071, + "initial_frequency_hz": 0.7573187277726318, + "t2_final_frequency_hz": -0.14196556023732618, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + } + }, + { + "packet_index": 12, + "nominal_rx_start": 5270907, + "legacy": { + "absolute_refined": 5270907, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "t2": { + "absolute_refined": 5270907, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -224.6077431845891, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + "diagnostic_legacy": { + "packet_index": 12, + "measurable": true, + "preamble_symbol_errors": 93, + "header_symbol_errors": 28, + "payload_symbols_before_fec_errors": 629, + "symbols": 5724, + "symbol_errors": 750, + "symbol_error_rate": 0.1310272536687631, + "symbol_rms_deviation": 0.9539892175479697, + "initial_frequency_hz": -0.22161151088528286, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "diagnostic_t2": { + "packet_index": 12, + "measurable": true, + "preamble_symbol_errors": 297, + "header_symbol_errors": 110, + "payload_symbols_before_fec_errors": 2181, + "symbols": 5724, + "symbol_errors": 2588, + "symbol_error_rate": 0.45213137665967856, + "symbol_rms_deviation": 2.208521112850464, + "initial_frequency_hz": -223.04966205995262, + "t2_final_frequency_hz": -222.38930722105994, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + } + }, + { + "packet_index": 13, + "nominal_rx_start": 5363163, + "legacy": { + "absolute_refined": 5363163, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "t2": { + "absolute_refined": 5363163, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -0.41869279390971675, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + "diagnostic_legacy": { + "packet_index": 13, + "measurable": true, + "preamble_symbol_errors": 306, + "header_symbol_errors": 35, + "payload_symbols_before_fec_errors": 721, + "symbols": 5724, + "symbol_errors": 1062, + "symbol_error_rate": 0.18553459119496854, + "symbol_rms_deviation": 1.1058928611516976, + "initial_frequency_hz": 13.716336087109676, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "diagnostic_t2": { + "packet_index": 13, + "measurable": true, + "preamble_symbol_errors": 304, + "header_symbol_errors": 36, + "payload_symbols_before_fec_errors": 524, + "symbols": 5724, + "symbol_errors": 864, + "symbol_error_rate": 0.1509433962264151, + "symbol_rms_deviation": 1.0825963113236774, + "initial_frequency_hz": -0.16099769754669116, + "t2_final_frequency_hz": -2.081420319755734, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + } + }, + { + "packet_index": 14, + "nominal_rx_start": 5455419, + "legacy": { + "absolute_refined": 5455419, + "reason": "CRC_FAIL", + "header": true, + "fec_started": true, + "fec": true, + "crc_started": true, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": -7.122211971387016, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "t2": { + "absolute_refined": 5455419, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 232.58226796428784, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + "diagnostic_legacy": { + "packet_index": 14, + "measurable": true, + "preamble_symbol_errors": 124, + "header_symbol_errors": 7, + "payload_symbols_before_fec_errors": 416, + "symbols": 5724, + "symbol_errors": 547, + "symbol_error_rate": 0.09556254367575122, + "symbol_rms_deviation": 0.7989880158701769, + "initial_frequency_hz": -7.122211971387016, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "diagnostic_t2": { + "packet_index": 14, + "measurable": true, + "preamble_symbol_errors": 314, + "header_symbol_errors": 127, + "payload_symbols_before_fec_errors": 2091, + "symbols": 5724, + "symbol_errors": 2532, + "symbol_error_rate": 0.44234800838574423, + "symbol_rms_deviation": 2.0426167211169846, + "initial_frequency_hz": 228.20916012396785, + "t2_final_frequency_hz": 224.92813768839025, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + } + }, + { + "packet_index": 15, + "nominal_rx_start": 5547675, + "legacy": { + "absolute_refined": 5547675, + "reason": "CRC_FAIL", + "header": true, + "fec_started": true, + "fec": true, + "crc_started": true, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": -7.329993567335002, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "t2": { + "absolute_refined": 5547675, + "reason": "CRC_FAIL", + "header": true, + "fec_started": true, + "fec": true, + "crc_started": true, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": -9.95965988857566, + "t2_final_frequency_hz": 2.2844456653638283, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + "diagnostic_legacy": { + "packet_index": 15, + "measurable": true, + "preamble_symbol_errors": 132, + "header_symbol_errors": 7, + "payload_symbols_before_fec_errors": 450, + "symbols": 5724, + "symbol_errors": 589, + "symbol_error_rate": 0.10290006988120196, + "symbol_rms_deviation": 0.7948677998154955, + "initial_frequency_hz": -7.329993567335002, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "diagnostic_t2": { + "packet_index": 15, + "measurable": true, + "preamble_symbol_errors": 131, + "header_symbol_errors": 7, + "payload_symbols_before_fec_errors": 395, + "symbols": 5724, + "symbol_errors": 533, + "symbol_error_rate": 0.09311670160726765, + "symbol_rms_deviation": 0.787770643017058, + "initial_frequency_hz": -9.95965988857566, + "t2_final_frequency_hz": 2.2844456653638283, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + } + }, + { + "packet_index": 16, + "nominal_rx_start": 5639931, + "legacy": { + "absolute_refined": 5639931, + "reason": "PHY_HEADER_VERSION_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "t2": { + "absolute_refined": 5639931, + "reason": "PHY_HEADER_VERSION_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 15.072680821115071, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + "diagnostic_legacy": { + "packet_index": 16, + "measurable": true, + "preamble_symbol_errors": 99, + "header_symbol_errors": 22, + "payload_symbols_before_fec_errors": 689, + "symbols": 5724, + "symbol_errors": 810, + "symbol_error_rate": 0.14150943396226415, + "symbol_rms_deviation": 0.7839877353861143, + "initial_frequency_hz": 18.831064562575676, + "t2_final_frequency_hz": null, + "t2_lock_status": "NOT_APPLICABLE" + }, + "diagnostic_t2": { + "packet_index": 16, + "measurable": true, + "preamble_symbol_errors": 100, + "header_symbol_errors": 23, + "payload_symbols_before_fec_errors": 355, + "symbols": 5724, + "symbol_errors": 478, + "symbol_error_rate": 0.08350803633822501, + "symbol_rms_deviation": 0.7141557861352505, + "initial_frequency_hz": 13.156526986310709, + "t2_final_frequency_hz": -0.8684121381823278, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + } + } + ], + "diagnostic_symbol_error_rate_t2": 0.18662648497554157, + "symbol_rms_deviation_t2": 1.6994614129663026, + "lab058_quality": { + "method": "Lab058 analyze_values/oracle validation tiles, independently per full PHY packet", + "packets": [ + { + "packet_index": 1, + "oracle": { + "timing_fraction": 0.03125, + "timing_samples": 0.5, + "cfo_hz": 1.0073017677042053, + "h": { + "real": 0.3202803225334201, + "imag": 0.7777749564618511 + }, + "train_coherence": 0.46770722521817676, + "metrics": { + "errors": 200, + "symbols": 2348, + "ber": 0.08517887563884156, + "plus_mean": 0.9644900026298955, + "plus_std": 0.7276829207499347, + "minus_mean": -0.9603969153184957, + "minus_std": 0.7119524219151289, + "cloud_separation_sigma": 2.6739716119558437, + "evm_rms": 1.088322316906538, + "matched_component_power": 0.7075133679013462, + "residual_power": 0.8380110003749788, + "matched_residual_db": -0.7351506962803888, + "margin_median": 0.9707978455973721, + "margin_p10": 0.06420624942130963, + "margin_p01": -0.8973594145451856 + }, + "eye": { + "opening": 1.9248869179483912, + "opening_at_minus_0p1": 1.905669674156194, + "opening_at_plus_0p1": 1.8809595482257067, + "drop_minus_0p1_percent": 0.9983570262236285, + "drop_plus_0p1_percent": 2.282075342353296 + }, + "isi": { + "main_tap_power": 0.7074597556623663, + "adjacent_taps_power": 0.0025659349014474815, + "isi_ratio_db": -24.40456105761968, + "offsets": [ + -5, + -4, + -3, + -2, + -1, + 0, + 1, + 2, + 3, + 4, + 5 + ], + "taps": [ + { + "real": 0.009783525783329356, + "imag": 0.0006637262770097718 + }, + { + "real": 0.009952734819883083, + "imag": 0.009055271150647332 + }, + { + "real": 0.02463935254616408, + "imag": 0.005576361820380306 + }, + { + "real": 0.027649667434270806, + "imag": -0.006384285779779704 + }, + { + "real": -0.0027213222172320422, + "imag": 0.0062415139184524735 + }, + { + "real": 0.3204020683881357, + "imag": 0.7776903434111617 + }, + { + "real": -0.0004519892752286388, + "imag": -0.007120323347813203 + }, + { + "real": -0.02191445189008926, + "imag": -0.004933355788548919 + }, + { + "real": -0.0068015070911804625, + "imag": -0.004306380221697579 + }, + { + "real": 0.007319084714310706, + "imag": 0.004749804020390772 + }, + { + "real": 0.009572225848444778, + "imag": 0.00329488393651327 + } + ] + } + }, + "channel": { + "stable": true, + "bins": 663, + "median_coherence": 0.4367219339161371, + "amplitude_ripple_p95_p05_db": 6.642520146946069, + "max_min_gain_db": 30.981064014734812, + "gain_slope_db_per_mhz": 0.01728772728983091, + "common_group_delay_seconds": 2.266814183121177e-06, + "residual_phase_ripple_p95_p05_rad": 5.396055347590577, + "group_delay_stable": false, + "group_delay_variation_p95_p05_seconds": null, + "band_edge_hz": 337500.0, + "tx_psd_threshold_db": -20.0 + } + }, + { + "packet_index": 2, + "oracle": { + "timing_fraction": 0.03125, + "timing_samples": 0.5, + "cfo_hz": 1.6416990453424165, + "h": { + "real": 0.29182307419296677, + "imag": 0.765319077713375 + }, + "train_coherence": 0.4479298696307294, + "metrics": { + "errors": 230, + "symbols": 2348, + "ber": 0.09795570698466781, + "plus_mean": 0.9543304099563756, + "plus_std": 0.7527785861219819, + "minus_mean": -0.9920957523253019, + "minus_std": 0.7372838021166671, + "cloud_separation_sigma": 2.6124019353608086, + "evm_rms": 1.104921348985033, + "matched_component_power": 0.6708739973434846, + "residual_power": 0.8190373162813612, + "matched_residual_db": -0.8666272994726886, + "margin_median": 0.9892139797096616, + "margin_p10": 0.012110825406658175, + "margin_p01": -0.931756631123351 + }, + "eye": { + "opening": 1.9464261622816776, + "opening_at_minus_0p1": 1.9171617514439943, + "opening_at_plus_0p1": 1.9097536410794371, + "drop_minus_0p1_percent": 1.5034945278056933, + "drop_plus_0p1_percent": 1.884095164403854 + }, + "isi": { + "main_tap_power": 0.673025102203439, + "adjacent_taps_power": 0.0040301048916113035, + "isi_ratio_db": -22.22714912978191, + "offsets": [ + -5, + -4, + -3, + -2, + -1, + 0, + 1, + 2, + 3, + 4, + 5 + ], + "taps": [ + { + "real": -0.01867234177296436, + "imag": 0.01162429181175258 + }, + { + "real": 0.005999539509383797, + "imag": -0.007606003994325372 + }, + { + "real": -0.001057727374910613, + "imag": 0.016836406692861156 + }, + { + "real": 0.008407946311495074, + "imag": -0.0016342479138093113 + }, + { + "real": 0.018509896023903613, + "imag": -0.0042417788131007515 + }, + { + "real": 0.2907600525529179, + "imag": 0.7671269086942939 + }, + { + "real": -0.018737075560750237, + "imag": -0.009458318485814604 + }, + { + "real": -0.007390381472796279, + "imag": -0.002826225835390255 + }, + { + "real": -0.026133861180692792, + "imag": 0.009125885996732922 + }, + { + "real": -0.02787756819984942, + "imag": 0.02226993529505472 + }, + { + "real": 0.004217254303425622, + "imag": 0.01317665867496345 + } + ] + } + }, + "channel": { + "stable": true, + "bins": 657, + "median_coherence": 0.40515222252387634, + "amplitude_ripple_p95_p05_db": 6.598551357893342, + "max_min_gain_db": 23.975483468718352, + "gain_slope_db_per_mhz": -0.336224004119411, + "common_group_delay_seconds": 1.1945713342700502e-07, + "residual_phase_ripple_p95_p05_rad": 0.9116196756938657, + "group_delay_stable": false, + "group_delay_variation_p95_p05_seconds": null, + "band_edge_hz": 337500.0, + "tx_psd_threshold_db": -20.0 + } + }, + { + "packet_index": 3, + "oracle": { + "timing_fraction": 0.03125, + "timing_samples": 0.5, + "cfo_hz": -0.9619877262845884, + "h": { + "real": 0.1881384283496889, + "imag": 0.7633685344164074 + }, + "train_coherence": 0.3458861426071648, + "metrics": { + "errors": 240, + "symbols": 2348, + "ber": 0.10221465076660988, + "plus_mean": 1.0009783665702496, + "plus_std": 0.9463503168154481, + "minus_mean": -1.0870240323713696, + "minus_std": 0.9213737396151614, + "cloud_separation_sigma": 2.2356789998363102, + "evm_rms": 1.3578439728375573, + "matched_component_power": 0.6181275875589448, + "residual_power": 1.1396667156434608, + "matched_residual_db": -2.6569973778482696, + "margin_median": 1.0445369326332268, + "margin_p10": -0.009050333184196157, + "margin_p01": -1.6150310020563385 + }, + "eye": { + "opening": 2.088002398941619, + "opening_at_minus_0p1": 2.0577576319887325, + "opening_at_plus_0p1": 2.048804677670746, + "drop_minus_0p1_percent": 1.4485025001991114, + "drop_plus_0p1_percent": 1.8772833446332293 + }, + "isi": { + "main_tap_power": 0.6241936794951588, + "adjacent_taps_power": 0.009173205125304285, + "isi_ratio_db": -18.327982617119236, + "offsets": [ + -5, + -4, + -3, + -2, + -1, + 0, + 1, + 2, + 3, + 4, + 5 + ], + "taps": [ + { + "real": -0.001123470715147547, + "imag": 0.0010601512284031125 + }, + { + "real": 0.013162033256522453, + "imag": 0.02578121351546002 + }, + { + "real": -0.011201037811780105, + "imag": -0.031066715191063403 + }, + { + "real": 0.0022519571925996807, + "imag": -0.019258822139518142 + }, + { + "real": -0.012232705584571365, + "imag": -0.0118200130430897 + }, + { + "real": 0.18950676343523631, + "imag": 0.7669946975745401 + }, + { + "real": -0.010058951214751494, + "imag": -0.030178230473300552 + }, + { + "real": -0.02825529835889236, + "imag": -0.03639594751304821 + }, + { + "real": -0.023975662492143373, + "imag": -0.016543873266617132 + }, + { + "real": -0.01051422895088465, + "imag": 0.02887611824165038 + }, + { + "real": 0.0226201679615091, + "imag": -0.03372626912167219 + } + ] + } + }, + "channel": { + "stable": true, + "bins": 655, + "median_coherence": 0.362423446637072, + "amplitude_ripple_p95_p05_db": 7.370968795797246, + "max_min_gain_db": 22.32376243389089, + "gain_slope_db_per_mhz": 0.34499809446480184, + "common_group_delay_seconds": 5.375577961054383e-08, + "residual_phase_ripple_p95_p05_rad": 0.9174219316762064, + "group_delay_stable": false, + "group_delay_variation_p95_p05_seconds": null, + "band_edge_hz": 337500.0, + "tx_psd_threshold_db": -20.0 + } + }, + { + "packet_index": 4, + "oracle": { + "timing_fraction": -0.03125, + "timing_samples": -0.5, + "cfo_hz": 2.5845496302438504, + "h": { + "real": 0.3450291237994243, + "imag": 0.7584243511238925 + }, + "train_coherence": 0.26913737281502903, + "metrics": { + "errors": 366, + "symbols": 2348, + "ber": 0.15587734241908008, + "plus_mean": 1.020537224964785, + "plus_std": 1.1432416988944039, + "minus_mean": -1.0395032017923256, + "minus_std": 1.155008347215812, + "cloud_separation_sigma": 1.7926799838087037, + "evm_rms": 1.6634180909816034, + "matched_component_power": 0.694252592647496, + "residual_power": 1.920968976998595, + "matched_residual_db": -4.420028409350613, + "margin_median": 1.0274326120669661, + "margin_p10": -0.3522815671238974, + "margin_p01": -2.0317380104715794 + }, + "eye": { + "opening": 2.0600404267571104, + "opening_at_minus_0p1": 1.9973761644159245, + "opening_at_plus_0p1": 2.050145080966784, + "drop_minus_0p1_percent": 3.0418947864936485, + "drop_plus_0p1_percent": 0.48034716512352915 + }, + "isi": { + "main_tap_power": 0.6889129627779808, + "adjacent_taps_power": 0.011822820457034613, + "isi_ratio_db": -17.654432622547777, + "offsets": [ + -5, + -4, + -3, + -2, + -1, + 0, + 1, + 2, + 3, + 4, + 5 + ], + "taps": [ + { + "real": -0.0220952174224389, + "imag": -0.007514624509172111 + }, + { + "real": -0.03700588065029144, + "imag": 0.019199195018381854 + }, + { + "real": 0.0482982591691537, + "imag": 0.0009850816771378099 + }, + { + "real": 0.009672341412044903, + "imag": 0.013382574019853238 + }, + { + "real": 0.022631558291673765, + "imag": -0.004975404650178471 + }, + { + "real": 0.3388083486586986, + "imag": 0.7577082985273069 + }, + { + "real": 0.011872134705513234, + "imag": 0.009639717438430643 + }, + { + "real": 0.0037493260993578864, + "imag": -0.03823357050733387 + }, + { + "real": 0.0037825418412585684, + "imag": 0.021456133938980933 + }, + { + "real": 0.04509178968498876, + "imag": 0.014600067488267341 + }, + { + "real": -0.038936660515258514, + "imag": -0.02121138296017752 + } + ] + } + }, + "channel": { + "stable": true, + "bins": 653, + "median_coherence": 0.25321283283578405, + "amplitude_ripple_p95_p05_db": 10.617549420778396, + "max_min_gain_db": 35.13369498803187, + "gain_slope_db_per_mhz": -1.199843531142766, + "common_group_delay_seconds": -5.350097929206949e-07, + "residual_phase_ripple_p95_p05_rad": 5.388297118381418, + "group_delay_stable": false, + "group_delay_variation_p95_p05_seconds": null, + "band_edge_hz": 337500.0, + "tx_psd_threshold_db": -20.0 + } + }, + { + "packet_index": 5, + "oracle": { + "timing_fraction": 0.03125, + "timing_samples": 0.5, + "cfo_hz": -1.2358463102217572, + "h": { + "real": 0.21729005420721517, + "imag": 0.8093001751598886 + }, + "train_coherence": 0.4667534474085755, + "metrics": { + "errors": 211, + "symbols": 2348, + "ber": 0.08986371379897785, + "plus_mean": 0.9877588864643475, + "plus_std": 0.7422211004938342, + "minus_mean": -0.9617807077166861, + "minus_std": 0.748406360088758, + "cloud_separation_sigma": 2.6157076299206095, + "evm_rms": 1.0991964913376657, + "matched_component_power": 0.7021817411712009, + "residual_power": 0.8483991001186207, + "matched_residual_db": -0.8215066687796163, + "margin_median": 0.9963260720878027, + "margin_p10": 0.048826304347062026, + "margin_p01": -0.9251909353282507 + }, + "eye": { + "opening": 1.9495395941810336, + "opening_at_minus_0p1": 1.9247616211641962, + "opening_at_plus_0p1": 1.908556505346481, + "drop_minus_0p1_percent": 1.270965364888943, + "drop_plus_0p1_percent": 2.1021932027889267 + }, + "isi": { + "main_tap_power": 0.7029262635623811, + "adjacent_taps_power": 0.005251649704231718, + "isi_ratio_db": -21.26614020189833, + "offsets": [ + -5, + -4, + -3, + -2, + -1, + 0, + 1, + 2, + 3, + 4, + 5 + ], + "taps": [ + { + "real": 0.0014433176008324998, + "imag": 0.013053289122473421 + }, + { + "real": 0.01632243194296673, + "imag": -0.010106362989963702 + }, + { + "real": 0.023216684775893115, + "imag": -0.010355227794572465 + }, + { + "real": -0.022225715216366185, + "imag": 0.006783803137769089 + }, + { + "real": -0.016062447487304267, + "imag": 0.008921075540168716 + }, + { + "real": 0.21986256663923348, + "imag": 0.8090653344157008 + }, + { + "real": -0.012409189973773696, + "imag": 0.006758198805663508 + }, + { + "real": -0.03827699380244564, + "imag": 0.0021639780503624126 + }, + { + "real": 0.024712200747395375, + "imag": -0.016438858338954393 + }, + { + "real": -0.006956062591847993, + "imag": 0.022106733454131763 + }, + { + "real": 0.00936613838285157, + "imag": -0.0034003189335045647 + } + ] + } + }, + "channel": { + "stable": true, + "bins": 659, + "median_coherence": 0.4185751397382691, + "amplitude_ripple_p95_p05_db": 6.409725568268307, + "max_min_gain_db": 18.88426227507847, + "gain_slope_db_per_mhz": -0.3125224240446033, + "common_group_delay_seconds": 5.584228804470258e-08, + "residual_phase_ripple_p95_p05_rad": 0.8342172701371073, + "group_delay_stable": false, + "group_delay_variation_p95_p05_seconds": null, + "band_edge_hz": 337500.0, + "tx_psd_threshold_db": -20.0 + } + }, + { + "packet_index": 6, + "oracle": { + "timing_fraction": 0.0, + "timing_samples": 0.0, + "cfo_hz": -1.7795429995488667, + "h": { + "real": 0.18211368746706358, + "imag": 0.781857285913966 + }, + "train_coherence": 0.45152312711389614, + "metrics": { + "errors": 178, + "symbols": 2348, + "ber": 0.075809199318569, + "plus_mean": 1.0057401155664363, + "plus_std": 0.7304265482745885, + "minus_mean": -1.0306621724369218, + "minus_std": 0.7349236621736198, + "cloud_separation_sigma": 2.7793938726098117, + "evm_rms": 1.1024024281507157, + "matched_component_power": 0.6444662106996041, + "residual_power": 0.783214058873921, + "matched_residual_db": -0.8468032228257232, + "margin_median": 1.0313340260524178, + "margin_p10": 0.11737039861548473, + "margin_p01": -0.7878865931975946 + }, + "eye": { + "opening": 2.036402288003358, + "opening_at_minus_0p1": 1.994751728220945, + "opening_at_plus_0p1": 2.009691410795977, + "drop_minus_0p1_percent": 2.0453011680344413, + "drop_plus_0p1_percent": 1.31166996642742 + }, + "isi": { + "main_tap_power": 0.6450600848895502, + "adjacent_taps_power": 0.005175220663931185, + "isi_ratio_db": -20.956712971830186, + "offsets": [ + -5, + -4, + -3, + -2, + -1, + 0, + 1, + 2, + 3, + 4, + 5 + ], + "taps": [ + { + "real": 0.020878946587102366, + "imag": -0.007416198567539761 + }, + { + "real": -0.00899570915133516, + "imag": -0.006084356609683872 + }, + { + "real": 0.01831471414170197, + "imag": -0.004466646720136129 + }, + { + "real": -0.01680076926800806, + "imag": -0.01876957674755144 + }, + { + "real": -0.005949063400150945, + "imag": -0.008784616296045282 + }, + { + "real": 0.18276273806028237, + "imag": 0.7820855876860657 + }, + { + "real": 0.0028702825851260067, + "imag": 0.005354958920592887 + }, + { + "real": -0.03543259310904177, + "imag": -0.012740036081530407 + }, + { + "real": -0.008802130106133007, + "imag": 0.013529533741558814 + }, + { + "real": -0.024872498337615758, + "imag": 0.030103937864231513 + }, + { + "real": -0.003233567335408917, + "imag": 0.01460422622875628 + } + ] + } + }, + "channel": { + "stable": true, + "bins": 657, + "median_coherence": 0.4325540788176554, + "amplitude_ripple_p95_p05_db": 6.3642932090088, + "max_min_gain_db": 26.827188760694717, + "gain_slope_db_per_mhz": -0.48321575139583367, + "common_group_delay_seconds": 2.2385363478181526e-06, + "residual_phase_ripple_p95_p05_rad": 5.318131944986163, + "group_delay_stable": false, + "group_delay_variation_p95_p05_seconds": null, + "band_edge_hz": 337500.0, + "tx_psd_threshold_db": -20.0 + } + }, + { + "packet_index": 7, + "oracle": { + "timing_fraction": 0.03125, + "timing_samples": 0.5, + "cfo_hz": -0.2484094971075878, + "h": { + "real": 0.2233455468592583, + "imag": 0.7950170443663221 + }, + "train_coherence": 0.450598221783017, + "metrics": { + "errors": 197, + "symbols": 2348, + "ber": 0.08390119250425894, + "plus_mean": 0.9770313003186011, + "plus_std": 0.7216223698863, + "minus_mean": -0.9606670370539202, + "minus_std": 0.7193979426614938, + "cloud_separation_sigma": 2.689338952247183, + "evm_rms": 1.1001519668540132, + "matched_component_power": 0.6819353341348239, + "residual_power": 0.8253697594999119, + "matched_residual_db": -0.8290535905764504, + "margin_median": 0.9706572644152129, + "margin_p10": 0.07280443723488614, + "margin_p01": -0.8538048242425139 + }, + "eye": { + "opening": 1.9376983373725212, + "opening_at_minus_0p1": 1.9038011144689642, + "opening_at_plus_0p1": 1.9037776775494524, + "drop_minus_0p1_percent": 1.7493550079379694, + "drop_plus_0p1_percent": 1.750564531580523 + }, + "isi": { + "main_tap_power": 0.6776764708579422, + "adjacent_taps_power": 0.004334658621035084, + "isi_ratio_db": -21.940675070555994, + "offsets": [ + -5, + -4, + -3, + -2, + -1, + 0, + 1, + 2, + 3, + 4, + 5 + ], + "taps": [ + { + "real": -0.017453601073079708, + "imag": -0.03149494561951572 + }, + { + "real": 0.0023028731746597628, + "imag": 0.003642681534458292 + }, + { + "real": 0.008064186486238899, + "imag": -0.0031941732206572995 + }, + { + "real": 0.024563511394661258, + "imag": 0.0022474523344436694 + }, + { + "real": 0.014605703303735337, + "imag": 0.01287662227290707 + }, + { + "real": 0.22097606644723528, + "imag": 0.7929981392887686 + }, + { + "real": 0.019273331174781354, + "imag": 0.0019801576370632595 + }, + { + "real": -0.0048399613294717635, + "imag": 0.01804983938039935 + }, + { + "real": 0.00382344469672761, + "imag": -0.0026862792453379966 + }, + { + "real": 0.013977984088951404, + "imag": 0.020417808253218137 + }, + { + "real": 0.02188685379436115, + "imag": -0.010908581631489136 + } + ] + } + }, + "channel": { + "stable": true, + "bins": 663, + "median_coherence": 0.4194783379648352, + "amplitude_ripple_p95_p05_db": 6.236828217134885, + "max_min_gain_db": 31.14873225033506, + "gain_slope_db_per_mhz": 0.25846371463033774, + "common_group_delay_seconds": 2.086826460617375e-07, + "residual_phase_ripple_p95_p05_rad": 1.4617535496008514, + "group_delay_stable": false, + "group_delay_variation_p95_p05_seconds": null, + "band_edge_hz": 337500.0, + "tx_psd_threshold_db": -20.0 + } + }, + { + "packet_index": 8, + "oracle": { + "timing_fraction": 0.0, + "timing_samples": 0.0, + "cfo_hz": -1.0783628659018663, + "h": { + "real": 0.20174330809703095, + "imag": 0.7729472978152412 + }, + "train_coherence": 0.4290774649164781, + "metrics": { + "errors": 194, + "symbols": 2348, + "ber": 0.08262350936967632, + "plus_mean": 1.0327094572504967, + "plus_std": 0.7809418653475769, + "minus_mean": -1.0455262285512024, + "minus_std": 0.7674643380039281, + "cloud_separation_sigma": 2.6842529567167244, + "evm_rms": 1.1492572709962479, + "matched_component_power": 0.6381478875618168, + "residual_power": 0.8428608001594871, + "matched_residual_db": -1.2083452015652267, + "margin_median": 1.0760653287372985, + "margin_p10": 0.07877138891212018, + "margin_p01": -1.0662129716220272 + }, + "eye": { + "opening": 2.0782356858016993, + "opening_at_minus_0p1": 2.0331061960525303, + "opening_at_plus_0p1": 2.0514527725742324, + "drop_minus_0p1_percent": 2.1715289587937114, + "drop_plus_0p1_percent": 1.2887331985705464 + }, + "isi": { + "main_tap_power": 0.6387302719726006, + "adjacent_taps_power": 0.004457607916126939, + "isi_ratio_db": -21.56215633597106, + "offsets": [ + -5, + -4, + -3, + -2, + -1, + 0, + 1, + 2, + 3, + 4, + 5 + ], + "taps": [ + { + "real": -0.011224587950953388, + "imag": -0.021577716881933225 + }, + { + "real": -0.01965394521401945, + "imag": -0.002190159526434282 + }, + { + "real": -0.0027281868884010936, + "imag": 0.004137292373661394 + }, + { + "real": 0.003911773964638131, + "imag": 0.012757929008767072 + }, + { + "real": 0.012522458768866991, + "imag": -0.013528969017110868 + }, + { + "real": 0.20386380048575467, + "imag": 0.772767638313164 + }, + { + "real": -0.018235759815970535, + "imag": 0.0030334187056735296 + }, + { + "real": -0.025163152264554716, + "imag": -0.012376898331393224 + }, + { + "real": -0.02224872464026239, + "imag": 0.03099517556790537 + }, + { + "real": 0.009211896688893939, + "imag": 0.006760558855795032 + }, + { + "real": 0.00581674039162734, + "imag": 0.013573897256981118 + } + ] + } + }, + "channel": { + "stable": true, + "bins": 653, + "median_coherence": 0.4279134940255156, + "amplitude_ripple_p95_p05_db": 6.714920606410644, + "max_min_gain_db": 22.325073661226533, + "gain_slope_db_per_mhz": -1.1873424993828718, + "common_group_delay_seconds": 2.1460801684920653e-09, + "residual_phase_ripple_p95_p05_rad": 0.78177232042639, + "group_delay_stable": false, + "group_delay_variation_p95_p05_seconds": null, + "band_edge_hz": 337500.0, + "tx_psd_threshold_db": -20.0 + } + }, + { + "packet_index": 9, + "oracle": { + "timing_fraction": 0.03125, + "timing_samples": 0.5, + "cfo_hz": 0.8322819250764986, + "h": { + "real": 0.23062308310593949, + "imag": 0.7777758291611655 + }, + "train_coherence": 0.43371672825078983, + "metrics": { + "errors": 210, + "symbols": 2348, + "ber": 0.08943781942078365, + "plus_mean": 0.9975459562713902, + "plus_std": 0.7509040711187915, + "minus_mean": -0.9856655769247764, + "minus_std": 0.7397030393762718, + "cloud_separation_sigma": 2.6608695601286234, + "evm_rms": 1.141830995657666, + "matched_component_power": 0.6581222468886276, + "residual_power": 0.858045321706861, + "matched_residual_db": -1.1520365600725753, + "margin_median": 1.005796990570286, + "margin_p10": 0.06385689932684299, + "margin_p01": -0.8915104848701387 + }, + "eye": { + "opening": 1.9832115331961666, + "opening_at_minus_0p1": 1.957567775413271, + "opening_at_plus_0p1": 1.9425137555307397, + "drop_minus_0p1_percent": 1.2930419853684372, + "drop_plus_0p1_percent": 2.0521148139874934 + }, + "isi": { + "main_tap_power": 0.6602934424085998, + "adjacent_taps_power": 0.0030300027804536743, + "isi_ratio_db": -23.382939571443018, + "offsets": [ + -5, + -4, + -3, + -2, + -1, + 0, + 1, + 2, + 3, + 4, + 5 + ], + "taps": [ + { + "real": -0.015173133332895822, + "imag": 0.000768350379110273 + }, + { + "real": -0.011510276996746116, + "imag": 0.004959185070356531 + }, + { + "real": 0.011869721772178918, + "imag": -0.013182304794739013 + }, + { + "real": -0.001771635306873823, + "imag": -0.013099488622398781 + }, + { + "real": 0.001004736085950867, + "imag": 0.0006527093818615576 + }, + { + "real": 0.23086371013945434, + "imag": 0.7790990885306219 + }, + { + "real": -0.002579674435145348, + "imag": -0.03120460322925179 + }, + { + "real": -0.009904116286567786, + "imag": -0.0016360089896369258 + }, + { + "real": -0.00282074682131888, + "imag": 0.01525243773073226 + }, + { + "real": -0.024843106207080655, + "imag": 0.005734007257271828 + }, + { + "real": -0.010531132176388774, + "imag": 0.00828052957548605 + } + ] + } + }, + "channel": { + "stable": true, + "bins": 653, + "median_coherence": 0.400307683127931, + "amplitude_ripple_p95_p05_db": 6.809131520732102, + "max_min_gain_db": 22.7907458393846, + "gain_slope_db_per_mhz": -1.3355775325199186, + "common_group_delay_seconds": -1.2065512341010174e-07, + "residual_phase_ripple_p95_p05_rad": 1.0738651986809553, + "group_delay_stable": false, + "group_delay_variation_p95_p05_seconds": null, + "band_edge_hz": 337500.0, + "tx_psd_threshold_db": -20.0 + } + }, + { + "packet_index": 10, + "oracle": { + "timing_fraction": 0.03125, + "timing_samples": 0.5, + "cfo_hz": -1.3378733037888852, + "h": { + "real": 0.19366859305603928, + "imag": 0.8121756495127601 + }, + "train_coherence": 0.46067960039056616, + "metrics": { + "errors": 196, + "symbols": 2348, + "ber": 0.08347529812606473, + "plus_mean": 0.9747465934009131, + "plus_std": 0.7145641001414497, + "minus_mean": -0.9993041604028887, + "minus_std": 0.7330082551272256, + "cloud_separation_sigma": 2.7271735719639922, + "evm_rms": 1.0923957700987015, + "matched_component_power": 0.6971368095977797, + "residual_power": 0.8319132362097249, + "matched_residual_db": -0.7676001965024029, + "margin_median": 1.0047701776928828, + "margin_p10": 0.08003284524437208, + "margin_p01": -0.8647018513487867 + }, + "eye": { + "opening": 1.9740507538038017, + "opening_at_minus_0p1": 1.9481930104155911, + "opening_at_plus_0p1": 1.9346803938231596, + "drop_minus_0p1_percent": 1.3098823998514364, + "drop_plus_0p1_percent": 1.994394516188569 + }, + "isi": { + "main_tap_power": 0.6958569038569097, + "adjacent_taps_power": 0.005335821959222082, + "isi_ratio_db": -21.153186103808153, + "offsets": [ + -5, + -4, + -3, + -2, + -1, + 0, + 1, + 2, + 3, + 4, + 5 + ], + "taps": [ + { + "real": -0.0009072176437406104, + "imag": -0.003470571467845274 + }, + { + "real": 0.015700078695156355, + "imag": 0.015050140476024335 + }, + { + "real": -0.027774340444551803, + "imag": 0.0015379317314017406 + }, + { + "real": 0.015907924111499033, + "imag": 0.00924091433342728 + }, + { + "real": 0.023421843944419835, + "imag": 0.018182379663820514 + }, + { + "real": 0.19249170771031593, + "imag": 0.8116673249057622 + }, + { + "real": 0.012578080982529324, + "imag": -0.031797815052459016 + }, + { + "real": 0.009786162313405782, + "imag": 0.0014109848960680207 + }, + { + "real": -0.012713921995021981, + "imag": -0.0029883380277488346 + }, + { + "real": -0.024269892671959527, + "imag": 0.011934950727231384 + }, + { + "real": -0.007880694526478028, + "imag": 0.02504632309769628 + } + ] + } + }, + "channel": { + "stable": true, + "bins": 657, + "median_coherence": 0.4348774810176809, + "amplitude_ripple_p95_p05_db": 6.678161163217084, + "max_min_gain_db": 32.15188151237967, + "gain_slope_db_per_mhz": -0.07434944620482022, + "common_group_delay_seconds": 2.1442876657222928e-08, + "residual_phase_ripple_p95_p05_rad": 0.7703154441715622, + "group_delay_stable": false, + "group_delay_variation_p95_p05_seconds": null, + "band_edge_hz": 337500.0, + "tx_psd_threshold_db": -20.0 + } + }, + { + "packet_index": 11, + "oracle": { + "timing_fraction": 0.03125, + "timing_samples": 0.5, + "cfo_hz": 1.1396956047405093, + "h": { + "real": 0.23729805333208415, + "imag": 0.7949469133388994 + }, + "train_coherence": 0.448658024310124, + "metrics": { + "errors": 189, + "symbols": 2348, + "ber": 0.08049403747870527, + "plus_mean": 0.9870921081379088, + "plus_std": 0.7334496724687996, + "minus_mean": -0.966599023035591, + "minus_std": 0.699149419740496, + "cloud_separation_sigma": 2.726696399747329, + "evm_rms": 1.0853439130113745, + "matched_component_power": 0.6882509611422404, + "residual_power": 0.8107399547939167, + "matched_residual_db": -0.7113474983787614, + "margin_median": 0.9978423434695525, + "margin_p10": 0.08234023662044582, + "margin_p01": -0.8351176566489547 + }, + "eye": { + "opening": 1.9536911311734997, + "opening_at_minus_0p1": 1.9171009508235382, + "opening_at_plus_0p1": 1.9275817780911164, + "drop_minus_0p1_percent": 1.8728743641264978, + "drop_plus_0p1_percent": 1.3364115067001636 + }, + "isi": { + "main_tap_power": 0.6859841682117211, + "adjacent_taps_power": 0.003233785314002767, + "isi_ratio_db": -23.26602908376048, + "offsets": [ + -5, + -4, + -3, + -2, + -1, + 0, + 1, + 2, + 3, + 4, + 5 + ], + "taps": [ + { + "real": -0.023600395878849066, + "imag": -0.009877021669588594 + }, + { + "real": 0.015580676239037703, + "imag": -0.001389620408494982 + }, + { + "real": 0.002891657629132272, + "imag": -0.0035462048117136102 + }, + { + "real": -0.0009237723806508249, + "imag": -0.02258969841194696 + }, + { + "real": 0.011481263877692086, + "imag": 0.017726477943082 + }, + { + "real": 0.2374836657824144, + "imag": 0.7934643512460202 + }, + { + "real": -0.006475906515197142, + "imag": -0.0014356250444720775 + }, + { + "real": 0.002769454507531851, + "imag": 0.011141239953161911 + }, + { + "real": -0.0006281138095416478, + "imag": 0.0052996748402256676 + }, + { + "real": -0.013943885926990423, + "imag": 0.006072681330785763 + }, + { + "real": 0.022543474212775274, + "imag": -0.020313439345165604 + } + ] + } + }, + "channel": { + "stable": true, + "bins": 661, + "median_coherence": 0.4123948004668701, + "amplitude_ripple_p95_p05_db": 6.630624104636567, + "max_min_gain_db": 27.190510572648392, + "gain_slope_db_per_mhz": -0.9076980342717487, + "common_group_delay_seconds": 1.8788105875348458e-08, + "residual_phase_ripple_p95_p05_rad": 0.8869440636679229, + "group_delay_stable": false, + "group_delay_variation_p95_p05_seconds": null, + "band_edge_hz": 337500.0, + "tx_psd_threshold_db": -20.0 + } + }, + { + "packet_index": 12, + "oracle": { + "timing_fraction": 0.03125, + "timing_samples": 0.5, + "cfo_hz": -0.15870982770940278, + "h": { + "real": 0.22514726378905145, + "imag": 0.7619969639226652 + }, + "train_coherence": 0.31703378295480417, + "metrics": { + "errors": 301, + "symbols": 2348, + "ber": 0.12819420783645655, + "plus_mean": 1.0147205818558949, + "plus_std": 0.9897544210626, + "minus_mean": -1.0183201129160921, + "minus_std": 0.970540172627925, + "cloud_separation_sigma": 2.0741199282701652, + "evm_rms": 1.4566037803957919, + "matched_component_power": 0.6313306634190563, + "residual_power": 1.3394908423846723, + "matched_residual_db": -3.2668286553130113, + "margin_median": 1.0463725969390334, + "margin_p10": -0.14542618224940645, + "margin_p01": -1.7117150265173804 + }, + "eye": { + "opening": 2.0330406947719872, + "opening_at_minus_0p1": 2.0113791085034456, + "opening_at_plus_0p1": 1.98297161686978, + "drop_minus_0p1_percent": 1.0654772589769101, + "drop_plus_0p1_percent": 2.4627681103954857 + }, + "isi": { + "main_tap_power": 0.6328808387134531, + "adjacent_taps_power": 0.010060443432599025, + "isi_ratio_db": -17.987048235739746, + "offsets": [ + -5, + -4, + -3, + -2, + -1, + 0, + 1, + 2, + 3, + 4, + 5 + ], + "taps": [ + { + "real": 0.0046871903327069964, + "imag": -0.0057338570443389554 + }, + { + "real": -0.0036029283087661334, + "imag": -0.006536374536266683 + }, + { + "real": 0.034943193250761756, + "imag": -0.03758128282514783 + }, + { + "real": -0.008522141462420437, + "imag": -0.005909981611716877 + }, + { + "real": -0.04847596538326207, + "imag": -0.002080441796427632 + }, + { + "real": 0.2263850423876078, + "imag": 0.7626471341955035 + }, + { + "real": -0.01271569564860272, + "imag": -0.026133528283309736 + }, + { + "real": -0.003628399733411184, + "imag": -0.010313725380906271 + }, + { + "real": -0.02405123793920065, + "imag": 0.0041479369963902165 + }, + { + "real": 0.02359889747029555, + "imag": 0.044675866260054764 + }, + { + "real": 0.026910264805647715, + "imag": 0.004224957932373164 + } + ] + } + }, + "channel": { + "stable": true, + "bins": 655, + "median_coherence": 0.31771154964804926, + "amplitude_ripple_p95_p05_db": 7.945031576922354, + "max_min_gain_db": 25.84132488251568, + "gain_slope_db_per_mhz": -0.5190008147573991, + "common_group_delay_seconds": 1.3602025604419243e-07, + "residual_phase_ripple_p95_p05_rad": 1.0850946010670803, + "group_delay_stable": false, + "group_delay_variation_p95_p05_seconds": null, + "band_edge_hz": 337500.0, + "tx_psd_threshold_db": -20.0 + } + }, + { + "packet_index": 13, + "oracle": { + "timing_fraction": 0.0, + "timing_samples": 0.0, + "cfo_hz": -3.768747766207012, + "h": { + "real": 0.122703446442905, + "imag": 0.8097008064777175 + }, + "train_coherence": 0.2866229754423274, + "metrics": { + "errors": 376, + "symbols": 2348, + "ber": 0.16013628620102216, + "plus_mean": 0.9278584618895435, + "plus_std": 1.0434366873153873, + "minus_mean": -0.9676256939524284, + "minus_std": 1.0918906998637334, + "cloud_separation_sigma": 1.774900050072093, + "evm_rms": 1.542471770787923, + "matched_component_power": 0.6706715317796331, + "residual_power": 1.5956745609431342, + "matched_residual_db": -3.764344492637608, + "margin_median": 0.97056665687518, + "margin_p10": -0.34953634784881693, + "margin_p01": -1.8091893989547878 + }, + "eye": { + "opening": 1.895484155841972, + "opening_at_minus_0p1": 1.8563861322874025, + "opening_at_plus_0p1": 1.871215990067647, + "drop_minus_0p1_percent": 2.062693240355906, + "drop_plus_0p1_percent": 1.2803148841697864 + }, + "isi": { + "main_tap_power": 0.6748419451651918, + "adjacent_taps_power": 0.011873304495929838, + "isi_ratio_db": -17.54630462951956, + "offsets": [ + -5, + -4, + -3, + -2, + -1, + 0, + 1, + 2, + 3, + 4, + 5 + ], + "taps": [ + { + "real": 0.03464354465958188, + "imag": -0.008628163852914785 + }, + { + "real": 0.04940221668547087, + "imag": 0.01750585478626651 + }, + { + "real": -0.025573156044751754, + "imag": 0.01353642991892931 + }, + { + "real": 0.019692165417778355, + "imag": -0.036931136351812215 + }, + { + "real": -0.010747274213883981, + "imag": -0.0172139264227234 + }, + { + "real": 0.12213161722271018, + "imag": 0.812358180385818 + }, + { + "real": -0.0341218014348253, + "imag": -0.009095433131736243 + }, + { + "real": -0.022838869102956027, + "imag": -0.019929357113000343 + }, + { + "real": -0.018835378661617434, + "imag": 0.02680527291147402 + }, + { + "real": 0.003394865582211217, + "imag": 0.005470833187334233 + }, + { + "real": 0.013977150210665073, + "imag": 0.03708083137520127 + } + ] + } + }, + "channel": { + "stable": true, + "bins": 657, + "median_coherence": 0.2494277119716051, + "amplitude_ripple_p95_p05_db": 9.871896166053979, + "max_min_gain_db": 36.71832592155228, + "gain_slope_db_per_mhz": 0.4949260175781666, + "common_group_delay_seconds": 1.7207146441439488e-07, + "residual_phase_ripple_p95_p05_rad": 1.4778689507229945, + "group_delay_stable": false, + "group_delay_variation_p95_p05_seconds": null, + "band_edge_hz": 337500.0, + "tx_psd_threshold_db": -20.0 + } + }, + { + "packet_index": 14, + "oracle": { + "timing_fraction": 0.0, + "timing_samples": 0.0, + "cfo_hz": 0.07157023489205856, + "h": { + "real": 0.26107464398254326, + "imag": 0.7507952553801853 + }, + "train_coherence": 0.4423792411818328, + "metrics": { + "errors": 222, + "symbols": 2348, + "ber": 0.09454855195911414, + "plus_mean": 0.998090940181387, + "plus_std": 0.7630302852320379, + "minus_mean": -0.970500502108444, + "minus_std": 0.7576754608970943, + "cloud_separation_sigma": 2.5890337335206097, + "evm_rms": 1.1250423245117716, + "matched_component_power": 0.6318534852320092, + "residual_power": 0.7997497398817571, + "matched_residual_db": -1.0233772215014318, + "margin_median": 1.023364260650847, + "margin_p10": 0.033359100992874646, + "margin_p01": -0.9536254105034729 + }, + "eye": { + "opening": 1.968591442289831, + "opening_at_minus_0p1": 1.9263087856577328, + "opening_at_plus_0p1": 1.9434112419847882, + "drop_minus_0p1_percent": 2.1478634786157413, + "drop_plus_0p1_percent": 1.279097316188349 + }, + "isi": { + "main_tap_power": 0.6335395357048635, + "adjacent_taps_power": 0.0038178142791484597, + "isi_ratio_db": -22.19958924042389, + "offsets": [ + -5, + -4, + -3, + -2, + -1, + 0, + 1, + 2, + 3, + 4, + 5 + ], + "taps": [ + { + "real": -0.006083331778472174, + "imag": -0.0021176320570635287 + }, + { + "real": -0.004854530637578992, + "imag": 0.013776813071712218 + }, + { + "real": -0.017968488153619115, + "imag": -0.016290306425430043 + }, + { + "real": 0.0038161806819654795, + "imag": 0.0018182520382140147 + }, + { + "real": 0.009378319191626485, + "imag": -0.02666493488660609 + }, + { + "real": 0.26144929504008896, + "imag": 0.7517870721340612 + }, + { + "real": -0.0018345173380380532, + "imag": -0.0189211485286293 + }, + { + "real": -0.009367537157282176, + "imag": -0.025678320066594627 + }, + { + "real": 0.01497450496225704, + "imag": 0.0099883583834505 + }, + { + "real": -0.01697000852745481, + "imag": 0.002084619243453375 + }, + { + "real": -0.0031033962848026845, + "imag": 0.0205769581438374 + } + ] + } + }, + "channel": { + "stable": true, + "bins": 659, + "median_coherence": 0.42413493067224706, + "amplitude_ripple_p95_p05_db": 6.450865575756282, + "max_min_gain_db": 26.409030062433878, + "gain_slope_db_per_mhz": -0.10105891875815558, + "common_group_delay_seconds": 4.5312714085751893e-08, + "residual_phase_ripple_p95_p05_rad": 0.8500145465030344, + "group_delay_stable": false, + "group_delay_variation_p95_p05_seconds": null, + "band_edge_hz": 337500.0, + "tx_psd_threshold_db": -20.0 + } + }, + { + "packet_index": 15, + "oracle": { + "timing_fraction": 0.0, + "timing_samples": 0.0, + "cfo_hz": 0.6368695507363243, + "h": { + "real": 0.26057971697539123, + "imag": 0.7619813919317979 + }, + "train_coherence": 0.43539856184163983, + "metrics": { + "errors": 218, + "symbols": 2348, + "ber": 0.09284497444633731, + "plus_mean": 0.9955478667941479, + "plus_std": 0.7903610380985174, + "minus_mean": -0.9952243515845024, + "minus_std": 0.7632162796203927, + "cloud_separation_sigma": 2.5624323788205294, + "evm_rms": 1.1566134639773282, + "matched_component_power": 0.6485174305492952, + "residual_power": 0.8675572440266134, + "matched_residual_db": -1.2637648711797032, + "margin_median": 1.0139349738512236, + "margin_p10": 0.025315966667410233, + "margin_p01": -1.0580122753658678 + }, + "eye": { + "opening": 1.9907722183786503, + "opening_at_minus_0p1": 1.9412518423272336, + "opening_at_plus_0p1": 1.9735876123094342, + "drop_minus_0p1_percent": 2.487495836753628, + "drop_plus_0p1_percent": 0.8632130743321142 + }, + "isi": { + "main_tap_power": 0.6502058158885732, + "adjacent_taps_power": 0.003691304273159639, + "isi_ratio_db": -22.458710043648004, + "offsets": [ + -5, + -4, + -3, + -2, + -1, + 0, + 1, + 2, + 3, + 4, + 5 + ], + "taps": [ + { + "real": 0.03242113216458319, + "imag": 0.0021116485830202096 + }, + { + "real": 0.018440972690012797, + "imag": -0.006816559809247252 + }, + { + "real": 0.024102970212414657, + "imag": 0.013176061738034789 + }, + { + "real": 0.004842641111187363, + "imag": -0.014399493577716957 + }, + { + "real": 0.010946434008199335, + "imag": -0.0060582506380786605 + }, + { + "real": 0.2615894135354988, + "imag": 0.7627429413732565 + }, + { + "real": 0.0018266370532916505, + "imag": 0.006961416538351917 + }, + { + "real": 0.004898069419461269, + "imag": -0.009318485510960046 + }, + { + "real": 0.004770871144378393, + "imag": -0.01036639841469876 + }, + { + "real": -0.007057339280637082, + "imag": 0.0205798498505953 + }, + { + "real": -0.0050704969680001235, + "imag": 0.017759573605051787 + } + ] + } + }, + "channel": { + "stable": true, + "bins": 659, + "median_coherence": 0.3950655458475438, + "amplitude_ripple_p95_p05_db": 7.550266963349408, + "max_min_gain_db": 25.341855802859662, + "gain_slope_db_per_mhz": -0.3826714404030693, + "common_group_delay_seconds": 2.307571798566384e-06, + "residual_phase_ripple_p95_p05_rad": 5.326810530921518, + "group_delay_stable": false, + "group_delay_variation_p95_p05_seconds": null, + "band_edge_hz": 337500.0, + "tx_psd_threshold_db": -20.0 + } + }, + { + "packet_index": 16, + "oracle": { + "timing_fraction": 0.03125, + "timing_samples": 0.5, + "cfo_hz": 1.3365576309608829, + "h": { + "real": 0.32062377680698795, + "imag": 0.7746916287130711 + }, + "train_coherence": 0.4597038716527535, + "metrics": { + "errors": 202, + "symbols": 2348, + "ber": 0.08603066439522998, + "plus_mean": 0.9732847206222802, + "plus_std": 0.6943947525927853, + "minus_mean": -0.9792234478816603, + "minus_std": 0.7079618183365991, + "cloud_separation_sigma": 2.7844798425810753, + "evm_rms": 1.063656865382626, + "matched_component_power": 0.7029467258520877, + "residual_power": 0.7952899743189897, + "matched_residual_db": -0.5360309519366353, + "margin_median": 0.9737653479066324, + "margin_p10": 0.06875305956142477, + "margin_p01": -0.7135233289091962 + }, + "eye": { + "opening": 1.9525081685039405, + "opening_at_minus_0p1": 1.9251876476513945, + "opening_at_plus_0p1": 1.9126145765672562, + "drop_minus_0p1_percent": 1.3992525764171093, + "drop_plus_0p1_percent": 2.043197185046952 + }, + "isi": { + "main_tap_power": 0.7036402847967822, + "adjacent_taps_power": 0.0043537490173395695, + "isi_ratio_db": -22.084873062704045, + "offsets": [ + -5, + -4, + -3, + -2, + -1, + 0, + 1, + 2, + 3, + 4, + 5 + ], + "taps": [ + { + "real": 0.010739344970719045, + "imag": -0.02849543009856077 + }, + { + "real": -0.015193104167848803, + "imag": -0.017064140727735322 + }, + { + "real": 0.008725971519883349, + "imag": 0.011556425674472914 + }, + { + "real": -0.008378913950043202, + "imag": -0.0004261395505907109 + }, + { + "real": -0.019760478033488196, + "imag": 0.006181183158375875 + }, + { + "real": 0.32075898009605563, + "imag": 0.7750831964921704 + }, + { + "real": -0.010337364536535094, + "imag": -0.012977198439790932 + }, + { + "real": -0.014097700306396316, + "imag": 0.013259148463359141 + }, + { + "real": -0.011311339663682038, + "imag": -0.0016515423779955365 + }, + { + "real": -0.011518207242145305, + "imag": 0.025178864692357972 + }, + { + "real": -0.02485436890051354, + "imag": 0.005546966746624058 + } + ] + } + }, + "channel": { + "stable": true, + "bins": 657, + "median_coherence": 0.4475476133128079, + "amplitude_ripple_p95_p05_db": 6.3916733554839595, + "max_min_gain_db": 24.903021329186622, + "gain_slope_db_per_mhz": 0.2035258135498371, + "common_group_delay_seconds": 9.278280206168468e-09, + "residual_phase_ripple_p95_p05_rad": 0.7414410771269146, + "group_delay_stable": false, + "group_delay_variation_p95_p05_seconds": null, + "band_edge_hz": 337500.0, + "tx_psd_threshold_db": -20.0 + } + } + ], + "symbol_errors": 3730, + "symbols": 37568, + "symbol_error_rate": 0.0992866269165247, + "evm_rms": 1.2204009809742542, + "matched_component_power": 0.6678955358424654, + "residual_power": 0.9947492876385003, + "matched_residual_db": -1.7300509612417754, + "residual_interpretation": "Contains noise and unmodelled distortion; not pure noise", + "band_gain_nonuniformity_p95_p05_db_median": 6.660340655081576, + "band_gain_nonuniformity_p95_p05_db_min": 6.236828217134885, + "band_gain_nonuniformity_p95_p05_db_max": 10.617549420778396 + }, + "waveform_quality": { + "frequency_offset_hz": -0.006075930110050015, + "complex_gain": { + "real": 0.0013375329121293438, + "imag": 0.00440715070259547 + }, + "matched_component_power_code2": 0.04107537197300372, + "residual_power_code2": 1.1221939022167247, + "matched_residual_db": -14.364863994652556, + "residual_interpretation": "Contains noise, channel distortion and any TX-underrun effect; not pure noise", + "band_bins": 33, + "band_gain_nonuniformity_p95_p05_db": 1.0086598419300472, + "band_gain_max_min_db": 1.3587605081706329, + "median_coherence": 0.5171805826918446, + "tx_psd_threshold_db": -20.0, + "coherence_threshold": 0.5 + }, + "lab056_comparison": { + "lab056_B_oracle_symbol_error_rate": 0.03495896, + "lab056_B_oracle_evm_rms": 0.84535, + "scope": "Lab056 used a different PRBS ABAB waveform and method; values are contextual, not identical estimands" + }, + "primary_result": "The sole RF session is invalid as a clean legacy-versus-T2 acceptance test because hackrf_transfer reported one transient TX underrun; both strict modes produced 0/16.", + "recommended_next_single_step": "Offline localize the underrun position against packet boundaries before deciding whether a new RF lab is justified.", + "rf_tx_now": 0, + "commit": "NOT_PERFORMED", + "push": "NOT_PERFORMED", + "lab063": "NOT_CREATED" +} \ No newline at end of file diff --git a/data/processed/lab062/software_gate.json b/data/processed/lab062/software_gate.json new file mode 100644 index 0000000..0fa6570 --- /dev/null +++ b/data/processed/lab062/software_gate.json @@ -0,0 +1,25 @@ +{ + "lab": "Lab062", + "stage": "SOFTWARE_GATE", + "rf_tx_count": 0, + "tx_sha256": "e84bbce227426c0aac13a48ded1286ca4a44fc6e3efce01f6e5a513217c87ff5", + "legacy": { + "mode": "legacy", + "packets": 16, + "header_pass": 16, + "fec_pass": 16, + "crc_pass": 16, + "exact_ordered_payloads": true, + "passed": true + }, + "t2": { + "mode": "t2", + "packets": 16, + "header_pass": 16, + "fec_pass": 16, + "crc_pass": 16, + "exact_ordered_payloads": true, + "passed": true + }, + "passed": true +} \ No newline at end of file diff --git a/data/processed/lab062/t2_rf_decode.json b/data/processed/lab062/t2_rf_decode.json new file mode 100644 index 0000000..e0d3a9e --- /dev/null +++ b/data/processed/lab062/t2_rf_decode.json @@ -0,0 +1,2043 @@ +{ + "mode": "t2", + "candidates": 144, + "true_packets_found": 0, + "header_pass": 3, + "fec_started": 3, + "fec_pass": 3, + "crc_started": 3, + "crc_pass": 0, + "packet_output": 0, + "exact_payload_match": 0, + "exact_ordered_payloads": false, + "passed": false, + "passed_packet_indexes": [], + "rows": [ + { + "absolute_refined": 4256091, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -1.7194573300467735, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4254059, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -0.8076189966339119, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4258123, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 1.2821792952994473, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4252027, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -5.7896816585198545, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4249996, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 64.58046614257283, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4247963, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 32.72041687859368, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4260155, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 4.006571727243786, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4262187, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -209.45146000046373, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4264219, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 2.3835122159606987, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4348347, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 15.55265695495649, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4346316, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -6.324518335892338, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4350380, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 8.934098362738649, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4352411, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 10.03649445995649, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4344284, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -40.296662723967756, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4354443, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 19.198845186072667, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4342252, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -57.19088627176695, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4340220, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -57.42713113077808, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4440603, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -269.48595250063136, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4442635, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 12.265918933004569, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4438571, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -11.419278213061652, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4436539, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -27.79434706299483, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4444668, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 12.976183394608924, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4434508, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -46.435027273605016, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4446699, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -55.644004444214325, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4432475, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -58.47571644243243, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4532859, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 298.8501940081021, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4530827, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 491.3172067515746, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4534891, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 324.4747224879958, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4528795, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 266.4715808280898, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4536923, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 582.4052820660847, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4526763, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -1.0443507151740747, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4538955, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 366.50570508603454, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4625115, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -0.1417433222547976, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4623083, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 17.129731142936688, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4627147, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -0.63276659034088, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4629179, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -4.422745077070875, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4621051, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 127.49881066603218, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4631211, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 4.181523731344779, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4619019, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -306.23176728636776, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4633243, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 15.009982138107077, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4616987, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -45.413391421237684, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4631211, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 4.181523731344779, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4717371, + "reason": "CRC_FAIL", + "header": true, + "fec_started": true, + "fec": true, + "crc_started": true, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": 4.67554618043703, + "t2_final_frequency_hz": -3.16390424095876, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4715339, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -43.78719366813019, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4713307, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -219.4156773245655, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4711275, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -295.9659022443841, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4709243, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -334.757960150011, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4719403, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -5.616353407992106, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4721435, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -5.909140617244573, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4723467, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -7.479488272527757, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4725499, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -5.703182969444749, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4809627, + "reason": "PHY_HEADER_CHECKSUM_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -1.0113931346659666, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4811660, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -4.881171489673869, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4807595, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -1.0318387373219515, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4813692, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -0.29244982200566555, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4805564, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -23.321921505492544, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4815724, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 6.270287957226037, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4803532, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -38.371675062511024, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4801500, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -322.09240857859936, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4817755, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 3.309335672551733, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4901883, + "reason": "PHY_HEADER_VERSION_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 2.6855013821926375, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4899851, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 26.415813174689493, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4903915, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 7.481991253181289, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4897819, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 122.19480041843761, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4905947, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 0.003791069539647345, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4895787, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -229.6129081036016, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4907979, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -4.478834488946281, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4910011, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -2.0287673898877965, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4893755, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 216.6245301033978, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4994139, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -1.6484857483023083, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4992107, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 15.366018411305163, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4996171, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 9.249008966184432, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4990075, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 260.3130792087344, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4998204, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 22.358308183351664, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4988043, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -50.89540203772368, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5000236, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 1.3480507192273978, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4986011, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 479.9374660415342, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4994139, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -1.6484857483023083, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 4996171, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 9.249008966184432, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5086395, + "reason": "PHY_HEADER_CHECKSUM_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -1.3448756520541327, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5084363, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 12.709533569769961, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5088427, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -8.20787542938349, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5090459, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 8.912786651178896, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5082331, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -36.806370540566434, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5080299, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 162.33738289481497, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5092491, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 7.175027728104566, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5078267, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 197.95260036996882, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5094523, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -5.534741620044272, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5176619, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -15.050754137865244, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5174587, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -27.54845423864084, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5172555, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -45.03576631515387, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5170523, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -59.52465447729939, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5178651, + "reason": "CRC_FAIL", + "header": true, + "fec_started": true, + "fec": true, + "crc_started": true, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": 0.7573187277726318, + "t2_final_frequency_hz": -0.14196556023732618, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5180683, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 4.7047907053619245, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5182715, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 9.569080605200561, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5184747, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 2.1777352686069316, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5186779, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -4.484592565977186, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5186779, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -4.484592565977186, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5270907, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -224.6077431845891, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5268875, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -3.530124758673054, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5272939, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 17.178813656898143, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5266844, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -36.1684777648103, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5274971, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 13.39212536264458, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5277003, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -229.23760620804308, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5264812, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -51.78806119791241, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5279035, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 10.998276561755588, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5270907, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -224.6077431845891, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5272939, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 17.178813656898143, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5363163, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -0.41869279390971675, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5361131, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -275.2794762717461, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5365195, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -160.71647284810825, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5359099, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 38.1491428002769, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5367227, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -404.0254445698635, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5369259, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -389.7140266731923, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5357067, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -37.63848905802935, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5455419, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 232.58226796428784, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5453387, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -15.482573017589944, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5457451, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 0.6995444168627484, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5451355, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -35.82338869856656, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5459483, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 0.10720179586583842, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5449323, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 192.01687474092313, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5461515, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 52.34352710699104, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5447292, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -68.53960496820852, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5463547, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 9.368814582007971, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5547675, + "reason": "CRC_FAIL", + "header": true, + "fec_started": true, + "fec": true, + "crc_started": true, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": -9.95965988857566, + "t2_final_frequency_hz": 2.2844456653638283, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5549707, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -3.2696717024916273, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5545643, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -18.77244433484157, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5543611, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -32.91868981456287, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5551739, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -0.9559683850496913, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5541580, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -54.07509598507442, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5553771, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -1.6450671389787164, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5539547, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -68.85914172515966, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5555803, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 1.8558622924213537, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5635867, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 32.07154531955363, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5633835, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -51.840096762888706, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5631803, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -274.4860539985252, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5639931, + "reason": "PHY_HEADER_VERSION_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 15.072680821115071, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5637899, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 1.2416981068857842, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5641963, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 13.797611613523427, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5643995, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 6.499398742116915, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5646027, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 289.98547288745084, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5648059, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": -2.8034242690276816, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 5646027, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 289.98547288745084, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + }, + { + "absolute_refined": 7175676, + "reason": "PHY_HEADER_MAGIC_MISMATCH", + "header": false, + "fec_started": false, + "fec": false, + "crc_started": false, + "crc": false, + "packet_output": false, + "packet_index_after_verdict": null, + "initial_frequency_hz": null, + "t2_final_frequency_hz": 859.3541792109177, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" + } + ], + "detector_statistics": { + "total_local_peaks": 825858, + "first_stage_candidates": 209956, + "cheap_stage_checked": 209956, + "cheap_stage_rejected": 209812, + "clusters": 21, + "representative_checks": 21, + "alternative_checks": 123 + }, + "candidate_overflow": 0 +} \ No newline at end of file diff --git a/docs/LABS_INDEX.md b/docs/LABS_INDEX.md index 6a59e13..f64d031 100644 --- a/docs/LABS_INDEX.md +++ b/docs/LABS_INDEX.md @@ -570,3 +570,29 @@ [synthetic CSV](../data/processed/lab061/synthetic_packet_results.csv). - **STOP:** Lab061 фиксируется этим отдельным коммитом; push выполняется пользователем отдельно, Lab062 не создана. + +## Lab062 — полный 500K PHY-пакет, подготовка и RX-only preflight + +- **Запись 056; RF TX=0.** Подготовлены16 пакетов по256 байт payload, + 0,184512с. Legacy/T2 дали16/16 строгих HEADER/FEC/CRC и точных payload. +- **Геометрия:**1400МГц, примерно1,2м, LOS в помещении; TX возле окна, RX на + столе, одинаковая поляризация, антенны и кабели неподвижны. +- **Аппаратный preflight PASS:** MASTER/SLAVE reg29=0x26, SLAVE CLKIN=DETECTED + через133,5795мс. RX-only:800000 отсчётов, RMS2,314058, AC RMS0,985483, + max|I|/|Q|=6/8, clipping0, overruns0, сильного фона нет. +- **Проверки:** quick gate962/35/13 PASS, pytest962 passed. Усиления10/24/24дБ + сохранены; аналоговая компрессия без прибора остаётся неизвестной. +- [План](lab062_current_state.md), [отчёт](lab062_rx_preflight.md), + [software](../data/processed/lab062/software_gate.json), + [preflight](../data/processed/lab062/preflight_result.json). +- **STOP:** технически готово к одному TX, но отдельного разрешения ещё нет. + Lab062 не коммитировалась, push не выполнялся, Lab063 не создана. +- **Единственный RF-сеанс:** выполнен один TX без повторов. RX сохранён полностью: 24 000 000 + комплексных отсчётов, 3,000 с, overruns 0, clipping 0. В TX-журнале зарегистрирован + промежуточный `1 underruns, longest 16672 bytes`, поэтому сеанс признан невалидным для чистого + A/B-сравнения. Legacy/T2 дали одинаковый пакетный итог 0/16, T2 gain 0. +- [RF-отчёт](lab062_rf_result.md), + [JSON](../data/processed/lab062/rf_analysis.json), + [покадровый CSV](../data/processed/lab062/packet_comparison.csv). +- **Текущее состояние:** `RF TX=0`; повтор не выполнялся, Lab062 не закоммичена, push не + выполнялся, Lab063 не создана. Следующий шаг требует отдельного согласования. diff --git a/docs/lab062_current_state.md b/docs/lab062_current_state.md new file mode 100644 index 0000000..ebd5a38 --- /dev/null +++ b/docs/lab062_current_state.md @@ -0,0 +1,48 @@ +# Lab062 — полный пакет 500K, подготовка к одному RF-сеансу + +Lab062 проверяет T2 на полном штатном PHY-пакете в одном будущем коротком +эфирном сеансе. На текущем этапе разрешены подготовка, программный шлюз, +аппаратная проверка общей опоры и RX-only запись фона. Передача запрещена до +отдельного разрешения пользователя. + +## Неподвижная физическая схема + +| Условие | Фактическое значение | +|---|---| +| Частота | 1400000000 Гц, только для Lab062 | +| Расстояние TX–RX | примерно 1,2 м | +| Геометрия | прямая видимость, помещение | +| TX | плата и антенна возле окна | +| RX | плата и антенна на столе пользователя | +| Антенны | имеющиеся антенны на 1400 МГц, неподвижны | +| Поляризация | одинаковая | +| Тактирование | 10 МГц TCXO → MASTER → MASTER CLKOUT → SLAVE CLKIN | + +Длинный кабель общей опоры, USB-подключение, антенны и остальные кабели не +перемещаются. Пользователь по возможности не проходит между антеннами. Во время +будущего сеанса не меняются частота, усиления, ориентация и PHY. + +## Параметры + +- 16 полных пакетов, payload каждого — 256 байт; +- BPSK, 500000 символов/с, Fs 8000000 выборок/с, 16 выборок/символ; +- центральная частота 1400 МГц, цифровая несущая +50 кГц; +- TX VGA 10 дБ, RX LNA/VGA 24/24 дБ; +- RF amplifier и Bias-Tee выключены; +- один конечный TX-waveform и одна будущая RX-запись; +- режим приёмника задаётся заранее: `legacy` или `t2`, без CRC-fallback. + +RX-only preflight не меняет усиления. Он проверяет rail-коды, overruns, +максимальные |I|/|Q|, полный и AC RMS, сильный фон и ошибки аппаратных команд. +Эвристический STOP для неожиданно сильного цифрового фона: AC RMS не менее 20 +кодов или максимум |I|/|Q| не менее 100 кодов. Отсутствие цифрового клиппинга +не доказывает отсутствие аналоговой компрессии. + +Обязательная аппаратная точка: MASTER reg29=0x26, SLAVE reg29=0x26 и SLAVE +CLKIN=DETECTED. Любой отказ означает `RF TX = 0` и STOP. + +Lab062 не коммитируется. Push не выполняется. Lab063 не создаётся автоматически. + +## Фактический RF-результат + +14 сентября 2026 года выполнен ровно один разрешённый TX-сеанс. Полная RX-запись сохранена, но в промежуточной строке `hackrf_transfer` зарегистрирован `1 underruns, longest 16672 bytes`. Повтор не выполнялся. Строгие `legacy` и `t2` на одной записи дали 0/16 CRC и пакетов; T2 gain равен 0. Подробности и покадровая таблица приведены в [отчёте](lab062_rf_result.md). Текущий статус: `RF TX = 0`, Lab062 не закоммичена, push не выполнялся, Lab063 не создана. diff --git a/docs/lab062_rf_result.md b/docs/lab062_rf_result.md new file mode 100644 index 0000000..a14fd4b --- /dev/null +++ b/docs/lab062_rf_result.md @@ -0,0 +1,108 @@ +# Lab062 — результат единственного RF-сеанса + +Передача была запущена один раз. Приёмник сохранил полную трёхсекундную IQ-запись без переполнений и цифрового клиппинга. Однако `hackrf_transfer` во время передачи сообщил об одном кратком underrun: буфер передатчика один раз опустел на интервал до 16 672 байт. В итоговой строке утилита напечатала ноль underrun, но промежуточную ненулевую строку игнорировать нельзя. Поэтому этот сеанс нельзя считать чистым сравнением `legacy` и `t2`. + +Оба строгих варианта приёмника обработали одну и ту же запись и выдали 0 из 16 пакетов. T2 не дал выигрыша в пакетах. Установлено, что передача состоялась, общий тактовый сигнал перед ней был исправен, RX-файл полный, а строгий результат равен 0/16 в обоих режимах. Нельзя установить, каким был бы результат без underrun, и нельзя приписывать все ошибки самому T2 или эфирному каналу. Аналоговая компрессия также остаётся неизвестной без измерительного прибора. + +## Условия + +| Параметр | Значение | +|---|---:| +| RF | 1 400 000 000 Гц | +| Символьная скорость | 500 000 символов/с | +| Частота дискретизации | 8 000 000 комплексных отсчётов/с | +| Цифровая несущая | +50 000 Гц | +| Пакеты | 16 полных PHY-пакетов по 256 байт payload | +| TX | 1 476 096 отсчётов, 0,184512 с, VGA 10 дБ | +| RX | LNA/VGA 24/24 дБ, 3 с | +| RF amplifier / Bias-Tee | OFF / OFF | +| Геометрия | около 1,2 м, LOS, помещение; TX возле окна, RX на столе | +| Антенны | имеющиеся антенны на 1400 МГц, одинаковая поляризация, неподвижны | +| Опора | 10 МГц TCXO → MASTER → MASTER CLKOUT → SLAVE CLKIN | + +SHA-256 передаваемого файла: `e84bbce227426c0aac13a48ded1286ca4a44fc6e3efce01f6e5a513217c87ff5`. + +## Аппаратный результат + +- перед TX повторно получены `MASTER reg29 = 0x26`, `SLAVE reg29 = 0x26`, `SLAVE CLKIN = DETECTED`; +- выполнен один TX-сеанс, автоматических повторов нет; +- RX: 24 000 000 комплексных отсчётов, 48 000 000 байт, 3,000 с; +- SHA-256 RX: `ce0bd603e4ca356af67d504ee11c9e9f38171f31c7427fbe61216a28126b2b32`; +- RX overruns: 0 во всех пяти строках журнала; +- RX clipping: 0; +- TX underruns: промежуточный максимум 1, `longest 16672 bytes`; финальная строка — 0; +- cleanup: оба CLKOUT выключены без зарегистрированных ошибок, SDR-процессы после сеанса — `CLEAR`; +- текущее состояние: `RF TX = 0`. + +Из-за ненулевой промежуточной строки underrun статус сеанса: `INVALID_TX_UNDERRUN`. Полученные файлы сохранены, повтор не выполнялся. + +## Строгое декодирование одной записи + +| Стадия | legacy | T2 | +|---|---:|---:| +| CANDIDATES | 144 | 144 | +| TRUE PACKETS FOUND | 0 | 0 | +| HEADER ACCEPTED | 3 | 3 | +| FEC STARTED | 3 | 3 | +| FEC PASS | 3 | 3 | +| CRC STARTED | 3 | 3 | +| CRC PASS | 0 | 0 | +| PACKET OUTPUT | 0 | 0 | +| EXACT PAYLOAD MATCH | 0 | 0 | + +Детектор в обоих запусках получил 209 956 первичных кандидатов, дешёвая ступень отклонила 209 812, после группировки строгий декодер проверил 144 кандидата. Переполнения очереди кандидатов не было. Никакого fallback между `legacy` и `t2` не выполнялось. + +- `PASSED BY BOTH = []` +- `PASSED ONLY BY LEGACY = []` +- `PASSED ONLY BY T2 = []` +- `FAILED BY BOTH = [1, 2, …, 16]` + +## Таблица 16 фактических границ + +Начало потока найдено только после строгого вердикта корреляцией с первым TX-пакетом: отсчёт 4 256 091, отношение пика к медиане 21,739. Знание TX не передавалось детектору и не использовалось для повторной настройки приёмника. Во всех строках `H/F/C/O` означают header/FEC/CRC/output; `1` — проход, `0` — непроход. Ошибки символов и оценки частоты — диагностические, по известной границе и известным переданным символам. + +| № | legacy H/F/C/O | T2 H/F/C/O | Preamble errors | Header errors | Payload errors до FEC | CFO нач., Гц | T2 фин., Гц | T2 lock | +|---:|:---:|:---:|---:|---:|---:|---:|---:|:---:| +| 1 | 0/0/0/0 | 0/0/0/0 | 108 | 20 | 367 | -2.511 | +1.939 | не определён | +| 2 | 0/0/0/0 | 0/0/0/0 | 135 | 11 | 377 | +16.850 | -2.223 | не определён | +| 3 | 0/0/0/0 | 0/0/0/0 | 466 | 115 | 2229 | -266.238 | -265.796 | не определён | +| 4 | 0/0/0/0 | 0/0/0/0 | 515 | 104 | 2266 | +297.250 | +293.800 | не определён | +| 5 | 0/0/0/0 | 0/0/0/0 | 108 | 27 | 369 | -1.712 | -0.835 | не определён | +| 6 | 1/1/0/0 | 1/1/0/0 | 112 | 10 | 345 | +4.676 | -3.164 | не определён | +| 7 | 0/0/0/0 | 0/0/0/0 | 113 | 7 | 344 | +2.113 | +1.094 | не определён | +| 8 | 0/0/0/0 | 0/0/0/0 | 91 | 19 | 368 | +0.964 | +0.354 | не определён | +| 9 | 0/0/0/0 | 0/0/0/0 | 105 | 21 | 367 | -2.679 | +0.191 | не определён | +| 10 | 0/0/0/0 | 0/0/0/0 | 116 | 7 | 345 | -0.290 | +0.947 | не определён | +| 11 | 0/0/0/0 | 1/1/0/0 | 109 | 9 | 392 | +0.757 | -0.142 | не определён | +| 12 | 0/0/0/0 | 0/0/0/0 | 297 | 110 | 2181 | -223.050 | -222.389 | не определён | +| 13 | 0/0/0/0 | 0/0/0/0 | 304 | 36 | 524 | -0.161 | -2.081 | не определён | +| 14 | 1/1/0/0 | 0/0/0/0 | 314 | 127 | 2091 | +228.209 | +224.928 | не определён | +| 15 | 1/1/0/0 | 1/1/0/0 | 131 | 7 | 395 | -9.960 | +2.284 | не определён | +| 16 | 0/0/0/0 | 0/0/0/0 | 100 | 23 | 355 | +13.157 | -0.868 | не определён | + +В реализации T2 нет отдельного детектора lock, поэтому поле нельзя честно заменить на `PASS` или `FAIL`. Сохранены начальное состояние частоты и конечное состояние петли. + +## Физическое качество по методике Lab058 + +Функции `analyze_values` и `channel_metrics` из Lab058 применены отдельно к каждому полному пакету. Для оценки использованы диагностические границы и чередующиеся обучающие/проверочные участки с защитными краями. Это измерение сделано после строгого результата и не меняет 0/16. + +| Метрика | Lab062 | Lab056, 500K | Разница по смыслу | +|---|---:|---:|---| +| Диагностическая доля ошибочных символов | 0,099287 | 0,034959 | Lab062 хуже | +| Нормированное RMS-отклонение, EVM | 1,220401 | 0,845350 | Lab062 хуже | +| Matched/residual | -1,730051 дБ | +1,464846 дБ | Lab062 хуже на 3,194897 дБ | +| Неравномерность усиления, p95–p05 | медиана 6,660341 дБ | среднее 5,471382 дБ | Lab062 больше | + +Для Lab062 разброс неравномерности между пакетами составил 6,236828…10,617549 дБ. Остаток включает шум, искажения канала и возможное влияние underrun; называть его чистым шумом нельзя. Отдельная диагностика именно выходных символов T2 дала SER 0,186626 и RMS 1,699461; это другой срез данных, поэтому он не подменяет приведённые выше сопоставимые метрики Lab058. + +## Инженерный вывод + +Чистое сравнение `legacy` и T2 не состоялось из-за зафиксированного TX underrun. Фактический строгий результат существующей записи — 0/16 для обоих режимов, выигрыш T2 равен нулю. В записи видны неоднородные повреждения пакетов и заметно худшее качество символов, чем у 500K-сегментов Lab056, но эти наблюдения нельзя отделить от аппаратной ошибки передачи. + +Следующий одиночный шаг: без RF локализовать момент underrun относительно границ пакетов и проверить, совместимы ли провалы качества с его положением. Новый RF-сеанс, Lab063, изменение PHY или усилений этим отчётом не разрешаются. + +`LAB062 COMMIT = NOT PERFORMED` + +`PUSH = NOT PERFORMED` + +`RF TX = 0` diff --git a/docs/lab062_rx_preflight.md b/docs/lab062_rx_preflight.md new file mode 100644 index 0000000..369dae0 --- /dev/null +++ b/docs/lab062_rx_preflight.md @@ -0,0 +1,108 @@ +# Lab062 — подготовка и RX-only preflight + +14 сентября 2026 года выполнена подготовка полного 500K PHY-сеанса и одна +аппаратная проверка при выключенном передатчике. Результат preflight — PASS. +Передача не запускалась: `RF TX = 0`. + +## Условия + +| Параметр | Значение | +|---|---| +| Центральная частота | 1400000000 Гц | +| Скорость символов | 500000 символов/с | +| Частота дискретизации | 8000000 выборок/с | +| Пакеты | 16 полных PHY-пакетов | +| Payload | 256 байт в каждом пакете | +| TX VGA | 10 дБ | +| RX LNA / VGA | 24 / 24 дБ | +| RF amplifier / Bias-Tee | выключены | +| Расстояние TX–RX | примерно 1,2 м | +| Геометрия | прямая видимость, помещение | +| TX | плата и антенна возле окна | +| RX | плата и антенна на столе пользователя | +| Антенны | имеющиеся антенны на 1400 МГц, неподвижны | +| Поляризация | одинаковая | +| Общая опора | 10 МГц TCXO → MASTER → MASTER CLKOUT → SLAVE CLKIN | + +Длинный clock-кабель и USB-схема не менялись. Антенны, кабели, ориентация, +частота, усиления и PHY должны остаться неизменными до будущего разрешённого +сеанса. + +## Программная проверка + +Создан один waveform из 16 пакетов. Его длина — 1476096 комплексных отсчётов, +2952192 байта и 0,184512 с. SHA-256: +`e84bbce227426c0aac13a48ded1286ca4a44fc6e3efce01f6e5a513217c87ff5`. + +Строгий приёмник в заранее выбранных режимах дал: + +| Режим | Header | FEC | CRC | Точный payload и порядок | +|---|---:|---:|---:|---:| +| legacy | 16/16 | 16/16 | 16/16 | 16/16 | +| T2 | 16/16 | 16/16 | 16/16 | 16/16 | + +Автоматического повторного декодирования по результату CRC нет. + +## Общая опора и RX-only фон + +Свежая инвентаризация подтвердила обе HackRF One r9 с firmware/libhackrf +2024.02.1. Роли сохранены: + +- MASTER `000000000000000097c063dc323b97d3`; +- SLAVE `000000000000000097c063dc2e5327d3`. + +Аппаратная проверка получила: + +```text +MASTER reg29 = 0x26 +SLAVE reg29 = 0x26 +SLAVE CLKIN = DETECTED +CLKIN query = 2 +time to detect = 133.5795 ms +``` + +Первый опрос SLAVE ещё показывал отсутствие опоры, второй штатный опрос её +обнаружил. После этого SLAVE записал 800000 комплексных отсчётов, 0,1 с, при +1400 МГц и RX LNA/VGA 24/24 дБ. + +| Метрика RX-only записи | Значение | +|---|---:| +| Полный RMS IQ | 2,314058 кода | +| AC RMS после удаления среднего | 0,985483 кода | +| Средние I / Q | 0,966063 / 1,857529 кода | +| Максимум \|I\| / \|Q\| | 6 / 8 кодов | +| Максимальная комплексная амплитуда | 8,246211 кода | +| Цифровой clipping | 0 / 800000 отсчётов | +| RX overruns | 0 | +| Неожиданно сильный сигнал | нет | + +Сильным цифровым фоном считался бы AC RMS не менее 20 кодов или максимум +`|I|/|Q|` не менее 100 кодов. Оба показателя значительно ниже порога. + +Отсутствие rail-кодов не доказывает отсутствия аналоговой компрессии при +будущем TX. Абсолютная RF-мощность без измерительного прибора также неизвестна. +Усиления по результату preflight не менялись. + +Унаследованное от Lab056 поле энергии на символ исключено из обработанной +сводки: у фоновой записи нет символов, поэтому такая величина к ней неприменима. +Сырой аппаратный JSON сохранён без переписывания; это поле не участвовало в +решении PASS. + +SHA-256 RX-only записи: +`4cc0ceef5a95f84e5aa0c232d14ff1123efd307494b5c8a5646854be912fdbca`. + +После записи оба CLKOUT выключены без ошибок. Проверка процессов до и после +дала `CLEAR`. Вызовов `hackrf_transfer -t` не было. Эксклюзивный маркер +preflight запрещает его автоматический повтор. + +Артефакты: + +- [подготовка](../data/processed/lab062/preparation.json); +- [программный шлюз](../data/processed/lab062/software_gate.json); +- [результат preflight](../data/processed/lab062/preflight_result.json); +- исходные TX и RX-only CS8 находятся в `data/raw/lab062/` и в Git не входят. + +`READY FOR SINGLE LAB062 TX = YES` означает только техническую готовность. +Отдельного разрешения на передачу ещё нет. `RF TX = 0`. STOP. + +Lab062 не коммитируется. Push не выполняется. Lab063 не создаётся автоматически. diff --git a/experiments/lab062_full_packet_rf_preflight.py b/experiments/lab062_full_packet_rf_preflight.py new file mode 100644 index 0000000..5b5efa1 --- /dev/null +++ b/experiments/lab062_full_packet_rf_preflight.py @@ -0,0 +1,475 @@ +"""Lab062: подготовка полного 500K PHY-сеанса и RX-only preflight.""" + +from __future__ import annotations + +from dataclasses import asdict +import hashlib +import json +from pathlib import Path +import subprocess +import sys +import time + +if __package__ in (None, ""): + sys.path.insert(0, str(Path(__file__).resolve().parents[1])) + +import numpy as np + +from experiments import lab049_bpsk_symbol_rate as phy +from experiments import lab053_packet_processing as packet_processing +from experiments import lab053_streaming_receiver as streaming +from experiments import lab054_hardware_control as lab054 +from experiments import lab056_abab_energy as measurements +from experiments import lab056_capture_runner as hardware + + +ROOT = Path(__file__).resolve().parents[1] +RAW = ROOT / "data/raw/lab062" +OUTPUT = ROOT / "data/processed/lab062" +POINT = hardware.OperatingPoint( + frequency_hz=1_400_000_000, + physical_path="MASTER TX near window -> LOS indoor -> SLAVE RX on desk", + path_confirmed=True, + tx_antenna="existing 1400 MHz antenna near window", + rx_antenna="existing 1400 MHz antenna on desk", + distance_m=1.2, + orientation="same polarization; fixed during preflight and RF session", + visibility="LOS indoor", +) +MODE = phy.PhyMode(500_000) +PACKETS = 16 +PAYLOAD_BYTES = 256 +PREFLIGHT_SAMPLES = 800_000 +RX_SECONDS = 3 +RX_SAMPLES = RX_SECONDS * MODE.sample_rate_hz +RX_LEAD_SECONDS = 0.5 +STRONG_AC_RMS_CODE = 20.0 +STRONG_COMPONENT_CODE = 100.0 + + +def save_new(path: Path, value: dict) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + with path.open("x", encoding="utf-8") as stream: + json.dump(value, stream, ensure_ascii=False, indent=2) + + +def sha256(path: Path) -> str: + digest = hashlib.sha256() + with path.open("rb") as stream: + while block := stream.read(1024 * 1024): + digest.update(block) + return digest.hexdigest() + + +def plans(): + result = lab054.plans() + if len(result) != PACKETS or any(len(frame.plan.payload) != PAYLOAD_BYTES for frame in result): + raise RuntimeError("Штатный генератор не дал 16 payload по 256 байт") + return result + + +def parameters() -> dict: + return { + "rf_frequency_hz": POINT.frequency_hz, + "sample_rate_hz": MODE.sample_rate_hz, + "symbol_rate": MODE.symbol_rate, + "samples_per_symbol": MODE.samples_per_symbol, + "digital_carrier_hz": lab054.phy.lab045.CARRIER_OFFSET_HZ, + "packets": PACKETS, + "payload_bytes": PAYLOAD_BYTES, + "tx_vga_db": 10, + "rx_lna_db": 24, + "rx_vga_db": 24, + "rf_amplifier": False, + "bias_tee": False, + "geometry": asdict(POINT), + "clock_path": "10 MHz TCXO -> MASTER -> MASTER CLKOUT -> SLAVE CLKIN", + } + + +def transfer_command(path: Path | str, samples: int, *, transmit: bool = False) -> list[str]: + return hardware.command(POINT, path, samples, transmit=transmit) + + +def prepare() -> dict: + RAW.mkdir(parents=True, exist_ok=True) + OUTPUT.mkdir(parents=True, exist_ok=True) + waveform_path = RAW / "tx_stream.cs8" + if waveform_path.exists(): + raise FileExistsError("Lab062 TX уже существует; перезапись запрещена") + with waveform_path.open("xb") as stream: + for frame in plans(): + stream.write(phy.build_parameterized_tx_cs8(frame.plan, MODE)) + samples = waveform_path.stat().st_size // 2 + result = { + "lab": "Lab062", "stage": "PREPARATION_ONLY", "rf_tx_count": 0, + "head": subprocess.check_output(["git", "rev-parse", "HEAD"], text=True).strip(), + "parameters": parameters(), "tx_samples": samples, + "tx_bytes": waveform_path.stat().st_size, + "tx_duration_seconds": samples / MODE.sample_rate_hz, + "tx_sha256": sha256(waveform_path), "rx_samples": RX_SAMPLES, + "rx_duration_seconds": RX_SECONDS, "automatic_retry": False, + "tx_command_prepared_not_run": transfer_command(waveform_path, samples, transmit=True), + "rx_command_prepared_not_run": transfer_command(RAW / "rx_stream.cs8", RX_SAMPLES), + } + save_new(RAW / "tx_metadata.json", result) + save_new(OUTPUT / "preparation.json", result) + return result + + +def validate_prepared() -> dict: + metadata = json.loads((RAW / "tx_metadata.json").read_text(encoding="utf-8")) + path = RAW / "tx_stream.cs8" + expected = hashlib.sha256() + expected_bytes = 0 + for frame in plans(): + block = phy.build_parameterized_tx_cs8(frame.plan, MODE) + expected.update(block) + expected_bytes += len(block) + if (metadata.get("stage") != "PREPARATION_ONLY" or metadata.get("rf_tx_count") != 0 + or metadata.get("parameters") != parameters() or path.stat().st_size != expected_bytes + or metadata.get("tx_sha256") != expected.hexdigest() or sha256(path) != expected.hexdigest()): + raise RuntimeError("Подготовленный Lab062 TX или параметры изменились") + return metadata + + +def decode(mode: str, source_path: Path | None = None, *, diagnostics: bool = False) -> dict: + observations = [] + receiver = streaming.StreamingReceiver( + processor=packet_processing.PacketProcessor(carrier_tracking_mode=mode), + packet_observer=lambda row, outcome: observations.append((row, outcome)), + ) + received = [] + with (source_path or (RAW / "tx_stream.cs8")).open("rb") as stream: + while block := stream.read(2 * receiver.block_samples): + values = np.frombuffer(block, np.int8) + samples = values[::2].astype(np.float32) + 1j * values[1::2].astype(np.float32) + received.extend(receiver.push_iq_block(samples.astype(np.complex64))) + received.extend(receiver.finish()) + expected = [frame.plan.payload for frame in plans()] + actual = [item.payload for item in received] + result = { + "mode": mode, "candidates": len(observations), "true_packets_found": len(actual), + "header_pass": sum(outcome.phy_header_pass for _, outcome in observations), + "fec_started": sum(outcome.fec_attempted for _, outcome in observations), + "fec_pass": sum(outcome.fec_pass for _, outcome in observations), + "crc_started": sum(outcome.crc != "NOT_REACHED" for _, outcome in observations), + "crc_pass": sum(outcome.crc == "PASS" for _, outcome in observations), + "packet_output": len(actual), + "exact_payload_match": sum(payload in expected for payload in actual), + "exact_ordered_payloads": actual == expected, + "passed": len(actual) == PACKETS and actual == expected, + } + if diagnostics: + payload_to_index = {payload: index + 1 for index, payload in enumerate(expected)} + result["passed_packet_indexes"] = sorted( + payload_to_index[payload] for payload in actual if payload in payload_to_index + ) + rows = [] + for row, outcome in observations: + payload = None + if outcome.frame is not None and outcome.frame.reception.payload_bytes is not None: + payload = bytes(outcome.frame.reception.payload_bytes) + traces = row.get("carrier_tracking_traces", ()) + final_frequency = None + if traces and len(traces[-1].frequency_hz): + final_frequency = float(traces[-1].frequency_hz[-1]) + rows.append({ + "absolute_refined": int(row["absolute_refined"]), + "reason": outcome.reason, + "header": bool(outcome.phy_header_pass), + "fec_started": bool(outcome.fec_attempted), + "fec": bool(outcome.fec_pass), + "crc_started": outcome.crc != "NOT_REACHED", + "crc": outcome.crc == "PASS", + "packet_output": bool(outcome.accepted and outcome.crc == "PASS"), + "packet_index_after_verdict": payload_to_index.get(payload), + "initial_frequency_hz": row.get("cfo_hz"), + "t2_final_frequency_hz": final_frequency, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" if mode == "t2" else "NOT_APPLICABLE", + }) + result["rows"] = rows + result["detector_statistics"] = dict(receiver.detection_statistics) + result["candidate_overflow"] = receiver.candidate_overflow + return result + + +def software_gate() -> dict: + metadata = validate_prepared() + legacy = decode("legacy") + t2 = decode("t2") + result = { + "lab": "Lab062", "stage": "SOFTWARE_GATE", "rf_tx_count": 0, + "tx_sha256": metadata["tx_sha256"], "legacy": legacy, "t2": t2, + "passed": legacy["passed"] and t2["passed"], + } + save_new(OUTPUT / "software_gate.json", result) + if not result["passed"]: + raise RuntimeError("Lab062 software gate FAIL") + return result + + +def preflight(*, runner=None, process_checker=None, clock_checker=None, + sleep_function=time.sleep) -> dict: + metadata = validate_prepared() + software = json.loads((OUTPUT / "software_gate.json").read_text(encoding="utf-8")) + if not software.get("passed") or software.get("tx_sha256") != metadata["tx_sha256"]: + raise RuntimeError("Нет действующего software gate") + save_new(RAW / "preflight_attempt.json", { + "lab": "Lab062", "rf_tx_count": 0, "point": asdict(POINT), + "tx_sha256": metadata["tx_sha256"], + }) + actual_runner = runner or lab054.clock._default_command_runner + process_checker = process_checker or lab054.check_processes + clock_checker = clock_checker or hardware.common_clock + + def rx_only(command): + if "-t" in command: + raise PermissionError("TX запрещён в Lab062 preflight") + return actual_runner(command) + + result = { + "lab": "Lab062", "stage": "RX_ONLY_PREFLIGHT", "passed": False, + "rf_tx_count": 0, "point": asdict(POINT), "parameters": parameters(), + "tx_sha256": metadata["tx_sha256"], "stop_before_tx": True, + } + clock_started = False + try: + before = process_checker() + result["process_before"] = before.to_dict() + lab054.require_clear(before) + result["inventory"] = lab054.phy.lab045._verify_device_inventory(rx_only) + clock_started = True + result["clock"] = clock_checker( + POINT, rx_only, lab054.clock.TransmitGuard(), sleep_function=sleep_function + ) + hardware.require_clock_pass(result["clock"]) + path = RAW / "preflight_rx.cs8" + if path.exists(): + raise FileExistsError("Lab062 preflight RX уже существует") + captured = rx_only(transfer_command(path, PREFLIGHT_SAMPLES)) + result["rx_process"] = { + "returncode": captured.returncode, + "stdout": captured.stdout or "", "stderr": captured.stderr or "", + } + log = (captured.stdout or "") + (captured.stderr or "") + if captured.returncode or not hardware.clean_counter_log(log, "overrun"): + raise RuntimeError("RX preflight: процесс или счётчик overruns не прошёл") + if path.stat().st_size != 2 * PREFLIGHT_SAMPLES: + raise RuntimeError("Неверная длина Lab062 preflight RX") + level = hardware.receive_level(path) + # У RX-only фона нет символов. Унаследованная метрика Lab056 была бы + # привязана к её 20 ksymbol/s и здесь физически неприменима. + level.pop("symbol_energy_code2_seconds", None) + level["symbol_energy"] = "NOT_APPLICABLE_TO_BACKGROUND" + ac_rms = float(np.sqrt(max(0.0, level["ac_power_code2"]))) + strong = bool(ac_rms >= STRONG_AC_RMS_CODE or level["max_abs_i"] >= STRONG_COMPONENT_CODE + or level["max_abs_q"] >= STRONG_COMPONENT_CODE) + level.update({ + "ac_rms_code": ac_rms, + "unexpected_strong_signal": strong, + "strong_signal_rule": ( + f"AC RMS >= {STRONG_AC_RMS_CODE} code or max |I|/|Q| >= " + f"{STRONG_COMPONENT_CODE} code" + ), + }) + result["rx_level"] = level + result["rx_sha256"] = sha256(path) + result["rx_overruns"] = 0 + if level["saturation_detected"]: + raise RuntimeError("RX clipping; STOP без изменения gain") + if strong: + raise RuntimeError("Неожиданно сильный RX-only фон; STOP без изменения gain") + result["passed"] = True + except Exception as error: + result["error"] = str(error) + raise + finally: + errors = lab054.disable_clock_outputs(rx_only) if clock_started else [] + try: + after = process_checker() + result["process_after"] = after.to_dict() + lab054.require_clear(after) + except Exception as error: + errors.append(str(error)) + result["cleanup_errors"] = errors + result["passed"] = result["passed"] and not errors + save_new(RAW / "preflight_result.json", result) + OUTPUT.mkdir(parents=True, exist_ok=True) + (OUTPUT / "preflight_result.json").write_text( + json.dumps(result, ensure_ascii=False, indent=2), encoding="utf-8" + ) + if not result["passed"]: + raise RuntimeError("Lab062 preflight cleanup FAIL") + return result + + +def require_preflight(metadata: dict) -> dict: + """Проверить сохранённый preflight именно для подготовленного потока Lab062.""" + record = json.loads((RAW / "preflight_result.json").read_text(encoding="utf-8")) + if (record.get("passed") is not True or record.get("rf_tx_count") != 0 + or record.get("point") != asdict(POINT) + or record.get("parameters") != parameters() + or record.get("tx_sha256") != metadata["tx_sha256"]): + raise PermissionError("Нет успешного RX-only preflight для этой конфигурации Lab062") + hardware.require_clock_pass(record.get("clock", {})) + level = record.get("rx_level", {}) + if (level.get("saturation_detected") is not False + or level.get("unexpected_strong_signal") is not False + or record.get("rx_overruns") != 0): + raise PermissionError("RX-only preflight не разрешает передачу") + return record + + +def capture_once(*, authorization: bool = False, runner=None, process_starter=None, + process_checker=None, clock_checker=None, + sleep_function=time.sleep) -> dict: + """Выполнить один RX-first сеанс и навсегда израсходовать попытку до обращения к SDR.""" + if authorization is not True: + raise PermissionError("Нужно отдельное разрешение на единственный RF-сеанс Lab062") + metadata = validate_prepared() + require_preflight(metadata) + receive_path = RAW / "rx_stream.cs8" + if receive_path.exists() or (RAW / "capture_result.json").exists(): + raise FileExistsError("Аппаратный результат Lab062 уже существует") + + actual_runner = runner or lab054.clock._default_command_runner + process_starter = process_starter or lab054.clock._default_process_starter + process_checker = process_checker or lab054.check_processes + clock_checker = clock_checker or hardware.common_clock + save_new(RAW / "hardware_attempt.json", { + "lab": "Lab062", "authorized_once": True, "automatic_retry": False, + "point": asdict(POINT), "parameters": parameters(), + "tx_sha256": metadata["tx_sha256"], + }) + + result = { + "lab": "Lab062", "stage": "SINGLE_RF_CAPTURE", "passed": False, + "rf_tx_count": 0, "automatic_tx_repeats": 0, + "point": asdict(POINT), "parameters": parameters(), + "tx_sha256": metadata["tx_sha256"], + } + guard = lab054.clock.TransmitGuard() + process = None + clock_started = False + try: + before = process_checker() + result["process_before"] = before.to_dict() + lab054.require_clear(before) + result["inventory"] = lab054.phy.lab045._verify_device_inventory(actual_runner) + clock_started = True + result["clock"] = clock_checker( + POINT, actual_runner, guard, sleep_function=sleep_function + ) + hardware.require_clock_pass(result["clock"]) + + process = process_starter( + transfer_command(receive_path, RX_SAMPLES), + RAW / "rx_stdout.txt", RAW / "rx_stderr.txt", + ) + sleep_function(RX_LEAD_SECONDS) + if process.poll() is not None: + raise RuntimeError("RX завершился до TX") + before_tx = hardware.receive_level(receive_path, tail_samples=65536) + before_tx.pop("symbol_energy_code2_seconds", None) + result["rx_level_before_tx"] = before_tx + if before_tx["saturation_detected"]: + raise RuntimeError("RX clipping до TX; RF TX = 0") + + guard.register_transmit() + result["rf_tx_count"] = guard.transmit_calls + transmitted = actual_runner(transfer_command( + RAW / "tx_stream.cs8", metadata["tx_samples"], transmit=True + )) + save_new(RAW / "tx_process_result.json", { + "returncode": transmitted.returncode, + "stdout": transmitted.stdout or "", "stderr": transmitted.stderr or "", + }) + if transmitted.returncode: + raise RuntimeError("Единственный TX завершился ошибкой; повтор запрещён") + if process.wait(RX_SECONDS + 10): + raise RuntimeError("RX завершился ошибкой; передача уже выполнена, повтор запрещён") + process.close_logs() + + result["rx_samples"] = receive_path.stat().st_size // 2 + result["rx_bytes"] = receive_path.stat().st_size + result["rx_duration_seconds"] = result["rx_samples"] / MODE.sample_rate_hz + if result["rx_bytes"] != RX_SAMPLES * 2: + raise RuntimeError("Повреждённая длина RX; передача уже выполнена, повтор запрещён") + rx_log = "".join( + (RAW / f"rx_{kind}.txt").read_text(encoding="utf-8") + for kind in ("stdout", "stderr") + ) + tx_log = (transmitted.stdout or "") + (transmitted.stderr or "") + if not hardware.clean_counter_log(rx_log, "overrun"): + raise RuntimeError("RX overrun или неоднозначный счётчик; повтор запрещён") + if not hardware.clean_counter_log(tx_log, "underrun"): + raise RuntimeError("TX underrun или неоднозначный счётчик; повтор запрещён") + result["rx_overruns"] = 0 + result["tx_underruns"] = 0 + result["rx_sha256"] = sha256(receive_path) + level = hardware.receive_level(receive_path) + level.pop("symbol_energy_code2_seconds", None) + result["rx_level"] = level + result["rx_clipping"] = bool(level["saturation_detected"]) + if result["rx_clipping"]: + raise RuntimeError("RX clipping в записи; передача уже выполнена, повтор запрещён") + result["passed"] = True + except Exception as error: + result["error"] = str(error) + raise + finally: + errors = [] + if process is not None: + try: + process.terminate() + except Exception as error: + errors.append(str(error)) + if clock_started: + errors.extend(lab054.disable_clock_outputs(actual_runner)) + try: + after = process_checker() + result["process_after"] = after.to_dict() + lab054.require_clear(after) + except Exception as error: + errors.append(str(error)) + result["cleanup_errors"] = errors + result["passed"] = result["passed"] and not errors + save_new(RAW / "capture_result.json", result) + OUTPUT.mkdir(parents=True, exist_ok=True) + (OUTPUT / "capture_result.json").write_text( + json.dumps(result, ensure_ascii=False, indent=2), encoding="utf-8" + ) + if not result["passed"]: + raise RuntimeError("Lab062 RF-сеанс завершён с ошибкой; повтор запрещён") + return result + + +def run_functional_tests() -> None: + assert MODE.samples_per_symbol == 16 + assert len(plans()) == 16 + assert all(len(frame.plan.payload) == 256 for frame in plans()) + assert "-t" not in transfer_command("NUL", 65536) + assert "-t" in transfer_command("NUL", 65536, transmit=True) + + +def main() -> None: + import argparse + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--stage", choices=("prepare", "software", "preflight", "capture"), required=True) + parser.add_argument("--authorize-one-rf", action="store_true") + arguments = parser.parse_args() + if arguments.stage == "prepare": + result = prepare() + elif arguments.stage == "software": + result = software_gate() + elif arguments.stage == "preflight": + result = preflight() + else: + result = capture_once(authorization=arguments.authorize_one_rf) + print(json.dumps(result, ensure_ascii=False, indent=2)) + print("RF TX = 0") + + +if __name__ == "__main__": + main() diff --git a/experiments/lab062_rf_analysis.py b/experiments/lab062_rf_analysis.py new file mode 100644 index 0000000..6578fb1 --- /dev/null +++ b/experiments/lab062_rf_analysis.py @@ -0,0 +1,330 @@ +"""Lab062: офлайн-анализ единственной сохранённой RX IQ-записи.""" + +from __future__ import annotations + +from collections import Counter +import csv +import json +import math +from pathlib import Path +import re +import sys + +if __package__ in (None, ""): + sys.path.insert(0, str(Path(__file__).resolve().parents[1])) + +import numpy as np +from scipy import signal + +from experiments import lab058_abab_symbol_quality as lab058 +from experiments import lab062_full_packet_rf_preflight as lab062 + + +def counter_values(text: str, name: str) -> list[int]: + pattern = re.compile(rf"(? dict: + """Найти начало по первому полному пакету, не передавая границы декодеру.""" + stride = lab062.MODE.samples_per_symbol + tx_raw = np.memmap(tx.path, np.int8, mode="r") + rx_raw = np.memmap(rx.path, np.int8, mode="r") + tx_decimated = ( + tx_raw[0:2 * frame_samples:2 * stride].astype(np.float32) + + 1j * tx_raw[1:2 * frame_samples:2 * stride].astype(np.float32) + ) + rx_decimated = ( + rx_raw[0::2 * stride].astype(np.float32) + + 1j * rx_raw[1::2 * stride].astype(np.float32) + ) + tx_decimated -= np.mean(tx_decimated) + rx_decimated -= np.mean(rx_decimated) + correlation = signal.correlate(rx_decimated, tx_decimated, mode="valid", method="fft") + coarse = int(np.argmax(abs(correlation))) * stride + first = tx.read(0, frame_samples).astype(np.complex128) + first -= np.mean(first) + candidates = range(max(0, coarse - 2 * stride), min(rx.size - frame_samples, coarse + 2 * stride) + 1) + values = [] + for start in candidates: + received = rx.read(start, frame_samples).astype(np.complex128) + received -= np.mean(received) + values.append(abs(np.vdot(first, received))) + offset = int(np.argmax(values)) + start = candidates.start + offset + median = float(np.median(abs(correlation))) + return { + "rx_start_sample": start, + "coarse_start_sample": coarse, + "correlation_peak_to_median": float(abs(correlation[coarse // stride]) / max(median, 1e-30)), + "method": "TX first-frame correlation; used only after strict receiver verdict", + } + + +def strict_row(rows: list[dict], nominal: int) -> dict | None: + if not rows: + return None + selected = min(rows, key=lambda row: abs(row["absolute_refined"] - nominal)) + return selected if abs(selected["absolute_refined"] - nominal) <= 64 else None + + +def diagnostic_symbol_rows(rx: lab058.Cs8File, start: int, frame_samples: int, + mode: str) -> list[dict]: + processor = lab062.packet_processing.PacketProcessor(carrier_tracking_mode=mode) + rows = [] + for index, frame in enumerate(lab062.plans(), 1): + values = rx.read(start + (index - 1) * frame_samples, frame_samples).astype(np.complex64) + context = lab062.packet_processing.PacketMeasure() + token = lab062.packet_processing.CURRENT.set(context) + try: + probe = processor.extract(values, 0, frame.plan.frame_symbol_count) + finally: + lab062.packet_processing.CURRENT.reset(token) + expected = 2.0 * frame.plan.frame_bits.astype(np.float64) - 1.0 + if not probe.passed or probe.normalized_real.size != expected.size: + rows.append({"packet_index": index, "measurable": False, "reason": probe.reason}) + continue + soft = np.asarray(probe.normalized_real, dtype=np.float64) + errors = np.signbit(soft) != np.signbit(expected) + p = lab062.phy.lab045.PREAMBLE_BIT_COUNT + h = p + lab062.phy.lab045.PHY_HEADER_BIT_COUNT + traces = context.cache.get("carrier_tracking_traces", ()) + final_frequency = None + if traces and len(traces[-1].frequency_hz): + final_frequency = float(traces[-1].frequency_hz[-1]) + rows.append({ + "packet_index": index, + "measurable": True, + "preamble_symbol_errors": int(np.sum(errors[:p])), + "header_symbol_errors": int(np.sum(errors[p:h])), + "payload_symbols_before_fec_errors": int(np.sum(errors[h:])), + "symbols": int(len(expected)), + "symbol_errors": int(np.sum(errors)), + "symbol_error_rate": float(np.mean(errors)), + "symbol_rms_deviation": float(np.sqrt(np.mean((soft - expected) ** 2))), + "initial_frequency_hz": float(probe.carrier["cfo_hz"]), + "t2_final_frequency_hz": final_frequency, + "t2_lock_status": "NOT_DEFINED_BY_IMPLEMENTATION" if mode == "t2" else "NOT_APPLICABLE", + }) + return rows + + +def waveform_quality(tx: lab058.Cs8File, rx: lab058.Cs8File, start: int) -> dict: + transmitted = tx.read(0, tx.size).astype(np.complex128) + received = rx.read(start, tx.size).astype(np.complex128) + transmitted -= np.mean(transmitted) + received -= np.mean(received) + product = received * np.conj(transmitted) + block = 4096 + count = len(product) // block + block_values = np.mean(product[:count * block].reshape(count, block), axis=1) + block_times = (np.arange(count) * block + 0.5 * block) / lab062.MODE.sample_rate_hz + phase = np.unwrap(np.angle(block_values)) + weights = np.maximum(abs(block_values), 1e-12) + design = np.column_stack((np.ones(count), block_times)) + root = np.sqrt(weights / np.max(weights)) + coefficients, *_ = np.linalg.lstsq(design * root[:, None], phase * root, rcond=None) + frequency_hz = float(coefficients[1] / (2 * np.pi)) + times = np.arange(len(received)) / lab062.MODE.sample_rate_hz + corrected = received * np.exp(-2j * np.pi * frequency_hz * times) + gain = np.vdot(transmitted, corrected) / np.vdot(transmitted, transmitted) + matched = gain * transmitted + residual = corrected - matched + matched_power = float(np.mean(abs(matched) ** 2)) + residual_power = float(np.mean(abs(residual) ** 2)) + + frequencies, tx_psd = signal.welch( + transmitted, fs=lab062.MODE.sample_rate_hz, nperseg=8192, + noverlap=4096, return_onesided=False, + ) + _, rx_psd = signal.welch( + corrected, fs=lab062.MODE.sample_rate_hz, nperseg=8192, + noverlap=4096, return_onesided=False, + ) + _, cross = signal.csd( + corrected, transmitted, fs=lab062.MODE.sample_rate_hz, nperseg=8192, + noverlap=4096, return_onesided=False, + ) + transfer = np.conj(cross) / np.maximum(tx_psd, 1e-30) + coherence = abs(cross) ** 2 / np.maximum(tx_psd * rx_psd, 1e-30) + occupied = tx_psd >= np.max(tx_psd) * 0.01 + stable = occupied & (coherence >= 0.5) + gain_db = 20 * np.log10(np.maximum(abs(transfer[stable]), 1e-30)) + return { + "frequency_offset_hz": frequency_hz, + "complex_gain": {"real": float(gain.real), "imag": float(gain.imag)}, + "matched_component_power_code2": matched_power, + "residual_power_code2": residual_power, + "matched_residual_db": float(10 * math.log10(matched_power / residual_power)), + "residual_interpretation": "Contains noise, channel distortion and any TX-underrun effect; not pure noise", + "band_bins": int(np.sum(stable)), + "band_gain_nonuniformity_p95_p05_db": ( + float(np.percentile(gain_db, 95) - np.percentile(gain_db, 5)) if gain_db.size else None + ), + "band_gain_max_min_db": float(np.ptp(gain_db)) if gain_db.size else None, + "median_coherence": float(np.median(coherence[stable])) if np.any(stable) else None, + "tx_psd_threshold_db": -20.0, + "coherence_threshold": 0.5, + } + + +def lab058_quality(tx: lab058.Cs8File, rx: lab058.Cs8File, start: int, + frame_samples: int) -> dict: + """Применить к каждому полному PHY-кадру неизменённую методику Lab058.""" + rows = [] + for index, frame in enumerate(lab062.plans(), 1): + offset = (index - 1) * frame_samples + transmitted = tx.read(offset, frame_samples) + received = rx.read(start + offset, frame_samples) + expected = 2.0 * frame.plan.frame_bits.astype(np.float64) - 1.0 + metrics, _working = lab058.analyze_values(received, expected, lab062.MODE.symbol_rate) + channel, _arrays = lab058.channel_metrics( + transmitted, received, lab062.MODE.symbol_rate, metrics["oracle"]["cfo_hz"] + ) + rows.append({"packet_index": index, "oracle": metrics["oracle"], "channel": channel}) + selected = [row["oracle"]["metrics"] for row in rows] + errors = sum(row["errors"] for row in selected) + symbols = sum(row["symbols"] for row in selected) + matched = float(np.mean([row["matched_component_power"] for row in selected])) + residual = float(np.mean([row["residual_power"] for row in selected])) + ripple = [row["channel"]["amplitude_ripple_p95_p05_db"] for row in rows] + return { + "method": "Lab058 analyze_values/oracle validation tiles, independently per full PHY packet", + "packets": rows, + "symbol_errors": errors, + "symbols": symbols, + "symbol_error_rate": errors / symbols, + "evm_rms": float(math.sqrt(residual / matched)), + "matched_component_power": matched, + "residual_power": residual, + "matched_residual_db": float(10 * math.log10(matched / residual)), + "residual_interpretation": "Contains noise and unmodelled distortion; not pure noise", + "band_gain_nonuniformity_p95_p05_db_median": float(np.median(ripple)), + "band_gain_nonuniformity_p95_p05_db_min": float(np.min(ripple)), + "band_gain_nonuniformity_p95_p05_db_max": float(np.max(ripple)), + } + + +def analyze() -> dict: + capture = json.loads((lab062.RAW / "capture_result.json").read_text(encoding="utf-8")) + legacy = json.loads((lab062.OUTPUT / "legacy_rf_decode.json").read_text(encoding="utf-8")) + t2 = json.loads((lab062.OUTPUT / "t2_rf_decode.json").read_text(encoding="utf-8")) + tx = lab058.Cs8File(lab062.RAW / "tx_stream.cs8") + rx = lab058.Cs8File(lab062.RAW / "rx_stream.cs8") + frame_samples = lab062.phy.frame_waveform_sample_count(lab062.plans()[0].plan, lab062.MODE) + location = locate_burst(tx, rx, frame_samples) + start = location["rx_start_sample"] + legacy_symbols = diagnostic_symbol_rows(rx, start, frame_samples, "legacy") + t2_symbols = diagnostic_symbol_rows(rx, start, frame_samples, "t2") + + packet_rows = [] + for index in range(1, lab062.PACKETS + 1): + nominal = start + (index - 1) * frame_samples + legacy_strict = strict_row(legacy["rows"], nominal) + t2_strict = strict_row(t2["rows"], nominal) + packet_rows.append({ + "packet_index": index, + "nominal_rx_start": nominal, + "legacy": legacy_strict, + "t2": t2_strict, + "diagnostic_legacy": legacy_symbols[index - 1], + "diagnostic_t2": t2_symbols[index - 1], + }) + + rx_log = (lab062.RAW / "rx_stderr.txt").read_text(encoding="utf-8") + tx_process = json.loads((lab062.RAW / "tx_process_result.json").read_text(encoding="utf-8")) + tx_log = (tx_process.get("stdout") or "") + (tx_process.get("stderr") or "") + level = lab062.hardware.receive_level(lab062.RAW / "rx_stream.cs8") + level.pop("symbol_energy_code2_seconds", None) + quality = waveform_quality(tx, rx, start) + comparable_quality = lab058_quality(tx, rx, start, frame_samples) + all_diag = [row for row in t2_symbols if row.get("measurable")] + total_errors = sum(row["symbol_errors"] for row in all_diag) + total_symbols = sum(row["symbols"] for row in all_diag) + rms = math.sqrt(sum(row["symbol_rms_deviation"] ** 2 * row["symbols"] for row in all_diag) / total_symbols) + legacy_set = set(legacy["passed_packet_indexes"]) + t2_set = set(t2["passed_packet_indexes"]) + result = { + "lab": "Lab062", + "status": "RF_SESSION_INVALID_TX_UNDERRUN", + "rf_tx_count": capture["rf_tx_count"], + "automatic_tx_repeats": capture["automatic_tx_repeats"], + "integrity": { + "tx_sha256": lab062.sha256(lab062.RAW / "tx_stream.cs8"), + "rx_sha256": lab062.sha256(lab062.RAW / "rx_stream.cs8"), + "rx_samples": rx.size, + "rx_bytes": (lab062.RAW / "rx_stream.cs8").stat().st_size, + "rx_duration_seconds": rx.size / lab062.MODE.sample_rate_hz, + "rx_overrun_values": counter_values(rx_log, "overrun"), + "tx_underrun_values": counter_values(tx_log, "underrun"), + "rx_overruns_max": max(counter_values(rx_log, "overrun"), default=None), + "tx_underruns_max": max(counter_values(tx_log, "underrun"), default=None), + "rx_clipping": bool(level["saturation_detected"]), + "rx_clipped_samples_fraction": level["clipped_samples_fraction"], + }, + "clock": capture["clock"], + "cleanup_errors": capture["cleanup_errors"], + "location": location, + "legacy": {key: value for key, value in legacy.items() if key != "rows"}, + "t2": {key: value for key, value in t2.items() if key != "rows"}, + "passed_by_both": sorted(legacy_set & t2_set), + "passed_only_by_legacy": sorted(legacy_set - t2_set), + "passed_only_by_t2": sorted(t2_set - legacy_set), + "failed_by_both": sorted(set(range(1, 17)) - legacy_set - t2_set), + "packet_rows": packet_rows, + "diagnostic_symbol_error_rate_t2": total_errors / total_symbols, + "symbol_rms_deviation_t2": rms, + "lab058_quality": comparable_quality, + "waveform_quality": quality, + "lab056_comparison": { + "lab056_B_oracle_symbol_error_rate": 0.03495896, + "lab056_B_oracle_evm_rms": 0.845350, + "scope": "Lab056 used a different PRBS ABAB waveform and method; values are contextual, not identical estimands", + }, + "primary_result": ( + "The sole RF session is invalid as a clean legacy-versus-T2 acceptance test because " + "hackrf_transfer reported one transient TX underrun; both strict modes produced 0/16." + ), + "recommended_next_single_step": ( + "Offline localize the underrun position against packet boundaries before deciding whether a new RF lab is justified." + ), + "rf_tx_now": 0, + "commit": "NOT_PERFORMED", "push": "NOT_PERFORMED", "lab063": "NOT_CREATED", + } + lab062.OUTPUT.mkdir(parents=True, exist_ok=True) + (lab062.OUTPUT / "rf_analysis.json").write_text( + json.dumps(result, ensure_ascii=False, indent=2), encoding="utf-8" + ) + with (lab062.OUTPUT / "packet_comparison.csv").open("w", newline="", encoding="utf-8-sig") as stream: + writer = csv.writer(stream) + writer.writerow([ + "packet_index", "legacy_header", "legacy_fec", "legacy_crc", "legacy_output", + "t2_header", "t2_fec", "t2_crc", "t2_output", "preamble_errors_t2", + "header_errors_t2", "payload_errors_before_fec_t2", "initial_frequency_hz_t2", + "t2_final_frequency_hz", "t2_lock_status", + ]) + for row in packet_rows: + legacy_row, t2_row, diagnostic = row["legacy"], row["t2"], row["diagnostic_t2"] + writer.writerow([ + row["packet_index"], *(legacy_row.get(key) if legacy_row else False for key in ("header", "fec", "crc", "packet_output")), + *(t2_row.get(key) if t2_row else False for key in ("header", "fec", "crc", "packet_output")), + diagnostic.get("preamble_symbol_errors"), diagnostic.get("header_symbol_errors"), + diagnostic.get("payload_symbols_before_fec_errors"), diagnostic.get("initial_frequency_hz"), + diagnostic.get("t2_final_frequency_hz"), diagnostic.get("t2_lock_status"), + ]) + return result + + +def main() -> None: + result = analyze() + concise = {key: result[key] for key in ( + "status", "rf_tx_count", "automatic_tx_repeats", "integrity", "legacy", "t2", + "passed_by_both", "passed_only_by_legacy", "passed_only_by_t2", "failed_by_both", + "diagnostic_symbol_error_rate_t2", "symbol_rms_deviation_t2", "waveform_quality", + "primary_result", "recommended_next_single_step", "rf_tx_now", + )} + print(json.dumps(concise, ensure_ascii=False, indent=2)) + + +if __name__ == "__main__": + main() diff --git a/tests/test_lab062_full_packet_rf_preflight.py b/tests/test_lab062_full_packet_rf_preflight.py new file mode 100644 index 0000000..5a53351 --- /dev/null +++ b/tests/test_lab062_full_packet_rf_preflight.py @@ -0,0 +1,142 @@ +"""Lab062: программные условия и запрет TX до отдельного разрешения.""" + +from __future__ import annotations + +from dataclasses import asdict +from pathlib import Path +import subprocess +import json + +import pytest + +from experiments import lab062_full_packet_rf_preflight as lab +from tools.hackrf_process_check import ProcessCheck, ProcessState + + +def test_fixed_packet_and_operating_point(): + assert len(lab.plans()) == 16 + assert all(len(frame.plan.payload) == 256 for frame in lab.plans()) + assert lab.parameters()["rf_frequency_hz"] == 1_400_000_000 + assert lab.parameters()["symbol_rate"] == 500_000 + assert lab.parameters()["tx_vga_db"] == 10 + assert lab.parameters()["rx_lna_db"] == lab.parameters()["rx_vga_db"] == 24 + assert lab.POINT.distance_m == 1.2 and lab.POINT.visibility == "LOS indoor" + + +def test_rx_and_tx_commands_are_fixed_and_distinct(): + receive = lab.transfer_command("rx.cs8", 800_000) + transmit = lab.transfer_command("tx.cs8", 100, transmit=True) + assert "-r" in receive and "-t" not in receive + assert "-t" in transmit and "-r" not in transmit + assert receive[receive.index("-f") + 1] == "1400000000" + assert receive[receive.index("-l") + 1] == receive[receive.index("-g") + 1] == "24" + assert transmit[transmit.index("-x") + 1] == "10" + + +@pytest.mark.parametrize("failure", [None, "clock", "clipping", "strong", "overrun"]) +def test_preflight_never_transmits_and_fails_closed(tmp_path, monkeypatch, failure): + raw, output = tmp_path / "raw", tmp_path / "processed" + raw.mkdir(); output.mkdir() + monkeypatch.setattr(lab, "RAW", raw); monkeypatch.setattr(lab, "OUTPUT", output) + (raw / "tx_stream.cs8").write_bytes(b"test") + metadata = {"tx_sha256": "TEST"} + (output / "software_gate.json").write_text('{"passed": true, "tx_sha256": "TEST"}') + monkeypatch.setattr(lab, "validate_prepared", lambda: metadata) + monkeypatch.setattr(lab.lab054.phy.lab045, "_verify_device_inventory", lambda runner: {"passed": True}) + def clock(point, runner, guard, **kwargs): + return {"passed": failure != "clock", "master_reg29": 0x26, + "slave_reg29": 0x26, "slave_clkin_status": "DETECTED"} + def runner(command): + assert "-t" not in command + if "-r" in command: + value = 127 if failure == "clipping" else (110 if failure == "strong" else 1) + Path(command[command.index("-r") + 1]).write_bytes(bytes([value, value]) * 800_000) + log = "1 RX overruns" if failure == "overrun" else "0 RX overruns" + return subprocess.CompletedProcess(command, 0, log, "") + monkeypatch.setattr(lab.lab054, "disable_clock_outputs", lambda runner: []) + kwargs = dict(runner=runner, clock_checker=clock, + process_checker=lambda: ProcessCheck(ProcessState.CLEAR, ()), + sleep_function=lambda _: None) + if failure: + with pytest.raises(RuntimeError): + lab.preflight(**kwargs) + else: + assert lab.preflight(**kwargs)["passed"] + result = __import__("json").loads((raw / "preflight_result.json").read_text()) + assert result["rf_tx_count"] == 0 + if failure is None: + assert "symbol_energy_code2_seconds" not in result["rx_level"] + assert result["rx_level"]["symbol_energy"] == "NOT_APPLICABLE_TO_BACKGROUND" + + +def test_second_preflight_is_refused_before_hardware(tmp_path, monkeypatch): + monkeypatch.setattr(lab, "RAW", tmp_path) + monkeypatch.setattr(lab, "OUTPUT", tmp_path) + (tmp_path / "preflight_attempt.json").write_text("{}") + monkeypatch.setattr(lab, "validate_prepared", lambda: {"tx_sha256": "TEST"}) + (tmp_path / "software_gate.json").write_text('{"passed": true, "tx_sha256": "TEST"}') + with pytest.raises(FileExistsError): + lab.preflight(runner=lambda command: pytest.fail("hardware")) + + +def test_capture_refuses_missing_authorization_before_files_or_hardware(tmp_path, monkeypatch): + monkeypatch.setattr(lab, "RAW", tmp_path) + monkeypatch.setattr(lab, "OUTPUT", tmp_path) + with pytest.raises(PermissionError): + lab.capture_once( + authorization=False, + runner=lambda command: pytest.fail("hardware"), + ) + assert not (tmp_path / "hardware_attempt.json").exists() + + +def test_capture_is_rx_first_single_tx_and_refuses_second_attempt(tmp_path, monkeypatch): + raw, output = tmp_path / "raw", tmp_path / "processed" + raw.mkdir(); output.mkdir() + monkeypatch.setattr(lab, "RAW", raw); monkeypatch.setattr(lab, "OUTPUT", output) + tx = raw / "tx_stream.cs8"; tx.write_bytes(b"\x01\x01" * 100) + metadata = {"tx_sha256": lab.sha256(tx), "tx_samples": 100} + monkeypatch.setattr(lab, "validate_prepared", lambda: metadata) + monkeypatch.setattr(lab, "require_preflight", lambda value: {}) + monkeypatch.setattr(lab, "RX_SAMPLES", 800_000) + monkeypatch.setattr(lab.lab054.phy.lab045, "_verify_device_inventory", lambda runner: {"passed": True}) + monkeypatch.setattr(lab.lab054, "disable_clock_outputs", lambda runner: []) + events = [] + + class Process: + def poll(self): return None + def wait(self, timeout): return 0 + def close_logs(self): pass + def terminate(self): pass + + def starter(command, stdout, stderr): + events.append("RX") + Path(command[command.index("-r") + 1]).write_bytes(b"\x01\x01" * 800_000) + Path(stdout).write_text("") + Path(stderr).write_text("0 RX overruns") + return Process() + + def runner(command): + if "-t" in command: + events.append("TX") + return subprocess.CompletedProcess(command, 0, "0 TX underruns", "") + return subprocess.CompletedProcess(command, 0, "", "") + + def clock(point, runner, guard, **kwargs): + guard.tx_allowed = True + return { + "passed": True, "master_reg29": 0x26, "slave_reg29": 0x26, + "slave_clkin_status": "DETECTED", + } + + result = lab.capture_once( + authorization=True, runner=runner, process_starter=starter, + process_checker=lambda: ProcessCheck(ProcessState.CLEAR, ()), + clock_checker=clock, sleep_function=lambda _: None, + ) + assert events == ["RX", "TX"] + assert result["rf_tx_count"] == 1 and result["automatic_tx_repeats"] == 0 + assert result["rx_overruns"] == result["tx_underruns"] == 0 + assert json.loads((raw / "capture_result.json").read_text())["passed"] + with pytest.raises(FileExistsError): + lab.capture_once(authorization=True, runner=lambda command: pytest.fail("hardware"))