mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 17:27:32 +00:00
feature(settings): вкладка Calibration — детектор мощности/КСВ, V/A, S-метр
Паритет с Thetis-Enhanced (Det. Cal. / Volts&Amps правки): - TCalibration в TGlobalSettings (JSON cal_*): модель детектора Alex-моста, per-band множитель FWD/REV 0.5..2.0, множитель напряжения, Voff/Sens датчика тока, офсет S-метра. - AlexDetToWatts: константы Thetis computeAlexFwdPower/computeRefPower по моделям (ANAN-100 / 200D / 7000DLE-Anvelina Pro 3 / 8000DLE-Orion MkII, 6m-спецкейс REV). Дефолт = прежняя формула ANAN-100 (поведение не меняется). - OnHPStatus: FWD и REV через модельную формулу x множитель банда; КСВ = (1+p)/(1-p), p=sqrt(RevW/FwdW) (Thetis) вместо отношения сырых ADC; напряжение x SupplyVoltCal; ток с калибруемыми Voff/Sens. - WDSPEngine.SMeterCalDB: офсет в GetSMeterDBm/GetSliceSMeter (главный S-метр, slice-флаги, web). - Выбор модели в комбо подставляет модельные дефолты датчика тока (Anvelina Pro 3/7000DLE: 340 мВ / 88 мВ/А — Thetis GetDefaultVoltCalibration). - Фиксы: гард FLoading при постройке вкладки (SetItemIndex стреляет OnChange на программном присвоении -> AV на nil-контролах), FPageCalib/FNavCalib в списках SelectPage (вкладка была невидимой). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+6
-2
@@ -451,6 +451,7 @@ type
|
||||
FTXMode: Integer; // may differ from RX when a slice is TX source
|
||||
FRawFMDeviation: Double;
|
||||
FSMeter: Double;
|
||||
FSMeterCalDB: Double; // калибровочный офсет S-метра, дБ (вкладка Calibration)
|
||||
FFilterLow: Integer;
|
||||
FFilterHigh: Integer;
|
||||
FAGCMode: TWDSPAGCMode;
|
||||
@@ -743,6 +744,8 @@ type
|
||||
property SNBEnabled: Boolean read FSNBEnabled;
|
||||
property LastError: string read FLastError;
|
||||
property SMeter: Double read FSMeter;
|
||||
// Офсет S-метра из вкладки Calibration; применяется в GetSMeterDBm/GetSliceSMeter
|
||||
property SMeterCalDB: Double read FSMeterCalDB write FSMeterCalDB;
|
||||
property FFTSize: Integer read FFFTSize;
|
||||
property WindowType: Integer read FWindowType;
|
||||
property SpecDetector: Integer read FSpecDetector;
|
||||
@@ -1245,6 +1248,7 @@ begin
|
||||
FAGCTop := -90.0;
|
||||
FVolume := 0.7;
|
||||
FSMeter := -130.0;
|
||||
FSMeterCalDB := 0.0;
|
||||
FNRMode := NR_MODE_OFF;
|
||||
FNBMode := NB_MODE_OFF;
|
||||
FSNBEnabled := False;
|
||||
@@ -2827,7 +2831,7 @@ begin
|
||||
FSliceLock.Enter;
|
||||
try
|
||||
idx := FindSliceIdx(Id);
|
||||
if idx >= 0 then Result := FSlices[idx].SMeter;
|
||||
if idx >= 0 then Result := FSlices[idx].SMeter + FSMeterCalDB;
|
||||
finally
|
||||
FSliceLock.Leave;
|
||||
end;
|
||||
@@ -3880,7 +3884,7 @@ function TWDSPEngine.GetSMeterDBm: Double;
|
||||
begin
|
||||
// НЕ вызываем GetRXAMeter здесь повторно — значение уже обновлено
|
||||
// в DSP-колбэке. Повторный вызов сбрасывает аккумулятор WDSP → 0.
|
||||
Result := FSMeter;
|
||||
Result := FSMeter + FSMeterCalDB;
|
||||
end;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user