Автор Тема: Цифровая АРУ 0...1  (Прочитано 31902 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн GenaSPB

  • Jr. Member
  • **
  • Сообщений: 74
Re: Цифровая АРУ 0...1
« Ответ #45 : Октябрь 11, 2020, 07:48:06 pm »
Кто знает... автонотч lms. Через минут пятнадцать работы начинает превращать звук в какафонию.
На cmsis dsp. Куда бежать?

Оффлайн Relayer

  • Hero Member
  • *****
  • Сообщений: 1006
  • UR5FFR
Re: Цифровая АРУ 0...1
« Ответ #46 : Октябрь 11, 2020, 08:14:25 pm »
C cmsis не работал. У LMS есть коэффициенты отвечающие за скорость адаптации. Может там подкрутить чего?
В любой схеме есть как минимум одна ненужная деталь :)

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: Цифровая АРУ 0...1
« Ответ #47 : Октябрь 11, 2020, 08:43:06 pm »
Кто знает... автонотч lms. Через минут пятнадцать работы начинает превращать звук в какафонию.
На cmsis dsp. Куда бежать?
https://www.keil.com/pack/doc/CMSIS/DSP/html/group__LMS.html
Да да, я знаю, у меня ничего не получится )))

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: Цифровая АРУ 0...1
« Ответ #48 : Октябрь 11, 2020, 09:00:56 pm »
А можно немного подробней о коэффициентах, которы прописаны в 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().
Да да, я знаю, у меня ничего не получится )))

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: Цифровая АРУ 0...1
« Ответ #49 : Октябрь 11, 2020, 09:01:52 pm »
Они как-то похожи на то, что я рассчитал для ФИР фильтра?
Да да, я знаю, у меня ничего не получится )))

Оффлайн Relayer

  • Hero Member
  • *****
  • Сообщений: 1006
  • UR5FFR
Re: Цифровая АРУ 0...1
« Ответ #50 : Октябрь 11, 2020, 09:15:02 pm »
LMS это обычный FIR по структуре. Но его коэффициенты постоянно пересчитываются (адаптируются)
В любой схеме есть как минимум одна ненужная деталь :)

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: Цифровая АРУ 0...1
« Ответ #51 : Октябрь 11, 2020, 09:16:08 pm »
А что в качестве референса использовать? Шум белый?
Да да, я знаю, у меня ничего не получится )))

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: Цифровая АРУ 0...1
« Ответ #52 : Октябрь 11, 2020, 09:22:57 pm »
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   указывает на блок данных об ошибке
[в]   размер блока   количество образцов для обработки
Да да, я знаю, у меня ничего не получится )))

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: Цифровая АРУ 0...1
« Ответ #53 : Ноябрь 02, 2020, 09:24:04 pm »
Решил вернуться к АРУ
Разобрал по косточкам алгоритм Андрея. Не нашел я обработку питчей. Простое плавное изменение множителя в оба направления. При этом ищется пик из всех значений .
                                       
    // 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;                               
                                         
то есть алгоритм реагирует на всплески амплитуды и после срабатывает полная задержка. 

« Последнее редактирование: Ноябрь 02, 2020, 09:46:51 pm от ra0ahc »
Да да, я знаю, у меня ничего не получится )))

Оффлайн Relayer

  • Hero Member
  • *****
  • Сообщений: 1006
  • UR5FFR
Re: Цифровая АРУ 0...1
« Ответ #54 : Ноябрь 03, 2020, 12:30:21 am »
Алгоритм изначально не мой а Янглблуда - я давал ссыль на статьи в QEX. Там на васике но еще проще - возможно имеет смысл оригинал почитать. Сейчас я бы так уже не делал. Мне больше понравилась реализация с удержанием ДД принимаемых сигналов на заданном уровне. В цифре это совсем не сложно получается - делал на ADAU1761, на обычном проце еще проще. Суть в том что АРУ цепляется не за максимальный уровень а за минимальный, тоесть за шум эфира. При этом постоянная времени АРУ достаточно большая - единицы секунд. А после АРУ стоит компрессор который имеет порог +20..+30дб выше чем уровень шума. Итого имеем прозрачный эфир, слабые и громкие станции хорошо различаются. Хлопков нет т.к. АРУ за пички и прочее не цепляется. Постоянная времени срабатывания компрессора берется достаточно маленькая. Дополнительно за компрессором можно поставить жесткий лимитер на всякий пожарный
В любой схеме есть как минимум одна ненужная деталь :)

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: Цифровая АРУ 0...1
« Ответ #55 : Ноябрь 03, 2020, 08:19:26 am »
Интересно , надо покурить. Игорь того же мнения относительно шума и сигнала. Честнее конечно мерить сигнал - шум .
Да да, я знаю, у меня ничего не получится )))

