From 37eb8065d6ca3c30c1c2179961015ee793071870 Mon Sep 17 00:00:00 2001 From: Vladimir Date: Mon, 22 Jun 2026 10:45:52 +0300 Subject: [PATCH] chore: remove QO-100 beacon decoder debug instrumentation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After successful on-air validation, drop the temporary diagnostics: - IQ baseband dump to ~/ewsdr_beacon_iq.f32 (FDbgStream/DbgWrite2). - BeaconLog file logger (~/ewsdr_beacon.log) and per-second STATE / AIM lines. - Dead Gardner timing fields (FMidI/FMidQ/FHalf/FPrevI/FPrevQ), superseded by the ML signal×slope TED. Co-Authored-By: Claude Opus 4.8 --- BeaconDecoder.pas | 36 ++------------------------------ RadioController.pas | 51 --------------------------------------------- 2 files changed, 2 insertions(+), 85 deletions(-) diff --git a/BeaconDecoder.pas b/BeaconDecoder.pas index 3524e06..658d778 100644 --- a/BeaconDecoder.pas +++ b/BeaconDecoder.pas @@ -96,11 +96,8 @@ type FHistPos: Integer; FNtaps: Integer; - // --- Gardner timing --- - FMuAcc: Double; // обратный отсчёт до следующего полу-символьного строба - FHalf: Boolean; // текущий строб = середина (true) или центр символа - FMidI, FMidQ: Double; // отсчёт середины (для Gardner) - FPrevI, FPrevQ: Double; // прошлый центр символа + // --- ML signal×slope symbol timing --- + FMuAcc: Double; // обратный отсчёт до следующего строба чипа FYd0I, FYd0Q: Double; // линия задержки RRC-выхода (новейший) FYd1I, FYd1Q: Double; // предыдущий FYd2I, FYd2Q: Double; // −2 (для ML-TED центр/early/late + задержка «late») @@ -171,10 +168,6 @@ type FLastFrame: TBeaconFrame; FLastRSErr: Integer; - // --- ВРЕМЕННЫЙ ДЕБАГ: дамп сырого baseband 9600 Гц (I,Q float32) --- - FDbgStream: TFileStream; - FDbgLeft: Integer; - // --- констелляция (кольцо) --- FRingI, FRingQ: array[0..BCN_SCOPE_PTS-1] of Single; FRingPos: Integer; @@ -187,7 +180,6 @@ type procedure ProcessDecimated(const xi, xq: Double); procedure ProcessSymbol(const zi, zq: Double); procedure ProcessChip(const ci, cq: Double); // Manchester + дифф-декод → FEC - procedure DbgWrite2(const a, b: Double); // ВРЕМЕННЫЙ дамп I,Q float32 procedure FECFrame(const Frame: TBeaconFrame; RSErrors: Integer); procedure ResetDSP; public @@ -217,8 +209,6 @@ begin FLock := TCriticalSection.Create; FFEC := TBeaconFEC.Create; FFEC.OnFrame := FECFrame; - FDbgStream := nil; - FDbgLeft := 336000; // ВРЕМЕННЫЙ: ~35 c @ 9600 (2-3 кадра маяка) для оффлайн FFs := 0; FEnabled := False; FConstScale := 1.0; @@ -227,7 +217,6 @@ end; destructor TBeaconDecoder.Destroy; begin - if FDbgStream <> nil then FreeAndNil(FDbgStream); FFEC.Free; FLock.Free; inherited Destroy; @@ -426,8 +415,6 @@ begin for i := 0 to High(FHistI) do begin FHistI[i] := 0; FHistQ[i] := 0; end; FHistPos := 0; FMuAcc := FSps / 2.0; - FHalf := False; - FMidI := 0; FMidQ := 0; FPrevI := 0; FPrevQ := 0; FYd0I := 0; FYd0Q := 0; FYd1I := 0; FYd1Q := 0; FYd2I := 0; FYd2Q := 0; FYd3I := 0; FYd3Q := 0; FWsym := 0; FTimErrEMA := 0; @@ -578,17 +565,6 @@ begin // Диагностика тракта (lock-независимо): RMS децимированного сигнала на входе RRC. FDecRMS := FDecRMS + 0.001 * (Sqrt(ri * ri + ii * ii) - FDecRMS); - // ВРЕМЕННЫЙ ДЕБАГ: дамп сырого baseband (после сноса частоты, до RRC) в файл - // для оффлайн-анализа тайминга чипов и Manchester-структуры. - if (FDbgLeft > 0) and FFreqLocked then - begin - if FDbgStream = nil then - FDbgStream := TFileStream.Create(GetEnvironmentVariable('HOME') + '/ewsdr_beacon_iq.f32', fmCreate); - DbgWrite2(ri, ii); - Dec(FDbgLeft); - if FDbgLeft = 0 then FreeAndNil(FDbgStream); - end; - // Буфер для грубой carrier-acquisition: кладём сигнал ПОСЛЕ главного NCO, но // ДО остаточного — тогда squaring-FFT меряет АБСОЛЮТНЫЙ остаток (не зависит от // FResidDf) → коррекция = прямое присвоение, без накопления и runaway. @@ -781,14 +757,6 @@ begin Inc(FChipCount); end; -procedure TBeaconDecoder.DbgWrite2(const a, b: Double); -var fa, fb: Single; -begin - fa := a; fb := b; - FDbgStream.WriteBuffer(fa, 4); - FDbgStream.WriteBuffer(fb, 4); -end; - procedure TBeaconDecoder.FECFrame(const Frame: TBeaconFrame; RSErrors: Integer); // Колбэк из TBeaconFEC (DSP-поток). Сохраняем кадр под CS для UI. begin diff --git a/RadioController.pas b/RadioController.pas index 4faba7f..4a83cf7 100644 --- a/RadioController.pas +++ b/RadioController.pas @@ -202,8 +202,6 @@ type FBeaconDecHz: Double; // АБСОЛЮТНАЯ display-частота наведения декодера // (узкий фильтр, ставится кликом); 0 = центр/DC FBeaconDecInvert: Boolean; // зеркальный baseband (QO-100/LNB) — деф. True - FBeaconLogTick: Integer; // троттл периодического лога состояния декодера - FBeaconLogScope: TBeaconScope; // буфер снимка для лога (не аллоцируем в контуре) // ---- Аудио / TX ---- FVolume: Integer; @@ -485,7 +483,6 @@ type // QO-100 beacon lock — стабилизация дрейфа LNB по опорному маяку. procedure SetBeaconLock(On_: Boolean); procedure ServiceBeaconLock; // одна итерация контура (MeterTimer @10 Гц) - procedure BeaconLog(const Msg: string); // диагностика декодера → HOME/ewsdr_beacon.log procedure SetBeaconRefHz(Hz: Double); // опорная частота маяка (downlink) procedure BeaconSeedAtHz(DisplayHz: Double); // пользователь указал маяк кликом function BeaconState: TBeaconState; @@ -1252,29 +1249,6 @@ begin FBeaconDec.SetOffsetHz(FBeaconDecHz - FCenterFreq) // наведённый узкий фильтр else FBeaconDec.SetOffsetHz(0); // иначе — центр/DC - - // Периодический снимок состояния (раз в ~1с при @10Гц-таймере) в лог-файл. - Inc(FBeaconLogTick); - if FBeaconLogTick >= 10 then - begin - FBeaconLogTick := 0; - GetBeaconScope(FBeaconLogScope); - BeaconLog(Format( - 'STATE decHz=%.1f center=%.1f off=%.1f | Fs=%.0f Fdec=%.0f sps=%.1f | ' + - 'resid=%.1f prom=%.1f snr=%.1f baud=%.1f decRMS=%.5f symMag=%.5f ' + - 'timErr=%.5f wsym=%.4f carHz=%.1f hold=%d | CAR=%d SYM=%d invert=%d lockOn=%d locked=%d ' + - '| manPh=%d m0=%.5f m1=%.5f frames=%d rsErr=%d', - [FBeaconDecHz, FCenterFreq, FBeaconLogScope.OffsetHz, - FBeaconLogScope.FsHz, FBeaconLogScope.FdecHz, FBeaconLogScope.Sps, - FBeaconLogScope.ResidHz, FBeaconLogScope.CarProm, FBeaconLogScope.SNRdB, - FBeaconLogScope.SymRate, FBeaconLogScope.DecRMS, FBeaconLogScope.SymMag, - FBeaconLogScope.TimErr, FBeaconLogScope.Wsym, FBeaconLogScope.CarFreqHz, - FBeaconLogScope.LockHold, - Ord(FBeaconLogScope.CarrierLock), Ord(FBeaconLogScope.SymbolLock), - Ord(FBeaconDecInvert), Ord(FBeaconLockOn), Ord(FBeaconLocked), - FBeaconLogScope.ManPhase, FBeaconLogScope.ManM0, FBeaconLogScope.ManM1, - FBeaconLogScope.Frames, FBeaconLogScope.LastRSErr])); - end; end; if not FBeaconLockOn then Exit; @@ -1417,34 +1391,9 @@ begin FBeaconDec.SetOffsetHz(FBeaconDecHz - FCenterFreq); FBeaconDec.Reseed; end; - BeaconLog(Format('AIM click: DisplayHz=%.1f CenterFreq=%.1f -> offset=%.1f invert=%d span=%.0f', - [DisplayHz, FCenterFreq, FBeaconDecHz - FCenterFreq, Ord(FBeaconDecInvert), FSpanHz])); Changed(rfBeaconLock); end; -procedure TRadioController.BeaconLog(const Msg: string); -// Диагностика декодера маяка: дописываем строку в HOME/ewsdr_beacon.log. -// Дёшево и кросс-платформенно; файл потом скидывается на разбор. -var - f: TextFile; - path, home: string; -begin - home := GetEnvironmentVariable('HOME'); - if home = '' then home := GetTempDir; - path := IncludeTrailingPathDelimiter(home) + 'ewsdr_beacon.log'; - try - AssignFile(f, path); - if FileExists(path) then Append(f) else Rewrite(f); - try - WriteLn(f, FormatDateTime('hh:nn:ss.zzz', Now), ' ', Msg); - finally - CloseFile(f); - end; - except - // лог не должен ронять контур — глотаем ошибки I/O - end; -end; - function TRadioController.BeaconDecodeEnabled: Boolean; begin Result := FBeaconDecOn;