Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: АРУ
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
uriy
Нужен алогоритм АРУ или может даже исходник у кого-нибудь есть. Также не помешает почитать про аналоговые АРУ. Ничего толкового в нете найти не удалось. Буду рад если ткнете пальцем в книгу.
dtsar
В прошлом году делал АРУ. есть несколько алгоритмов. если еще нужно, могу поискать, даже исходники выслать. только на С.
uriy
dtsar
Да конечно, если не сложно поищите пожалуйста. А то что на С, это приветствуется.
Yura_K
Цитата(dtsar @ Nov 15 2007, 20:26) *
В прошлом году делал АРУ. есть несколько алгоритмов. если еще нужно, могу поискать, даже исходники выслать. только на С.

Уважаемый dtsar, если Вас не затруднит, вышлите исходники на yuramail@k66.ru. Заранее спасибо.
Stanislav
Братцы, а что такое "алгоритм АРУ"? 07.gif
rezident
Цитата(Stanislav @ Nov 16 2007, 01:39) *
Братцы, а что такое "алгоритм АРУ"? 07.gif

Видимо это алгоритм по которому нужно крутить ручку "громкость".
Код
while(1)
{ if (volume<MOI_LUBIMIY_UROVEN_GROMKOSTI) volume++;
  else
     if (volume>MOI_SOSED_UZHE_STUCHIT_PO_BATAREE) volume--;
     else lovim_kaif();
}
uriy
Цитата
Братцы, а что такое "алгоритм АРУ"?

По крайне мере в моем понимании есть несколько видов АРУ.
- с прямым регулированием;
- с обратным регулированем;
- АРУ с садержкой;
- АРУ без задержки;

rezident
в вашем случае когда сосед не стучит по батарее, выполняется вот это
if (volume<MOI_LUBIMIY_UROVEN_GROMKOSTI) volume++;
т.е. громкость будет возрастать и стремится к бесконечности. Это же не есть гуд, когда по батарее никто не стучит. Значит надо предусмотреть минимальный уровень громкости, который еще не надо усиливать.
У АРУ есть еще один неприятный момент: если мы негромко говорим в микрофон, а затем повышаем голос, то на выходе АРУ будет всплеск, т.к. коэффициент усиления АРУ еще не успел адаптироваться. И в противном случае когда с громкого голоса понижаем его, будет провал, т.к. коэффициент усиления еще был мал. Чтобы уменьшить длительность этих всплесков нужно уменьшать интервал усреднения энергии сигнала. Но если уменьшить интервал до одного сэмпла модуляция исчезнет напрочь, АРУ просто сгладит входной сигнал.
Именно от этих всплексок я не могу избавится, АРУ пока валяю в Simulink.
Stanislav
Цитата(urasinov @ Nov 16 2007, 08:10) *
По крайне мере в моем понимании есть несколько видов АРУ.
- с прямым регулированием;
- с обратным регулированем;
- АРУ с садержкой;
- АРУ без задержки;
Понятно. С натяжкой, принять можно. Правда, вместо слова "алгоритм"
лучше использовать выражение "способ реализации".
Не мешало бы выложить сюда условия Вашей задачи. Тогда можно было бы посоветовать что-то конкретное.

Цитата(urasinov @ Nov 16 2007, 08:10) *
У АРУ есть еще один неприятный момент: если мы негромко говорим в микрофон, а затем повышаем голос, то на выходе АРУ будет всплеск, т.к. коэффициент усиления АРУ еще не успел адаптироваться. И в противном случае когда с громкого голоса понижаем его, будет провал, т.к. коэффициент усиления еще был мал. Чтобы уменьшить длительность этих всплесков нужно уменьшать интервал усреднения энергии сигнала. Но если уменьшить интервал до одного сэмпла модуляция исчезнет напрочь, АРУ просто сгладит входной сигнал.
Именно от этих всплексок я не могу избавится, АРУ пока валяю в Simulink.
В ряде случаев для сжатия динамического диапазона речевого сигнала допустимо использование (динамического) амплитудного ограничения.
uriy
Да вы правы возможно амплитудного ограничителя будет достаточно. Не вижу необходимости усиливать слабый сигнал, требуется подавлять сильный.
Так вот.
Дано:
Электретный микрофон, с номинальным выходным напряжением 12 мВ, кодек со встроенным операционником и процессор.
Коэффициент усиления ОУ 22 дебила (или в 13 раз если память не подводит). Максимальное напряжение с микрофона может достигать 60 мВ. Когда напряжение с микрофона возрастает до 20-30 мВ и выше его требуется поддерживать на этом же уровне.
rezident
Цитата(urasinov @ Nov 16 2007, 10:10) *
в вашем случае когда сосед не стучит по батарее, выполняется вот это
if (volume<MOI_LUBIMIY_UROVEN_GROMKOSTI) volume++;
т.е. громкость будет возрастать и стремится к бесконечности. Это же не есть гуд, когда по батарее никто не стучит. Значит надо предусмотреть минимальный уровень громкости, который еще не надо усиливать.