Оффлайн Игорь 2

  • Administrator
  • *****
  • Сообщений: 19666
Re: Цифровая АРУ 0...1
« Ответ #56 : Ноябрь 03, 2020, 10:57:45 am »
Игорь того же мнения относительно шума и сигнала.

Я бы так не сказал - написанное Андреем вообще не укладывается в моей голове - что там за что цепляется - не пойму. Нужна хотя бы блок-схема с подробным описанием.  1yep Зато, явно указано то, что АРУ у него медленная, несколько секунд, а это явно говорит о том, что пока она включится в работу при появлении мощной станции, в работе будут компрессор и лимитер, что само по себе явный ацтой - длительная компрессия на приёме - это же не наши методы и явное искажение динамики.
В последней моей АРУ, напомню, так же можно назвать скоростную ветку компрессором, но она работает при номинальных установках АРУ во временном диапазоне 5...30 мс после всплеска, дальше в работу вступает обычная АРУ, это никак не секунды, поэтому, и субъективно воспринимается нормально - компрессия незаметна, ну, и понятно, что без лимитера подобные устройства вообще делать нельзя, т. к., до момента срабатывания скоростной ветки (те же примерно 5 мс), сигнал на НЧ выходе будет существенно превышать номинальный уровень, а как это скажется на последующем тракте, не всегда можно с точностью предсказать.
Существенным плюсом цифры перед аналогом в этом случае, является возможность работы с предсказанием, т. е., без первого выброса при резком всплеске, неизбежного в моём варианте - ставить нулевое время срабатывания у скоростной АРУ нельзя - при работе в помехах лажа получается.
Но, опять же, этот неизбежный выброс ушами, фактически, не слышен, так что, к цифровизации своей АРУ пока что не стремлюсь... lol22
« Последнее редактирование: Ноябрь 03, 2020, 11:02:09 am от Игорь 2 »
Ничего невозможного нет

Оффлайн Relayer

  • Hero Member
  • *****
  • Сообщений: 1006
  • UR5FFR
Re: Цифровая АРУ 0...1
« Ответ #57 : Ноябрь 03, 2020, 12:09:20 pm »
АРУ у него медленная, несколько секунд, а это явно говорит о том, что пока она включится в работу при появлении мощной станции
Вы ничего не поняли. И даже не пытались. АРУ у меня не цепляется за громкие станции - я об этом писал раз надцать уже. Она отслеживает шумовую дорожку и корректирует усиление тракта так, чтобы шум эфира был на заданное количество дб ниже порога срабаывания компрессора/лимитера

надо покурить
На адау получилось достаточно много блоков т.к. там потокое программирование. На сях да еще если ффт есть будет проще. Ищем минимальную амплитуду бина, усредняем по времени, рассчитываем усиление чтобы привести амплитуду шума к заданному уровню. Дальше я использовал PeakRMS компрессор с минимальным временем срабатывания, а сам сигнал подавал на него с задержкой
В любой схеме есть как минимум одна ненужная деталь :)

Оффлайн Игорь 2

  • Administrator
  • *****
  • Сообщений: 19666
Re: Цифровая АРУ 0...1
« Ответ #58 : Ноябрь 03, 2020, 02:07:01 pm »
И даже не пытались.

Ну почему, я попытался, но не понял.  dontt44
И сейчас тоже пытаюсь, но, опять не понимаю.  1yep dontt44
К примеру, вот, типа, Вы отслеживаете какую-то шумовую дорожку, а, положим, на частоте идёт постоянный радиообмен, ну, и за что там Ваша АРУ будет цепляться, где она эту самую шумовую дорожку возьмёт?  44443
Ничего невозможного нет

Оффлайн ra0ahc

  • Hero Member
  • *****
  • Сообщений: 4872
  • Сергей, RD6AH
Re: Цифровая АРУ 0...1
« Ответ #59 : Ноябрь 03, 2020, 02:09:33 pm »
если ффт есть будет проще
Это есть. Идея пока понятна. В отсутствии станции не поднимать амплитуду до "1" . Я тут подумал, получается 2 ару расчета: первый приводим к  нужному уровню "0.5" шумовую дорожку, второй расчет получается, все что выше шумового уровня идет в прогрессивную компрессию до "1"
Никогда компрессор не использовал на приеме )))
Да да, я знаю, у меня ничего не получится )))