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

 
 
> Проблемы реализации FIR фильтра
Graf_Inventor
сообщение Feb 6 2010, 16:12
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 100
Регистрация: 16-09-09
Из: Россия, МО, г Мытищи
Пользователь №: 52 396



Добрый день господа.
Приключилась проблема в реализации КИХ фильтра.

сам фильтр вот:

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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Andron_
сообщение Feb 6 2010, 17:40
Сообщение #2


.NET developer
***

Группа: Свой
Сообщений: 218
Регистрация: 20-10-07
Из: Новосибирск
Пользователь №: 31 532



подайте на вход алгоритму дельта функцию, если получите на выходе ИХ фильтра, значит проблема не в алгоритме...
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 21:14
Рейтинг@Mail.ru


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