Гы, не-а smile.gif Это типичный алгоритм подростка-меломана. Врубает громкость на полную (его любимую). Когда соседи начинают бренчать по батарее уменьшает громкость до приемлимой. Затем через непродолжительное время забывает про соседей и опять начинает увеличивать громкость. А вообще, конечно в приведенном алгоритме работа от конкретных значений MOI_LUBIMIY_UROVEN_GROMKOSTI и MOI_SOSED_UZHE_STUCHIT_PO_BATAREE зависит. Если они перекрываются (и реакция соседа тоже постоянно присутствует), то уровень между ними изменяется. Если же соседа нет дома, то уровень достигает значения MOI_LUBIMIY_UROVEN_GROMKOSTI и на этом изменение его прекращается.
Stanislav
Цитата(urasinov @ Nov 16 2007, 16:55) *
Да вы правы возможно амплитудного ограничителя будет достаточно. Не вижу необходимости усиливать слабый сигнал, требуется подавлять сильный.
К этому вопросу нужно подходить осторожно.
Например, если после оцифровки предполагается "сжимать" речь средне- низкоскоростным вокодером, амплитудный ограничитель и даже достаточно быстродействующая АРУ способны его "развалить" (появятся крайне неприятные призвуки, или даже неустойчивость анализатора). Поэтому, не мешало бы выяснить, что Вы собираетесь делать с сигналом после оцифровки.

Цитата(urasinov @ Nov 16 2007, 16:55) *
...Электретный микрофон, с номинальным выходным напряжением 12 мВ, кодек со встроенным операционником и процессор.
Коэффициент усиления ОУ 22 дебила (или в 13 раз если память не подводит). Максимальное напряжение с микрофона может достигать 60 мВ. Когда напряжение с микрофона возрастает до 20-30 мВ и выше его требуется поддерживать на этом же уровне.
Я бы всё-таки попытался уменьшить усиление ОУ или, на худой конец, уровень сигнала с микрофона в 2-3 раза (последнее можно сделать, уменьшив номинал резистора нагрузки соответственно). "Быстрые" АРУ и ограничители существенно ухудшают качество исходного сигнала, а динамического диапазона современных 16-битных кодеков более чем достаточно для поддержания приемлемого отношения С/Ш даже при низких уровнях сигнала с электретного микрофона без АРУ.
Какой именно кодек Вы юзаете, тоже интересно было бы знать.
В крайнем случае, можно сделать пороговую АРУ, где к-т усиления начинает плавно уменьшаться, начиная с какого-то определённого уровня входного сигнала. Но искажений при этом не избежать, и я этот способ всё-таки не рекомендую Вам брать на вооружение...

ЗЫ. При работе с аудиокодеками я всегда использовал внешний усилитель микрофонного сигнала, а на встроенном усилителе выставлял Ку ~= 2 для нормального уровня (а не 1, чтобы компенсировать избыточную чувствительность некоторых экземпляров микрофонов программно).
Alechin
не забывайте еще про такие параметры как время срабатывания (единицы мсек - что довольно жесткое ограничение) и время отпускания (до десятков секунд). Я видел в некоторых требованиях к АРУ даже параметры на вид графика функции "отпускания".
uriy
Цитата
что Вы собираетесь делать с сигналом после оцифровки.
Именно то что вы написали, дальше сигнал поступает на вокодер.
Кодек AD73322 16-битный, отношение S/N 78 db итого 12 эффективных разрядов.
У этого кодека имеется ОУ на входе ноги которого выведены наружу. Тут резисторами выставлен коэффициент усиления 6 db. Кроме этого в кодеке имеется PGA (ОУ с программируемым коэффициентом усиления) 0...38db, на нем выставлено 18 db. Такой большой коэффициент усиления, потомучто на выходе кодека требуется амплитуда 0,5 В.
Stanislav
Цитата(urasinov @ Nov 19 2007, 08:16) *
Именно то что вы написали, дальше сигнал поступает на вокодер.
Тогда о всяческих АРУ и ограничителях лучше забыть.
Какой вокодер применять думаете, кстати?

