[an error occurred while processing this directive]
Спасибо! - дошло 10 pdf - рассматриваю ...
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено читающий 23 сентября 2005 г. 10:01
В ответ на: Ау! Дошло что нибудь? отправлено SM 23 сентября 2005 г. 08:53

Немного о себе :)
плтформа - ARM9 - пока на Цэ - для теста - а потом напишем как нада.

про NLMS и Q15
в общем то у меня он не такой и длинный - всего 64 тапа
тест простой то
FES - реальный голосовой сигнал
NES искажения сам внес - задержаный (скажем на 8 отсчетов)и ослабленный FES - т.е. совсем простой случай

так вот при длине 16 - NLMS хорошо находит где ему вставить свой нос и 20-25-30 ДБ ERLE выходит быстро и не принужденно секундах на 2-3. Но опять таки от Mu сильно зависит - что бы хорошо сходится любит побольше это Mu.
И по видимому адаптация на участках "без голоса" как то уж сильно плохо действует на фильтр - коэфф "которых нет" упорно сползают в отрицательные значение - причем массовой толпой.

А вот при 64 тапах - все совсем плохо - вроде начинает сходится - но потом коэфф совсем разносит - и опять таки только в отрицательную область.

В общем то дела все спрятаны в вычислениях - возможно в КИХ что Y(n) считает что да и переполняется.

Видимо надо обязательно отключить адаптацию там где "нет FES"
и посмотреть как получше организовать остальное - потому что 40 битного аккумулятора как то нет :). а дальше Q15 лезть не хочется

А может ему Mu надо (2^-9 ...2^-11) и ждать секунд 20 пока он склеиться - этот 64 таповый..
в общем нада поэкспериментировать

вот так


len = aec_context->filter_len;
// --- update FES energy ---
tmp = (aec_context->p_aec_x[-len]*aec_context->p_aec_x[-len]) >> 15;
aec_context->fes_energy = aec_context->fes_energy - tmp; // remove latest
tmp = (aec_context->p_aec_x[0]*aec_context->p_aec_x[0]) >> 15;
aec_context->fes_energy = aec_context->fes_energy + tmp; // add newest

// --- calculate adaptation step size ---
aec_context->adapt_step = aec_context->adapt_mu / ((aec_context->fes_energy>>16) + 1); // 0,000030517578125 -div guard

// --- update coefficients ---
for(k=0; k < len; k++){
// leakage part - disabled
--> тут могут быть вариации в способах вычисления...
tmp = (aec_context->p_aec_x[-k] * aec_context->adapt_error) >> 15;
tmp = (tmp* aec_context->adapt_step ) >> 15;
aec_context->filter_b[k] += tmp;
} // for(k=0; k < aec_context->filter_len;




Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru