# Hardware Test Configuration audio: sample_rate: 44100 channels: 2 device_name: "Scarlett" # Will auto-detect Focusrite Scarlett test_tones: frequencies: [100, 250, 500, 1000, 2000, 4000, 8000] # Hz duration: 10.0 # seconds per frequency amplitude: 0.5 # 0.0 to 1.0 latency_runs: 5 # Number of latency measurements to average output: results_dir: "test_results" save_plots: true save_raw_audio: false artifact_detection: test_frequency: 1000 # Hz - Test tone frequency (for sine wave mode) duration: 60.0 # seconds - Recording duration amplitude: 0.5 # 0.0 to 1.0 startup_delay: 0 # seconds - Wait before starting recording to let system settle # Chirp signal parameters (used when --signal-type chirp is specified) chirp_f0: 100 # Hz - Chirp start frequency chirp_f1: 8000 # Hz - Chirp end frequency # NOTE: All detectors skip the first and last 1 second of recording to avoid startup/shutdown transients detectors: spectral_anomaly: enabled: false # DISABLED - generates too many false positives, needs better algorithm threshold_db: -60 # Detect unexpected frequencies above noise floor + this threshold (more negative = less sensitive) amplitude_spikes: enabled: true threshold_factor: 10.0 # MAD-based outlier detection on envelope (detects clicks, pops, dropouts). Lower = more sensitive. zero_crossing: enabled: false threshold_factor: 2.0 # Number of standard deviations for zero-crossing anomalies (detects distortion) energy_variation: enabled: true threshold_db: 6.0 # Energy change threshold in dB between consecutive windows (detects level changes) null_test: enabled: true # Align Ch2 (DUT) to Ch1 (Loopback), subtract, detect bursts in residual max_lag_ms: 500.0 # Maximum expected delay between channels for alignment search window_ms: 5.0 # Short-time RMS window length for burst detection threshold_factor: 6.0 # Flag windows where residual RMS exceeds baseline × this factor min_burst_ms: 0.5 # Minimum burst duration to report (filters out single-sample spikes) sample_slip_detection: true sample_slip_window_ms: 50.0 # Correlation window for xcorr-based lag tracking (fallback only) # Sync marker: one chirp burst at the start and one at the end of the played signal. # Marker-based alignment is immune to periodic-signal ambiguity (e.g. pure sine). # Sample slip detection compares the lag at the start marker vs. the end marker. marker_duration_sec: 0.05 # Length of each chirp marker burst marker_first_offset_sec: 0.5 # Offset from signal start (and from signal end) for markers marker_f0: 200.0 # Marker chirp start frequency (Hz) marker_f1: 16000.0 # Marker chirp end frequency (Hz) — wider BW = sharper correlation peak marker_amplitude: 0.7 # Marker amplitude (mixed on top of test tone) # Sample slip threshold: only report if inter-marker lag deviates from median by >= this many samples. # Rule of thumb: peak timing precision ≈ 1 / (marker_f1 - marker_f0) * sample_rate # With 200-16000 Hz BW at 44100 Hz: precision ≈ 3 samples → min_slip_samples = 5 gives good margin. min_slip_samples: 5 latency: max_std_dev_ms: 1.0 # Maximum allowed std deviation; test fails if exceeded min_avg_ms: 1.0 # Minimum expected average latency; near-zero indicates bad loopback latency_buildup: measurement_interval: 10 # seconds between latency measurements max_duration: null # maximum test duration in seconds (null = run until canceled) buildup_threshold_percent: 5.0 # percentage change threshold for buildup detection