Добрый день господа. Приключилась проблема в реализации КИХ фильтра.
сам фильтр вот:
float fir_filter(float input, float *coef, int n, float *history) { int i; float *hist_ptr,*hist1_ptr,*coef_ptr; float output; hist_ptr = history; hist1_ptr = hist_ptr; coef_ptr = coef + n -1; output = *hist_ptr++ * (*coef_ptr--); for(i = 2 ; i < n ; i++) { *hist1_ptr++ = *hist_ptr; output += (*hist_ptr++) * (*coef_ptr--); } output += input * (*coef_ptr); *hist1_ptr = input; return(output); }
вызываю его вот так:
iChannel0LeftOut = fir_filter(iChannel0LeftIn, coeffic, 11, history_mas);
,
коэффициенты получены с помощью Матлаба. Объявлены в Мэин вот так:
float coeffic[11] = { 0.03061053687426, 0.03431978162943, 0.03741127659778, 0.03973537482371, 0.04117773715265, 0.04166666666667, 0.04117773715265, 0.03973537482371, 0.03741127659778, 0.03431978162943, 0.03061053687426 };
float history_mas[10];
Отладочная плата ADDS-BF537-EZLITE
Правый канал пущен на прямую для сравнения на слух (iChannel0RightOut = iChannel0RightIn;), а левй через фильтр. в результате, в правом слушай оригинал, как и должно быть, а в левом просто хрип, с подложкой из входного сигнала. Думал, что перегружаю ЦАП, но сумма коэфициентов меньше 1, значит и перегруза быть не может, на всякий случай пробовал делить выходной семпл на 2..3.. и т.п. что бы понизить уровень сигнала... тише становится, но хрип с подложкой из оригинала остаётся... Думал проблема в том что записываю float в int, пробовал округлять до целых а потом записывать.. но ничего не поменялось... вообще ничего..., Потом думал что проблема в том что АПЦ и ЦАП имеют слово по 24 бита... и соотвественно 24-й бит - это знак... Написал коротенькие втавочки для конвертирования... тоже не помогло... только усилился хрип...
Признаюсь потерял уже в догадках... может подскажете в чем может быть дело? =(
ой забыл написать, логично было бы поглядеть с мопощью VisualDSP, но когда делаю график и выводу в него iChannel0leftIn и iChannel0leftOut то графики выглядят обсалютно одинаково , только снекоторым смещением, причем выход опередает вход! хотя когда смотрю значение в переменных, оно отличается. т.е. такое чувство что алгорим в принципе работает. Мне кажется что проблема в представленнии данных для ЦАП... но не уверен... в общем запутался =(
Сообщение отредактировал Graf_Inventor - Feb 6 2010, 16:16
|