Форум Радиолюбителей

Цифровая АРУ 0...1

243433 просмотров, 284 ответов — стр. 4 из 19

GenaSPB
Сообщений: 74
11 октября 2020 г. в 07:48#46
Кто знает... автонотч lms. Через минут пятнадцать работы начинает превращать звук в какафонию.
На cmsis dsp. Куда бежать?
Relayer
Сообщений: 1006
11 октября 2020 г. в 08:14#47
C cmsis не работал. У LMS есть коэффициенты отвечающие за скорость адаптации. Может там подкрутить чего?
ra0ahcra0ahc
Сообщений: 4868
11 октября 2020 г. в 08:43#48
Кто знает... автонотч lms. Через минут пятнадцать работы начинает превращать звук в какафонию.
На cmsis dsp. Куда бежать?
https://www.keil.com/pack/doc/CMSIS/DSP/html/group__LMS.html
ra0ahcra0ahc
Сообщений: 4868
11 октября 2020 г. в 09:00#49
А можно немного подробней о коэффициентах, которы прописаны в LMS фильтре

void arm_lms_init_f32 ( arm_lms_instance_f32 * S,
uint16_t numTaps,
float32_t * pCoeffs,
float32_t * pState,
float32_t mu,
uint32_t blockSize
)
Parameters
[in] S points to an instance of the floating-point LMS filter structure
[in] numTaps number of filter coefficients
[in] pCoeffs points to coefficient buffer
[in] pState points to state buffer
[in] mu step size that controls filter coefficient updates
[in] blockSize number of samples to process
Returns
none
Details
pCoeffs points to the array of filter coefficients stored in time reversed order:
{b[numTaps-1], b[numTaps-2], b[N-2], ..., b[1], b[0]}
The initial filter coefficients serve as a starting point for the adaptive filter. pState points to an array of length numTaps+blockSize-1 samples, where blockSize is the number of input samples processed by each call to arm_lms_f32().
ra0ahcra0ahc
Сообщений: 4868
11 октября 2020 г. в 09:01#50
Они как-то похожи на то, что я рассчитал для ФИР фильтра?
Relayer
Сообщений: 1006
11 октября 2020 г. в 09:15#51
LMS это обычный FIR по структуре. Но его коэффициенты постоянно пересчитываются (адаптируются)
ra0ahcra0ahc
Сообщений: 4868
11 октября 2020 г. в 09:16#52
А что в качестве референса использовать? Шум белый?
ra0ahcra0ahc
Сообщений: 4868
11 октября 2020 г. в 09:22#53
void arm_lms_norm_f32 ( arm_lms_norm_instance_f32 * S ,
const float32_t * pSrc ,
float32_t * pRef ,
float32_t * pOut ,
float32_t * pErr ,
uint32_t размер блока
)
Параметры
[в] S указывает на экземпляр структуры нормализованного фильтра LMS с плавающей запятой
[в] pSrc указывает на блок входных данных
[в] pRef указывает на блок справочных данных
[вне] pOut указывает на блок выходных данных
[вне] pErr указывает на блок данных об ошибке
[в] размер блока количество образцов для обработки
ra0ahcra0ahc
Сообщений: 4868
2 ноября 2020 г. в 09:24#54
Решил вернуться к АРУ
Разобрал по косточкам алгоритм Андрея. Не нашел я обработку питчей. Простое плавное изменение множителя в оба направления. При этом ищется пик из всех значений .

// Find peak gain reduction (Min)
Gain:=1e+6;
for j:=AGCHang-1 downto 0 do begin
if Gb[j] < Gain then Gain:=Gb[j];
end;

то есть алгоритм реагирует на всплески амплитуды и после срабатывает полная задержка.