Цитата(urasinov @ Nov 19 2007, 08:16) *
...Кодек AD73322 16-битный, отношение S/N 78 db итого 12 эффективных разрядов.
Ближе к 13, по-моему. smile.gif
Вообще-то, этот кодек - отстой. Если есть возможность, стоит подумать о его замене на более приличный.
Кстати, оцифровку на нём нужно делать с передискретизацией и последующим прореживанием: цифровой ФНЧ там тоже паршивый.

Цитата(urasinov @ Nov 19 2007, 08:16) *
...У этого кодека имеется ОУ на входе ноги которого выведены наружу. Тут резисторами выставлен коэффициент усиления 6 db. Кроме этого в кодеке имеется PGA (ОУ с программируемым коэффициентом усиления) 0...38db, на нем выставлено 18 db.
Ну, так уменьшите просто - и все дела. smile.gif

Цитата(urasinov @ Nov 19 2007, 08:16) *
...Такой большой коэффициент усиления, потомучто на выходе кодека требуется амплитуда 0,5 В.
А это ещё как? 07.gif
uriy
Цитата
Какой вокодер применять думаете, кстати?
Это мне не известно, проект ведем вдвоем. Я в большей части занимаюсь железом.
Цитата
Вообще-то, этот кодек - отстой. Если есть возможность, стоит подумать о его замене на более приличный.
Тоже думал об этом, даже заводил тему на форуме, из предложенных наиболее удачным показался TLV320AIC23B, и стоит он в дв раза дешевле.
Цитата
Кстати, оцифровку на нём нужно делать с передискретизацией и последующим прореживанием
Так и делаем.
Коэффициенты усиления уменьшить не могу, т.к. при номинальном входном сигнале 10 мВ, на выходе платы должно быть 0,5В. А получить такую амплитуду очень просто, кодек имеет встроенные ОУ как на входе, так и на выходе. Плата уже имеется и работает. Места ставить на нее дополнительные операционики нет, ее размер 20х30 мм.
uriy
нашел pdf Automatic Gain Control (AGC) Algorithm User’s Guide
от некой компании SPIRIT CORP (www.spiritDSP.com/CST).
Здесь описана библиотека для работы с АРУ, но нет исходника. На указанном сайте AGC найти не удалось, есть другие вещи, которые вроде как должны прийти на почтовый ящик при заказе. Уже сутки прошли так ничего и нет на ящике. Также говорится о неком CST Frameworks может кто знает где его можно скачать бесплатно. Я нашел только платные ссылки.
Stanislav
Цитата(urasinov @ Nov 21 2007, 08:07) *
Коэффициенты усиления уменьшить не могу, т.к. при номинальном входном сигнале 10 мВ, на выходе платы должно быть 0,5В.
А получить такую амплитуду очень просто, кодек имеет встроенные ОУ как на входе, так и на выходе. Плата уже имеется и работает. Места ставить на нее дополнительные операционики нет, ее размер 20х30 мм.
Не понял.
Какое отношение имеет усиление входного тракта АЦП к "выходному напряжению платы"? 07.gif
uriy
Под входом, имеется ввиду вход кодека (вход АЦП), под выходом - выход кодека (выход ЦАП).
Edmundo
Цитата(urasinov @ Nov 23 2007, 08:41) *
нашел pdf Automatic Gain Control (AGC) Algorithm User’s Guide
от некой компании SPIRIT CORP (www.spiritDSP.com/CST).
Здесь описана библиотека для работы с АРУ, но нет исходника. Также говорится о неком CST Frameworks может кто знает где его можно скачать бесплатно. Я нашел только платные ссылки.

