Lab064: measure OTA level linearity at TX VGA 10 dB

This commit is contained in:
LittleSam129
2026-09-15 12:03:48 +03:00
parent 4437917465
commit cff226e0bf
12 changed files with 2831 additions and 0 deletions

View File

@@ -0,0 +1,230 @@
{
"lab": "Lab064",
"stage": "SINGLE_RF_LEVEL_CAPTURE",
"passed": true,
"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": 20000,
"samples_per_symbol": 400,
"digital_carrier_hz": 50000,
"rrc_rolloff": 0.35,
"rrc_span_symbols": 10,
"prbs": "PRBS7 x^7+x^6+1, deterministic initial state",
"full_phy_packet": false,
"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",
"levels_db_relative_nominal": [
-18.0,
-12.0,
-6.0,
0.0
]
},
"tx_sha256": "fa260719659b2984fe29588238415622cd75c6daefec6cc9130ba1bf851bd3f9",
"process_before": {
"state": "CLEAR",
"attempts": [
{
"state": "CLEAR",
"mechanism": "psutil",
"matches": [],
"inspected": 333,
"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": 139.0420999377966,
"elapsed_ms": 139.0420999377966,
"polls": [
{
"query": 1,
"start_ms": 50.13589980080724,
"end_ms": 67.04779993742704,
"raw": "CLKIN status: no clock signal detected",
"state": "NOT_DETECTED",
"exit_code": 0
},
{
"query": 2,
"start_ms": 117.27159982547164,
"end_ms": 139.0420999377966,
"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.9547576904296875,
"mean_q": 1.83575439453125,
"power_code2": 4.8329315185546875,
"ac_power_code2": 0.5513750740792602,
"rms_code": 2.1983929399801774,
"peak_magnitude_code": 4.242640687119285,
"max_abs_i": 3.0,
"max_abs_q": 4.0,
"papr_db": 5.710618637663133,
"clipped_components_fraction": 0.0,
"clipped_samples_fraction": 0.0,
"saturation_detected": false,
"analog_compression": "UNKNOWN_WITHOUT_CALIBRATION"
},
"tx_process": {
"returncode": 0,
"stdout_file": "tx_stdout.txt",
"stderr_file": "tx_stderr.txt"
},
"tx_counter_summary": {
"expected_kind": "underrun",
"observations": [
{
"count": 0,
"role": "UNKNOWN",
"kind": "underrun",
"text": "0 underruns",
"character_offset": 337
},
{
"count": 0,
"role": "UNKNOWN",
"kind": "underrun",
"text": "0 underruns",
"character_offset": 509
}
],
"selected_counts": [
0,
0
],
"final_count": 0,
"maximum_count": 0,
"unparsed_loss_text": false,
"clean": true
},
"rx_samples": 16000000,
"rx_bytes": 32000000,
"rx_duration_seconds": 2.0,
"rx_counter_summary": {
"expected_kind": "overrun",
"observations": [
{
"count": 0,
"role": "UNKNOWN",
"kind": "overrun",
"text": "0 overruns",
"character_offset": 336
},
{
"count": 0,
"role": "UNKNOWN",
"kind": "overrun",
"text": "0 overruns",
"character_offset": 458
},
{
"count": 0,
"role": "UNKNOWN",
"kind": "overrun",
"text": "0 overruns",
"character_offset": 580
},
{
"count": 0,
"role": "UNKNOWN",
"kind": "overrun",
"text": "0 overruns",
"character_offset": 751
}
],
"selected_counts": [
0,
0,
0,
0
],
"final_count": 0,
"maximum_count": 0,
"unparsed_loss_text": false,
"clean": true
},
"rx_sha256": "02015891948aaee52ff81e60fdfeb391bb9b76cd9192b75972b8fedbc8690d86",
"rx_level": {
"samples": 16000000,
"mean_i": 0.9548163125,
"mean_q": 1.83674125,
"power_code2": 5.2568038125,
"ac_power_code2": 0.9715112024323407,
"rms_code": 2.2927720803647276,
"peak_magnitude_code": 8.602325267042627,
"max_abs_i": 7.0,
"max_abs_q": 8.0,
"papr_db": 11.485099505760791,
"clipped_components_fraction": 0.0,
"clipped_samples_fraction": 0.0,
"saturation_detected": false,
"analog_compression": "UNKNOWN_WITHOUT_CALIBRATION"
},
"rx_clipping": false,
"process_after": {
"state": "CLEAR",
"attempts": [
{
"state": "CLEAR",
"mechanism": "psutil",
"matches": [],
"inspected": 333,
"errors": []
}
]
},
"cleanup_errors": []
}

View File

@@ -0,0 +1,164 @@
{
"lab": "Lab064",
"stage": "COMMON_CLOCK_AND_RX_ONLY_PREFLIGHT",
"passed": true,
"rf_tx_count": 0,
"stop_before_tx": true,
"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": 20000,
"samples_per_symbol": 400,
"digital_carrier_hz": 50000,
"rrc_rolloff": 0.35,
"rrc_span_symbols": 10,
"prbs": "PRBS7 x^7+x^6+1, deterministic initial state",
"full_phy_packet": false,
"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",
"levels_db_relative_nominal": [
-18.0,
-12.0,
-6.0,
0.0
]
},
"tx_sha256": "fa260719659b2984fe29588238415622cd75c6daefec6cc9130ba1bf851bd3f9",
"process_before": {
"state": "CLEAR",
"attempts": [
{
"state": "CLEAR",
"mechanism": "psutil",
"matches": [],
"inspected": 329,
"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": 1,
"time_to_detect_ms": 66.79299985989928,
"elapsed_ms": 66.79299985989928,
"polls": [
{
"query": 1,
"start_ms": 50.07890006527305,
"end_ms": 66.79299985989928,
"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.117 sec = 15.6 MiB/second, average power -35.3 dBfs, 9792 bytes free in buffer, 0 overruns, longest 0 bytes\n\nExiting...\nTotal time: 0.11842 s\nhackrf_stop_rx() done\nTransfer statistics:\n1892448 bytes transferred by M0\n1867776 bytes transferred by M4\n0 overruns, longest 0 bytes\nhackrf_close() done\nhackrf_exit() done\nfclose() done\nexit\n"
},
"rx_counter_summary": {
"expected_kind": "overrun",
"observations": [
{
"count": 0,
"role": "UNKNOWN",
"kind": "overrun",
"text": "0 overruns",
"character_offset": 333
},
{
"count": 0,
"role": "UNKNOWN",
"kind": "overrun",
"text": "0 overruns",
"character_offset": 502
}
],
"selected_counts": [
0,
0
],
"final_count": 0,
"maximum_count": 0,
"unparsed_loss_text": false,
"clean": true
},
"rx_level": {
"samples": 800000,
"mean_i": 0.9337375,
"mean_q": 1.80165,
"power_code2": 4.810095,
"ac_power_code2": 0.6922865585937501,
"rms_code": 2.1931928779749397,
"peak_magnitude_code": 5.385164807134504,
"max_abs_i": 4.0,
"max_abs_q": 5.0,
"papr_db": 7.802443440680863,
"clipped_components_fraction": 0.0,
"clipped_samples_fraction": 0.0,
"saturation_detected": false,
"analog_compression": "UNKNOWN_WITHOUT_CALIBRATION",
"symbol_energy": "NOT_APPLICABLE_TO_BACKGROUND",
"ac_rms_code": 0.8320375944593791,
"unexpected_strong_signal": false,
"strong_signal_rule": "AC RMS >= 20.0 code or max |I|/|Q| >= 100.0 code"
},
"rx_sha256": "02d87adcbb621027290a77d5f8fd3190c299d13e89f887cd294d4af352a6ef52",
"rx_overruns": 0,
"process_after": {
"state": "CLEAR",
"attempts": [
{
"state": "CLEAR",
"mechanism": "psutil",
"matches": [],
"inspected": 329,
"errors": []
}
]
},
"cleanup_errors": []
}

View File

@@ -0,0 +1,221 @@
{
"lab": "Lab064",
"stage": "PREPARATION_ONLY",
"rf_tx_count": 0,
"head": "4437917465274257ff0ca5d3c269029da45de3ec",
"parameters": {
"rf_frequency_hz": 1400000000,
"sample_rate_hz": 8000000,
"symbol_rate": 20000,
"samples_per_symbol": 400,
"digital_carrier_hz": 50000,
"rrc_rolloff": 0.35,
"rrc_span_symbols": 10,
"prbs": "PRBS7 x^7+x^6+1, deterministic initial state",
"full_phy_packet": false,
"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",
"levels_db_relative_nominal": [
-18.0,
-12.0,
-6.0,
0.0
]
},
"segments": [
{
"label": "L0",
"level_db": -18.0,
"start_sample": 800000,
"samples": 800000,
"duration_seconds": 0.1,
"analysis_start_sample": 808400,
"analysis_samples": 783200,
"metrics": {
"samples": 800000,
"mean_i": -9.625e-05,
"mean_q": 2.75e-05,
"power_code2": 30.87065625,
"ac_power_code2": 30.870656239979688,
"rms_code": 5.556136809870686,
"peak_magnitude_code": 9.219544457292887,
"max_abs_i": 9.0,
"max_abs_q": 9.0,
"papr_db": 4.398730638796093,
"clipped_components_fraction": 0.0,
"clipped_samples_fraction": 0.0,
"symbol_energy_code2_seconds": 0.0015435328125,
"requested_relative_power_db": -18.0,
"tx_rms_code": 5.556136809870686,
"tx_peak_abs_i_code": 9.0,
"tx_peak_abs_q_code": 9.0,
"tx_peak_magnitude_code": 9.219544457292887,
"digital_clipping": false,
"actual_relative_power_db": -17.97368512020099
}
},
{
"label": "L1",
"level_db": -12.0,
"start_sample": 2000000,
"samples": 800000,
"duration_seconds": 0.1,
"analysis_start_sample": 2008400,
"analysis_samples": 783200,
"metrics": {
"samples": 800000,
"mean_i": -5e-05,
"mean_q": 5e-05,
"power_code2": 122.2567675,
"ac_power_code2": 122.25676749499999,
"rms_code": 11.056978226441435,
"peak_magnitude_code": 17.804493814764857,
"max_abs_i": 17.0,
"max_abs_q": 17.0,
"papr_db": 4.1378635346865025,
"clipped_components_fraction": 0.0,
"clipped_samples_fraction": 0.0,
"symbol_energy_code2_seconds": 0.006112838375,
"requested_relative_power_db": -12.0,
"tx_rms_code": 11.056978226441435,
"tx_peak_abs_i_code": 17.0,
"tx_peak_abs_q_code": 17.0,
"tx_peak_magnitude_code": 17.804493814764857,
"digital_clipping": false,
"actual_relative_power_db": -11.99641465105681
},
"tx_input_difference_from_previous_db": 5.9772704691441785
},
{
"label": "L2",
"level_db": -6.0,
"start_sample": 3200000,
"samples": 800000,
"duration_seconds": 0.1,
"analysis_start_sample": 3208400,
"analysis_samples": 783200,
"metrics": {
"samples": 800000,
"mean_i": 5.625e-05,
"mean_q": 2.625e-05,
"power_code2": 486.5064875,
"ac_power_code2": 486.50648749614686,
"rms_code": 22.05689206347984,
"peak_magnitude_code": 35.12833614050059,
"max_abs_i": 34.0,
"max_abs_q": 35.0,
"papr_db": 4.0422652379446395,
"clipped_components_fraction": 0.0,
"clipped_samples_fraction": 0.0,
"symbol_energy_code2_seconds": 0.024325324375,
"requested_relative_power_db": -6.0,
"tx_rms_code": 22.05689206347984,
"tx_peak_abs_i_code": 34.0,
"tx_peak_abs_q_code": 35.0,
"tx_peak_magnitude_code": 35.12833614050059,
"digital_clipping": false,
"actual_relative_power_db": -5.998257379520232
},
"tx_input_difference_from_previous_db": 5.998157271536577
},
{
"label": "L3",
"level_db": 0.0,
"start_sample": 4400000,
"samples": 800000,
"duration_seconds": 0.1,
"analysis_start_sample": 4408400,
"analysis_samples": 783200,
"metrics": {
"samples": 800000,
"mean_i": 8.25e-05,
"mean_q": 0.00011125,
"power_code2": 1936.04021375,
"ac_power_code2": 1936.0402137308172,
"rms_code": 44.00045697205883,
"peak_magnitude_code": 69.6419413859206,
"max_abs_i": 69.0,
"max_abs_q": 69.0,
"papr_db": 3.9882736474748155,
"clipped_components_fraction": 0.0,
"clipped_samples_fraction": 0.0,
"symbol_energy_code2_seconds": 0.0968020106875,
"requested_relative_power_db": 0.0,
"tx_rms_code": 44.00045697205883,
"tx_peak_abs_i_code": 69.0,
"tx_peak_abs_q_code": 69.0,
"tx_peak_magnitude_code": 69.6419413859206,
"digital_clipping": false,
"actual_relative_power_db": 0.0
},
"tx_input_difference_from_previous_db": 5.998257379520232
}
],
"leading_zero_samples": 800000,
"gap_samples": 400000,
"trailing_zero_samples": 800000,
"tx_samples": 6000000,
"tx_bytes": 12000000,
"tx_duration_seconds": 0.75,
"tx_sha256": "fa260719659b2984fe29588238415622cd75c6daefec6cc9130ba1bf851bd3f9",
"rx_samples": 16000000,
"rx_duration_seconds": 2.0,
"rx_lead_seconds": 0.5,
"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\\lab064\\tx_level_staircase.cs8",
"-f",
"1400000000",
"-s",
"8000000",
"-n",
"6000000",
"-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\\lab064\\rx_stream.cs8",
"-f",
"1400000000",
"-s",
"8000000",
"-n",
"16000000",
"-l",
"24",
"-g",
"24",
"-a",
"0",
"-p",
"0",
"-B"
]
}

View File

@@ -0,0 +1,425 @@
{
"lab": "Lab064",
"stage": "OFFLINE_RF_LEVEL_LINEARITY_ANALYSIS",
"packet_receiver_used": false,
"location": {
"start_sample": 4123520,
"correlation": 0.0888256100450642,
"coarse_cfo_hz": 0.0,
"stride": 32
},
"rows": [
{
"label": "L0",
"level_db": -18.0,
"rx_start_sample": 4923521,
"alignment_adjustment_samples": 1,
"full_iq": {
"samples": 800000,
"mean_i": 0.94972375,
"mean_q": 1.8355175,
"power_code2": 5.18564125,
"ac_power_code2": 0.9145415558796861,
"rms_code": 2.2772003095907043,
"peak_magnitude_code": 7.0710678118654755,
"max_abs_i": 6.0,
"max_abs_q": 7.0,
"papr_db": 9.841675359702911,
"clipped_components_fraction": 0.0,
"clipped_samples_fraction": 0.0,
"symbol_energy_code2_seconds": 0.00025928206249999997,
"ac_rms_code": 0.9563166608815754
},
"background_label": "INITIAL_GUARD",
"background": {
"samples": 160000,
"mean_i": 0.940225,
"mean_q": 1.8409875,
"power_code2": 4.7947875,
"ac_power_code2": 0.5215294742187488,
"rms_code": 2.189700321961889,
"peak_magnitude_code": 4.242640687119285,
"max_abs_i": 3.0,
"max_abs_q": 4.0,
"papr_db": 5.7450314065030845,
"clipped_components_fraction": 0.0,
"clipped_samples_fraction": 0.0,
"symbol_energy_code2_seconds": 0.000239739375,
"ac_rms_code": 0.7221699759881665
},
"background_window_start_sample": 4443520,
"matched_signal_power": 0.0007507510158784873,
"matched_signal_amplitude_rms": 0.027399836055686307,
"residual_power": 1.2137948040249413,
"residual_to_matched_amplitude_ratio": 40.209129659782626,
"matched_to_residual_db": -32.08649345507262,
"complex_gain_h": {
"real": 0.0018760642981310563,
"imag": -0.0045080629571906915,
"phase_rad_at_active_start": -1.1764391150184978
},
"gain_abs": 0.00488285253481168,
"gain_power_abs_h_squared": 2.384224887671685e-05,
"cfo_hz": 0.0957717781274782,
"residual_spectrum": {
"residual_band_h1_power_code2": 0.0029441230361582733,
"residual_band_h2_power_code2": 0.002517548539085255,
"residual_band_h3_power_code2": 0.0017878979213816356,
"interpretation": "Diagnostic residual bands at 50/100/150 kHz; not calibrated RF harmonic power"
}
},
{
"label": "L1",
"level_db": -12.0,
"rx_start_sample": 6123541,
"alignment_adjustment_samples": 21,
"full_iq": {
"samples": 800000,
"mean_i": 0.9560375,
"mean_q": 1.8325725,
"power_code2": 5.2504775,
"ac_power_code2": 0.9781478308375009,
"rms_code": 2.2913920441513276,
"peak_magnitude_code": 7.211102550927978,
"max_abs_i": 6.0,
"max_abs_q": 7.0,
"papr_db": 9.958045419078847,
"clipped_components_fraction": 0.0,
"clipped_samples_fraction": 0.0,
"symbol_energy_code2_seconds": 0.000262523875,
"ac_rms_code": 0.9890135645366553
},
"background_label": "GAP_L0_L1",
"background": {
"samples": 160000,
"mean_i": 0.95144375,
"mean_q": 1.8329875,
"power_code2": 4.78826875,
"ac_power_code2": 0.5231803654296865,
"rms_code": 2.1882113129220406,
"peak_magnitude_code": 4.242640687119285,
"max_abs_i": 3.0,
"max_abs_q": 4.0,
"papr_db": 5.7509398714368505,
"clipped_components_fraction": 0.0,
"clipped_samples_fraction": 0.0,
"symbol_energy_code2_seconds": 0.00023941343750000002,
"ac_rms_code": 0.7233120802459243
},
"background_window_start_sample": 5883520,
"matched_signal_power": 0.0029612351609719875,
"matched_signal_amplitude_rms": 0.054417232206094304,
"residual_power": 1.0695946032022712,
"residual_to_matched_amplitude_ratio": 19.005231005856622,
"matched_to_residual_db": -25.577463055166668,
"complex_gain_h": {
"real": 0.004471119012843702,
"imag": -0.001937685853593986,
"phase_rad_at_active_start": -0.40894566669212534
},
"gain_abs": 0.0048729387123409105,
"gain_power_abs_h_squared": 2.374553169423069e-05,
"cfo_hz": -0.16857111258676097,
"residual_spectrum": {
"residual_band_h1_power_code2": 0.0037442904303572424,
"residual_band_h2_power_code2": 0.0029946268848091966,
"residual_band_h3_power_code2": 0.0022268690579244723,
"interpretation": "Diagnostic residual bands at 50/100/150 kHz; not calibrated RF harmonic power"
}
},
{
"label": "L2",
"level_db": -6.0,
"rx_start_sample": 7323533,
"alignment_adjustment_samples": 13,
"full_iq": {
"samples": 800000,
"mean_i": 0.9631825,
"mean_q": 1.84173875,
"power_code2": 5.17589875,
"ac_power_code2": 0.856176598442187,
"rms_code": 2.275060164039624,
"peak_magnitude_code": 7.280109889280518,
"max_abs_i": 6.0,
"max_abs_q": 7.0,
"papr_db": 10.102900974475599,
"clipped_components_fraction": 0.0,
"clipped_samples_fraction": 0.0,
"symbol_energy_code2_seconds": 0.0002587949375,
"ac_rms_code": 0.925298113281437
},
"background_label": "GAP_L1_L2",
"background": {
"samples": 160000,
"mean_i": 0.9560375,
"mean_q": 1.8575625,
"power_code2": 4.88045,
"ac_power_code2": 0.5159038571874985,
"rms_code": 2.209174053803819,
"peak_magnitude_code": 4.242640687119285,
"max_abs_i": 3.0,
"max_abs_q": 4.0,
"papr_db": 5.668126373000443,
"clipped_components_fraction": 0.0,
"clipped_samples_fraction": 0.0,
"symbol_energy_code2_seconds": 0.0002440225,
"ac_rms_code": 0.7182644757939087
},
"background_window_start_sample": 7083520,
"matched_signal_power": 0.011333436190702588,
"matched_signal_amplitude_rms": 0.10645861257175292,
"residual_power": 0.5290886880136152,
"residual_to_matched_amplitude_ratio": 6.832559719073439,
"matched_to_residual_db": -16.691668725481204,
"complex_gain_h": {
"real": 0.0032772531007889995,
"imag": -0.003478187284280655,
"phase_rad_at_active_start": -0.8151334504253348
},
"gain_abs": 0.00477893028523777,
"gain_power_abs_h_squared": 2.283817467116275e-05,
"cfo_hz": 0.006742170898886185,
"residual_spectrum": {
"residual_band_h1_power_code2": 0.004466260208758569,
"residual_band_h2_power_code2": 0.0030543665029441423,
"residual_band_h3_power_code2": 0.0020345488796523733,
"interpretation": "Diagnostic residual bands at 50/100/150 kHz; not calibrated RF harmonic power"
}
},
{
"label": "L3",
"level_db": 0.0,
"rx_start_sample": 8523534,
"alignment_adjustment_samples": 14,
"full_iq": {
"samples": 800000,
"mean_i": 0.9575575,
"mean_q": 1.8561875,
"power_code2": 5.48103,
"ac_power_code2": 1.1186815990375,
"rms_code": 2.3411599689043037,
"peak_magnitude_code": 7.280109889280518,
"max_abs_i": 6.0,
"max_abs_q": 7.0,
"papr_db": 9.85413690444334,
"clipped_components_fraction": 0.0,
"clipped_samples_fraction": 0.0,
"symbol_energy_code2_seconds": 0.0002740515,
"ac_rms_code": 1.0576774551050523
},
"background_label": "GAP_L2_L3",
"background": {
"samples": 160000,
"mean_i": 0.97165,
"mean_q": 1.8424125,
"power_code2": 4.8607875,
"ac_power_code2": 0.5221999573437506,
"rms_code": 2.204719369897221,
"peak_magnitude_code": 4.47213595499958,
"max_abs_i": 3.0,
"max_abs_q": 4.0,
"papr_db": 6.14323360311441,
"clipped_components_fraction": 0.0,
"clipped_samples_fraction": 0.0,
"symbol_energy_code2_seconds": 0.00024303937499999998,
"ac_rms_code": 0.7226340410911671
},
"background_window_start_sample": 8283520,
"matched_signal_power": 0.0453318643989967,
"matched_signal_amplitude_rms": 0.21291280938214285,
"residual_power": 0.740861773845582,
"residual_to_matched_amplitude_ratio": 4.042656143280289,
"matched_to_residual_db": -12.133336061267785,
"complex_gain_h": {
"real": 0.003384387504328541,
"imag": -0.003391322182689881,
"phase_rad_at_active_start": -0.7864216245934512
},
"gain_abs": 0.004791152776343041,
"gain_power_abs_h_squared": 2.295514492625963e-05,
"cfo_hz": -0.07606695286129402,
"residual_spectrum": {
"residual_band_h1_power_code2": 0.009576142863317505,
"residual_band_h2_power_code2": 0.004468597337512337,
"residual_band_h3_power_code2": 0.002725169628283891,
"interpretation": "Diagnostic residual bands at 50/100/150 kHz; not calibrated RF harmonic power"
}
}
],
"background_windows": [
{
"label": "INITIAL_GUARD",
"tx_relative_start_sample": 320000,
"samples": 160000,
"duration_seconds": 0.02,
"rx_start_sample": 4443520,
"metrics": {
"samples": 160000,
"mean_i": 0.940225,
"mean_q": 1.8409875,
"power_code2": 4.7947875,
"ac_power_code2": 0.5215294742187488,
"rms_code": 2.189700321961889,
"peak_magnitude_code": 4.242640687119285,
"max_abs_i": 3.0,
"max_abs_q": 4.0,
"papr_db": 5.7450314065030845,
"clipped_components_fraction": 0.0,
"clipped_samples_fraction": 0.0,
"symbol_energy_code2_seconds": 0.000239739375,
"ac_rms_code": 0.7221699759881665
}
},
{
"label": "GAP_L0_L1",
"tx_relative_start_sample": 1760000,
"samples": 160000,
"duration_seconds": 0.02,
"rx_start_sample": 5883520,
"metrics": {
"samples": 160000,
"mean_i": 0.95144375,
"mean_q": 1.8329875,
"power_code2": 4.78826875,
"ac_power_code2": 0.5231803654296865,
"rms_code": 2.1882113129220406,
"peak_magnitude_code": 4.242640687119285,
"max_abs_i": 3.0,
"max_abs_q": 4.0,
"papr_db": 5.7509398714368505,
"clipped_components_fraction": 0.0,
"clipped_samples_fraction": 0.0,
"symbol_energy_code2_seconds": 0.00023941343750000002,
"ac_rms_code": 0.7233120802459243
}
},
{
"label": "GAP_L1_L2",
"tx_relative_start_sample": 2960000,
"samples": 160000,
"duration_seconds": 0.02,
"rx_start_sample": 7083520,
"metrics": {
"samples": 160000,
"mean_i": 0.9560375,
"mean_q": 1.8575625,
"power_code2": 4.88045,
"ac_power_code2": 0.5159038571874985,
"rms_code": 2.209174053803819,
"peak_magnitude_code": 4.242640687119285,
"max_abs_i": 3.0,
"max_abs_q": 4.0,
"papr_db": 5.668126373000443,
"clipped_components_fraction": 0.0,
"clipped_samples_fraction": 0.0,
"symbol_energy_code2_seconds": 0.0002440225,
"ac_rms_code": 0.7182644757939087
}
},
{
"label": "GAP_L2_L3",
"tx_relative_start_sample": 4160000,
"samples": 160000,
"duration_seconds": 0.02,
"rx_start_sample": 8283520,
"metrics": {
"samples": 160000,
"mean_i": 0.97165,
"mean_q": 1.8424125,
"power_code2": 4.8607875,
"ac_power_code2": 0.5221999573437506,
"rms_code": 2.204719369897221,
"peak_magnitude_code": 4.47213595499958,
"max_abs_i": 3.0,
"max_abs_q": 4.0,
"papr_db": 6.14323360311441,
"clipped_components_fraction": 0.0,
"clipped_samples_fraction": 0.0,
"symbol_energy_code2_seconds": 0.00024303937499999998,
"ac_rms_code": 0.7226340410911671
}
},
{
"label": "FINAL_GUARD",
"tx_relative_start_sample": 5440000,
"samples": 160000,
"duration_seconds": 0.02,
"rx_start_sample": 9563520,
"metrics": {
"samples": 160000,
"mean_i": 0.958375,
"mean_q": 1.83606875,
"power_code2": 4.81993125,
"ac_power_code2": 0.5303001546484385,
"rms_code": 2.195434182570728,
"peak_magnitude_code": 4.47213595499958,
"max_abs_i": 3.0,
"max_abs_q": 4.0,
"papr_db": 6.179891520223454,
"clipped_components_fraction": 0.0,
"clipped_samples_fraction": 0.0,
"symbol_energy_code2_seconds": 0.0002409965625,
"ac_rms_code": 0.7282171068084288
}
}
],
"background_summary": {
"ac_power_min_code2": 0.5159038571874985,
"ac_power_max_code2": 0.5303001546484385,
"ac_rms_min_code": 0.7182644757939087,
"ac_rms_max_code": 0.7282171068084288,
"maximum_to_minimum_ac_power_db": 0.11952978854087751,
"stability_rule_db": 3.0,
"stable": true
},
"comparisons": [
{
"comparison": "L1/L0",
"tx_input_difference_db": 5.9772704691441785,
"rx_matched_power_difference_db": 5.959769689089129,
"linearity_error_db": -0.01750078005504907,
"tx_amplitude_ratio": 1.9900478704552953,
"rx_matched_amplitude_ratio": 1.9860422557090833
},
{
"comparison": "L2/L1",
"tx_input_difference_db": 5.998157271536577,
"rx_matched_power_difference_db": 5.828887063637578,
"linearity_error_db": -0.16927020789899938,
"tx_amplitude_ratio": 1.9948390610676463,
"rx_matched_amplitude_ratio": 1.9563400830193338
},
{
"comparison": "L3/L2",
"tx_input_difference_db": 5.998257379520232,
"rx_matched_power_difference_db": 6.020419771848732,
"linearity_error_db": 0.022162392328500147,
"tx_amplitude_ratio": 1.9948620524335567,
"rx_matched_amplitude_ratio": 1.9999585213327857
}
],
"total_comparison": {
"comparison": "L3/L0",
"tx_digital_power_difference_db": 17.97368512020099,
"rx_matched_power_difference_db": 17.80907652457544,
"total_linearity_error_db": -0.16460859562555186,
"tx_amplitude_ratio": 7.9192536969014835,
"rx_matched_amplitude_ratio": 7.770586982689514
},
"classification": {
"case": "LINEAR_BUT_WEAK",
"rules_fixed_before_rf": {
"linear_max_abs_error_db": 1.0,
"compression_upper_step_error_at_most_db": -1.5,
"weak_l3_matched_to_residual_below_db": 3.0,
"healthy_l3_matched_to_residual_at_least_db": 6.0
}
},
"capture_valid": true,
"capture_invalid_reasons": [],
"tx_underruns_maximum": 0,
"tx_underruns_final": 0,
"rx_overruns_maximum": 0,
"rx_overruns_final": 0,
"rx_clipping": false
}

View File

@@ -0,0 +1,39 @@
{
"lab": "Lab064",
"stage": "SOFTWARE_LINEARITY_GATE",
"rf_tx_count": 0,
"channel_model": "known linear complex gain plus DC and deterministic Gaussian noise",
"rows": [
{
"label": "L0",
"matched_signal_power": 4.310961695783257,
"residual_power": 0.0018007645625517528,
"gain_abs": 0.37000937351312335
},
{
"label": "L1",
"matched_signal_power": 17.072568748673206,
"residual_power": 0.0017975392617719525,
"gain_abs": 0.3700018841553234
},
{
"label": "L2",
"matched_signal_power": 67.93699349861977,
"residual_power": 0.0017977879292746589,
"gain_abs": 0.37000113388875977
},
{
"label": "L3",
"matched_signal_power": 270.35275600931345,
"residual_power": 0.001803678589230678,
"gain_abs": 0.3700016234349186
}
],
"linearity_errors_db": [
-2.3407130973929213e-05,
-8.27380804224731e-05,
-1.2603446491787906e-05
],
"passed": true,
"tx_sha256": "fa260719659b2984fe29588238415622cd75c6daefec6cc9130ba1bf851bd3f9"
}