diff --git a/MainForm.pas b/MainForm.pas index 1a30a16..6eb0151 100644 --- a/MainForm.pas +++ b/MainForm.pas @@ -4352,7 +4352,12 @@ begin FMode := N; for i := 0 to MODE_COUNT - 1 do StyleButton(BtnMode[i], i = FMode); if FWDSPReady then + begin FDSPEngine.SetMode(N); + // Если TUN активен — пересчитываем знак частоты под новый режим + if FTuning then + FDSPEngine.SetTXTone(True, FTXSettings.TUNFreq, 1.0); + end; UpdateFilterButtons; // обновляем подписи и дефолт фильтра под новый режим ApplyModeFilter; SyncSpecViewFreq; // FSpecView.Mode/FilterBW — иначе полоса рисуется под старый режим diff --git a/WDSPEngine.pas b/WDSPEngine.pas index 2f81cd6..8b4ef40 100644 --- a/WDSPEngine.pas +++ b/WDSPEngine.pas @@ -1595,12 +1595,21 @@ begin end; procedure TWDSPEngine.SetTXTone(Enabled: Boolean; FreqHz, Mag: Double); +var + SignedFreq: Double; begin if not FInitialized then Exit; if Enabled then begin + // gen1 (PostGen) стоит после всех модуляторов и бандпасса. + // Положительная частота даёт тон ВЫШЕ несущей (USB-сторона). + // Для LSB и CWL нужен тон НИЖЕ несущей — инвертируем знак. + if (FMode = MODE_LSB) or (FMode = MODE_CWL) then + SignedFreq := -Abs(FreqHz) + else + SignedFreq := Abs(FreqHz); SetTXAPostGenMode(TXA_CHAN, 0); // 0 = tone - SetTXAPostGenToneFreq(TXA_CHAN, FreqHz); + SetTXAPostGenToneFreq(TXA_CHAN, SignedFreq); SetTXAPostGenToneMag(TXA_CHAN, Max(0.0, Min(1.0, Mag))); SetTXAPostGenRun(TXA_CHAN, 1); end else