Как вы, наверное, поняли, суть CST (client-side telephony) в том, что есть камень C54CST с зашитыми в ROM функциями, типичными для применений телефонии. Плюс к этому можно докупить расширенные библиотеки (продвинутые кодеки и т.п.). Таким образом искать у SPIRIT'а исходники -- имхо бессмысленно.
А вот Framework вроде раньше качался (по-моему SDK назывался), а сейчас действительно не видно. Как-то давно я ходил на их семинар по CST -- понравилось, довольно красиво они все сделали в этой технологии.
Попробую поискать у себя, может быть найду -- но версия будет старая, уж сколько лет прошло smile.gif
И исходников алгоритмов там, естественно, нет, и годится он для программирования только камней C54CST.

[+]:
Да, забавно, на странице
http://www.spiritdsp.com/products/components/cst/cst_newsletter.shtml
ссылки битые... А вообще качать надо бы оттуда.
Stanislav
Цитата(urasinov @ Dec 1 2007, 10:09) *
Под входом, имеется ввиду вход кодека (вход АЦП), под выходом - выход кодека (выход ЦАП).
И что, нельзя уменьшить усиление входного тракта и увеличить выходного? 07.gif
uriy
Цитата
... что есть камень C54CST с зашитыми в ROM функциями
Этого я не заметил, буду знать.
Цитата
А вот Framework вроде раньше качался
Да нашел какой-то на сайте focus.ti.com, только почему-то не поддерживается докачка, весит 60 мегабайт. Несколько раз пытался закачать так и не удалось закачать полностью.
Цитата
И что, нельзя уменьшить усиление входного тракта и увеличить выходного?
Попробовать можно, но жалко терять эффективные биты.
Edmundo
Цитата(urasinov @ Dec 1 2007, 16:28) *
Да нашел какой-то на сайте focus.ti.com, только почему-то не поддерживается докачка, весит 60 мегабайт.

Вы, наверное, нашли собственно Reference Framework? Это составная часть концепции ExpressDSP (этих RF 3 штуки: RF1, RF3, RF5), но к вашей теме, к сожалению, имеет малое отношение. Это просто остов ЦОС-программы, написанной в соответствии с этой концепцией. Если вас интересует, я нашел у себя на диске файл ЦСТ2СДК_V2_27_инсталл.ехе (как ни странно это тоже самое, на что ссылается сейчас SPIRIT, мало что изменилось за столько веков smile.gif). Выложил на ФТП: уплоад \ ДСП \ ЦСТ \
(что-то сервачок работает не ахти, если бито, обращайтесь smile.gif)
Stanislav
Цитата(urasinov @ Dec 1 2007, 16:28) *
...Попробовать можно, но жалко терять эффективные биты.
Что значит "терять"?
Речевой сигнал, в случае слитного произношения, может иметь пик-фактор более 3 у женщин и более 5 у мужчин. Поэтому, Вы должны смириться с тем, что:
- либо будет клиппироваться (ограничиваться) входной сигнал;
- либо будет клиппироваться (ограничиваться) выходной сигнал;
- либо средний уровень выходного сигнала кодека будет значительно меньше максимального.
Четвёртого не дано. Никакая АРУ не в силах изменить положение вещей.
Для вокодера (особенно низкоскоростного) первый случай является неприемлемым.
zilog
"Идеального" АРУ увы, не бывает. Везде где можно отказаться от него - следует отказаться, особенно если после него идет какая-нибудь более-менее сложная цифровая обработка, например подавление шума, аккустического эха, или вокодер.
Отказаться можно в случае, если параметры аккустической системы (в нее входит и источник звука) примерно постоянны, чего в жизни бывает редко, но бывает smile.gif
По моему опыту, алгоритм АРУ весьма зависит от требований последующего алгоритма обработки, например, как заметил Stanislav, вокодеры плохо "дружат" с клиппированными сигналами,
Тупо повышать усиление при малом сигнале тоже не годится - АРУ будет "вытягивать" шум в паузах речи. И после того, как человек заговорит, сигнал будет слишком сильный. Для решения этой проблемы в АРУ используется детектор речи, и регулировка производится только при его активном сигнале. В телефонах некоторую проблему представляет также "дыхание в трубку" smile.gif

АРУ, который "прошит" в CST - достаточно сложный алгоритм, который учитывает эти факторы.

Не могли бы вы поподробнее описать задачу?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.