[an error occurred while processing this directive]
Реализация фильтра в С++ программе
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

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

Отправлено LS 23 октября 2004 г. 17:55

Господа, прошк помочь начинающему.
Есть скрипт в MATLAB, который осуществляет фильтрацию wav-файла. Вот он:

clear all

td=1/16384;

res = wavread('D:\study\openal_filter\Debug\500hz.wav');
t=(0:td:td*size(res)-td);

wp=[1000 2000]/(0.5/td);
ws=[750 2750]/(0.5/td);
rp=3; rs=40;
[n,wn]=cheb2ord(wp,ws,rp,rs);
[b,a]=cheby2(n,rs,wn);
shift_res=filter(b,a,res);

Всё работает замечательно, но в программе на С++ фильтр валится - значения после фильтрации уходят на бесконечность.
После танцев с бубном, мне удалось выяснить, что коэффициенты b,a, которые возвращает cheby2 не совсем то, на что надо умножать значения из wav-файла.
Я специально проверил в MATLAB:

%%%%%%%%%%%%%%%filter

shift_res=zeros(size(res));
for cc=1:size(res),
result=0;
for cc2=-11:-1,
if(cc+cc2>0)
result=result+b(-cc2)*res(cc+cc2);
end
end
for cc3=-11:-2,
if(cc+cc3>0)
result=result-a(-cc3)*shift_res(cc+cc3);
end
end
shift_res(cc)=result;
end

%%%%%%%%%%%%%%%%%%%%%%%

результаты аналогичные - значения уходят на бесконечность.
Подскажите, в чем может быть дело? Я чувствую, что вопрос примитивный, но, видимо, пока не хватает подготовки...

ЗЫ: отрывки программы на С++:

//осуществляем фильтрацию:
for(int cc=0; cc res[cc]=getV(pbd,res,cc);

//вот процедура:
double getV(double *from, double *to, int index1)
{
double result=0;

for(int cc2=-10; cc2<=0; cc2++)
if(index1+cc2>=0) result+=_bm[-cc2]*(double)from[index1+cc2];

for(int cc3=-10; cc3<=-1; cc3++)
if(index1+cc3>=0) result-=_am[-cc3]*(double)to[index1+cc3];

return result;
}

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

Ответы


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

Имя (обязательно): 
Пароль: 
E-mail: 

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

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

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


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

E-mail: info@telesys.ru