[an error occurred while processing this directive]
|
Господа, прошк помочь начинающему.
Есть скрипт в 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 cc2=-10; cc2<=0; cc2++) for(int cc3=-10; cc3<=-1; cc3++) return result;
E-mail:
info@telesys.ru
for(int cc=0; cc
double getV(double *from, double *to, int index1)
{
double result=0;
if(index1+cc2>=0) result+=_bm[-cc2]*(double)from[index1+cc2];
if(index1+cc3>=0) result-=_am[-cc3]*(double)to[index1+cc3];
}
Ответы