mirror of
https://git.vladimir.cc/vladimir/ewsdr.git
synced 2026-08-25 20:37:33 +00:00
feat(tx): заводской профиль FM — плотная модуляция с компрессией
Шестой заводской профиль: компрессор 8 дБ + своя кривая EQ. Для FM компрессия работает иначе, чем для SSB: девиация ограничена жёстко, громкость даёт средний уровень, а не пики. По цепи TXA (wdsp/TXA.c:xtxa) eqp → leveler → bp0 → compressor → ALC идут ДО xfmmod, то есть профиль на FM-звук влияет целиком. Кривая намеренно не задирает верх: предыскажение (xemphp) по умолчанию стоит вторым вариантом — после ALC, прямо перед модулятором, — поэтому компрессор его не удержит и лишний буст ушёл бы в перемодуляцию на свистящих. Снизу срез бубнения, лёгкий подъём разборчивости 1.4..2.3 кГц, спад к 3.4 кГц. Крайние узлы 200 и 3400 взяты с запасом вокруг AF-полосы модулятора 300..3000, чтобы обрыв EQ не попал внутрь неё (проверено расчётом по формуле eq.c). Полоса 300/3000 в профиле для самого FM косметическая — края bp0 движок считает по Карсону; она сыграет, только если привязать профиль к голосовому режиму. Девиация, AF-срез и позиция предыскажения остаются свойствами аппарата (вкладка Hardware) и профилем не переключаются. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1934,6 +1934,15 @@ const
|
||||
ESSB50_F: array[1..10] of Double = (100, 180, 300, 550, 950, 1600, 2400, 3300, 4200, 5100);
|
||||
ESSB50_G: array[1..10] of Double = ( -5, -3, -1, 0, 0, 1, 2, 3.5, 5, 5);
|
||||
ESSB50_PRE = -3.0;
|
||||
// FM: узлы охватывают AF-полосу модулятора (штатно 300..3000, вкладка
|
||||
// Hardware), крайние с запасом — за ними EQ обрывает АЧХ. Верх НЕ поднимаем:
|
||||
// предыскажение (pre-emphasis) само задирает его 6 дБ/окт и по умолчанию
|
||||
// стоит ПОСЛЕ динамики (xemphp вторым, сразу перед xfmmod), то есть
|
||||
// компрессор его уже не удержит — лишний буст ушёл бы в перемодуляцию на
|
||||
// свистящих. Снизу режем бубнение, лёгкий подъём разборчивости 1.4..2.3 кГц.
|
||||
FM_F: array[1..10] of Double = (200, 300, 450, 700, 1000, 1400, 1800, 2300, 2800, 3400);
|
||||
FM_G: array[1..10] of Double = ( -8, -4, -1, 0, 0, 1, 2, 2, 1, -2);
|
||||
FM_PRE = -1.0;
|
||||
|
||||
// Тембр у заводского профиля — заводской: EQ выключен, все усиления и
|
||||
// преамп в нуле, сетка узлов штатная. Наследовать сюда живой EQ нельзя —
|
||||
@@ -2018,6 +2027,13 @@ begin
|
||||
Add('SSB Wide', 200, 3100, False, 5.0);
|
||||
AddEQ('ESSB 3.5k', 100, 3500, False, 5.0, ESSB35_F, ESSB35_G, ESSB35_PRE);
|
||||
AddEQ('ESSB 5k', 100, 5000, False, 5.0, ESSB50_F, ESSB50_G, ESSB50_PRE);
|
||||
// FM: плотная модуляция за счёт компрессора — девиация ограничена жёстко,
|
||||
// поэтому громкость даёт средний уровень, а не пики. Полоса 300..3000 здесь
|
||||
// косметическая: в FM края bp0 считает сам движок по Карсону (девиация +
|
||||
// AF-срез), профильные значения работают, только если привязать этот профиль
|
||||
// к голосовому режиму. Девиация и AF-срез — свойства аппарата (вкладка
|
||||
// Hardware), профилем не переключаются.
|
||||
AddEQ('FM', 300, 3000, True, 8.0, FM_F, FM_G, FM_PRE);
|
||||
end;
|
||||
|
||||
function TSettingsManager.LoadTXProfiles(const MAC: array of Byte;
|
||||
|
||||
Reference in New Issue
Block a user