Relayer
Сообщений: 1006
3 ноября 2020 г. в 12:30#55
Алгоритм изначально не мой а Янглблуда - я давал ссыль на статьи в QEX. Там на васике но еще проще - возможно имеет смысл оригинал почитать. Сейчас я бы так уже не делал. Мне больше понравилась реализация с удержанием ДД принимаемых сигналов на заданном уровне. В цифре это совсем не сложно получается - делал на ADAU1761, на обычном проце еще проще. Суть в том что АРУ цепляется не за максимальный уровень а за минимальный, тоесть за шум эфира. При этом постоянная времени АРУ достаточно большая - единицы секунд. А после АРУ стоит компрессор который имеет порог +20..+30дб выше чем уровень шума. Итого имеем прозрачный эфир, слабые и громкие станции хорошо различаются. Хлопков нет т.к. АРУ за пички и прочее не цепляется. Постоянная времени срабатывания компрессора берется достаточно маленькая. Дополнительно за компрессором можно поставить жесткий лимитер на всякий пожарный
ra0ahcra0ahc
Сообщений: 4868
3 ноября 2020 г. в 08:19#56
Интересно , надо покурить. Игорь того же мнения относительно шума и сигнала. Честнее конечно мерить сигнал - шум .
Игорь 2
Сообщений: 21288
3 ноября 2020 г. в 10:57#57
Игорь того же мнения относительно шума и сигнала.

Я бы так не сказал - написанное Андреем вообще не укладывается в моей голове - что там за что цепляется - не пойму. Нужна хотя бы блок-схема с подробным описанием. Зато, явно указано то, что АРУ у него медленная, несколько секунд, а это явно говорит о том, что пока она включится в работу при появлении мощной станции, в работе будут компрессор и лимитер, что само по себе явный ацтой - длительная компрессия на приёме - это же не наши методы и явное искажение динамики.
В последней моей АРУ, напомню, так же можно назвать скоростную ветку компрессором, но она работает при номинальных установках АРУ во временном диапазоне 5...30 мс после всплеска, дальше в работу вступает обычная АРУ, это никак не секунды, поэтому, и субъективно воспринимается нормально - компрессия незаметна, ну, и понятно, что без лимитера подобные устройства вообще делать нельзя, т. к., до момента срабатывания скоростной ветки (те же примерно 5 мс), сигнал на НЧ выходе будет существенно превышать номинальный уровень, а как это скажется на последующем тракте, не всегда можно с точностью предсказать.
Существенным плюсом цифры перед аналогом в этом случае, является возможность работы с предсказанием, т. е., без первого выброса при резком всплеске, неизбежного в моём варианте - ставить нулевое время срабатывания у скоростной АРУ нельзя - при работе в помехах лажа получается.
Но, опять же, этот неизбежный выброс ушами, фактически, не слышен, так что, к цифровизации своей АРУ пока что не стремлюсь...
Relayer
Сообщений: 1006
3 ноября 2020 г. в 12:09#58
Цитата: Игорь
АРУ у него медленная, несколько секунд, а это явно говорит о том, что пока она включится в работу при появлении мощной станции

Вы ничего не поняли. И даже не пытались. АРУ у меня не цепляется за громкие станции - я об этом писал раз надцать уже. Она отслеживает шумовую дорожку и корректирует усиление тракта так, чтобы шум эфира был на заданное количество дб ниже порога срабаывания компрессора/лимитера

Цитата: ra0ahc
надо покурить

На адау получилось достаточно много блоков т.к. там потокое программирование. На сях да еще если ффт есть будет проще. Ищем минимальную амплитуду бина, усредняем по времени, рассчитываем усиление чтобы привести амплитуду шума к заданному уровню. Дальше я использовал PeakRMS компрессор с минимальным временем срабатывания, а сам сигнал подавал на него с задержкой
Игорь 2
Сообщений: 21288
3 ноября 2020 г. в 02:07#59
И даже не пытались.

Ну почему, я попытался, но не понял.
И сейчас тоже пытаюсь, но, опять не понимаю.
К примеру, вот, типа, Вы отслеживаете какую-то шумовую дорожку, а, положим, на частоте идёт постоянный радиообмен, ну, и за что там Ваша АРУ будет цепляться, где она эту самую шумовую дорожку возьмёт?
ra0ahcra0ahc
Сообщений: 4868
3 ноября 2020 г. в 02:09#60
если ффт есть будет проще
Это есть. Идея пока понятна. В отсутствии станции не поднимать амплитуду до "1" . Я тут подумал, получается 2 ару расчета: первый приводим к нужному уровню "0.5" шумовую дорожку, второй расчет получается, все что выше шумового уровня идет в прогрессивную компрессию до "1"
Никогда компрессор не использовал на приеме )))