реклама на сайте
подробности

 
 
> Грамотный AGC для вокодера, Теория, а главное практика :)
sigmaN
сообщение Sep 6 2009, 23:48
Сообщение #1


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



После разборок с эходавами и прочими неприятностями, решил прикрутить к своей железяке АРУ.
Ибо получается что или ничего не слышно, или дунет ветерок, а динамик аж трищит - на лицо необходимость регулировки.

Собственно, после недолгих раздумий, действовал так:
Определил верхний порог: AGC_MINTHRESHOLD
нижний порог: AGC_MAXTHRESHOLD

На асме зарулил функцию, быстро считающую сумму квадратов переданного ей буфера из 320 отсчётов сигнала
И сам AGC
Код
unsigned long do_agc(int *input, int len){
    //считаем энергию сигнала
    agc_currEnergy=my_sqrsum(input,len);

    if(agc_currEnergy==0)
        return agc_currEnergy; //AGC не требуется - на выход
    if(agc_currEnergy>=AGC_MINTHRESHOLD && agc_currEnergy<=AGC_MAXTHRESHOLD)
        return agc_currEnergy; //AGC не требуется
    else
    if(agc_currEnergy<AGC_MINTHRESHOLD){ //надо бы усилить
        agc_multiplier=sqrt((double)AGC_MINTHRESHOLD/(double)agc_currEnergy);
    }
    else
    if(agc_currEnergy>AGC_MAXTHRESHOLD){//придётся сделать немного потише :)
        agc_multiplier=sqrt((double)AGC_MAXTHRESHOLD/(double)agc_currEnergy);
    }
    
//а теперь подправим сигнал
    while(len--)
        *input++=(int)((double)*input * agc_multiplier);
    
    return agc_currEnergy;
}


От нижнего порога в итоге пришлось отказаться, т.к. регулировка чувствительности микрофона "железными" средствами аудиокодека вроде позволяет добиться неплохой чувствительности.
Верхний тоже вроде режет лишку и с диким теском, от того, что ты подул в микрофон вроде покончено.

Но в целом мне не нравится работа АРУ. Оно то и понятно, ведь то, что я сделал - достаточно тривиально.
Погуглить пробовал, но не так усердно, как мог бы.

Вот прошу пару подсказок.
Также, подозреваю, что и вокодер работал бы эффективнее и качественнее, при наличии грамотно спроектированного и настроенного AGC.

Традиционно, с громоздким и прожорливым Speex препроцессором связываться не хотелось-бы.
Беглого взгляда на функцию, реализующую AGC в speex хватило, чтобы понять, что там наворочено много всего и половина из этого мне не нужна.

Да и заодно практика будет.

В общем покритикуйте мою реализацию плиз. И дайте совет как бы завернуть так, чтобы и голос был loud and clear и в момент громких всплесков было всё хорошо. Ну а я пока параллельно буду гуглить и напрягать CPU:)


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
uriy
сообщение Sep 8 2009, 03:52
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Цитата
только вот лепил я его не туда. Надо на выход, а я на вход
В смысле вы что хотите цифровой модемный сигнал зарезать? Вы его так только испортите и приемник его не сможет декодировать.
Go to the top of the page
 
+Quote Post
fontp
сообщение Sep 8 2009, 05:48
Сообщение #3


Эксперт
*****

Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183



Цитата(uriy @ Sep 8 2009, 07:52) *
В смысле вы что хотите цифровой модемный сигнал зарезать? Вы его так только испортите и приемник его не сможет декодировать.


Он хочет зарезать речь.
И простейший способ сделать это - посмотреть как это делается в звуковой аналоговой аппаратуре и сделать также.
Там пиковый детектор (или квадратичный с малым временем интегрирования) с минимальным временем срабатывания (для быстрой атаки) и схема отпускания с большой постоянной времени 0.5-2 сек. Диод и включеные с ним последовательно, между собой в параллель конденсатор и резистор.
G = max (P, 0.9999*G + 0.0001*P), P уровень сигнала - abs(X) в простейшем случае. Вот эта величина управляет усилением обратнопропорциональным образом.
Можно, конечно, изучить теорию AGC и построить более грамотное АРУ по науке - логарифмический AGC с петлевым фильтром.
А можно ничего не учить и сделать так как сделано во всех японских магнитофончиках по аналогии ))
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 3rd August 2025 - 17:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01388 секунд с 7
ELECTRONIX ©2004-2016