Фильтрация БИФ Батреворта 10го порядка
Добавлено: Пн май 11, 2015 15:55:24
здравствуйте
Коэффициенты рассчитал, вроде понял как по этому алгоритму считать

Коэффициенты для фильтра
частота дискретизации 102400, фильтр режекторный с полосой 4000-5000
такие коэффициенты
%a5 a4 a3 ... a0
a=[0.905475 -8.71601 38.0856 -99.4697 171.921 -205.454 171.921 -99.4697 38.0856 -8.71601 0.905475];
%b5 b4 b3 ... b1
b=[0.819867 -8.04842 35.8696 -95.5494 168.446 -205.333 175.271 -103.451 40.4093 -9.43477];
в matlabe написал функцию для вычисления по этой схеме:
function y=filt(x)
N=1024;
[a,b]=get_k();
yi(1:10)=0;
xi(1:11)=0;
y=[];
for(n=1:N)
xi(1:10)=xi(2:11);
xi(11)=x(n);
yi(11)=sum(a.*xi)+sum(-b.*yi);
y(n)=yi(11);
yi=yi(2:11);
end
end
function [a,b]=get_k
%a5 a4 a3 ... a0
a=[0.905475 -8.71601 38.0856 -99.4697 171.921 -205.454 171.921 -99.4697 38.0856 -8.71601 0.905475];
b=[0.819867 -8.04842 35.8696 -95.5494 168.446 -205.333 175.271 -103.451 40.4093 -9.43477];
end
но что то не то, в этом и вопрос.
Входной сигнал пила с частотой 1500, Объем выборки 1024 вот так выглядит

На выходе такое
1.0e+07 *
Columns 1 through 12
0 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
Columns 13 through 24
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000
Columns 25 through 36
0.0000 0.0000 0.0000 0.0000 0.0001 0.0001 0.0002 0.0003 0.0005 0.0007 0.0010 0.0015
Columns 37 through 48
0.0023 0.0037 0.0062 0.0108 0.0187 0.0324 0.0554 0.0933 0.1548 0.2537 0.4124 0.6675
Columns 49 through 50
1.0803 1.7534
и т.д. увеличивается в бесконечность.
Коэффициенты рассчитал, вроде понял как по этому алгоритму считать
Коэффициенты для фильтра
частота дискретизации 102400, фильтр режекторный с полосой 4000-5000
такие коэффициенты
%a5 a4 a3 ... a0
a=[0.905475 -8.71601 38.0856 -99.4697 171.921 -205.454 171.921 -99.4697 38.0856 -8.71601 0.905475];
%b5 b4 b3 ... b1
b=[0.819867 -8.04842 35.8696 -95.5494 168.446 -205.333 175.271 -103.451 40.4093 -9.43477];
в matlabe написал функцию для вычисления по этой схеме:
function y=filt(x)
N=1024;
[a,b]=get_k();
yi(1:10)=0;
xi(1:11)=0;
y=[];
for(n=1:N)
xi(1:10)=xi(2:11);
xi(11)=x(n);
yi(11)=sum(a.*xi)+sum(-b.*yi);
y(n)=yi(11);
yi=yi(2:11);
end
end
function [a,b]=get_k
%a5 a4 a3 ... a0
a=[0.905475 -8.71601 38.0856 -99.4697 171.921 -205.454 171.921 -99.4697 38.0856 -8.71601 0.905475];
b=[0.819867 -8.04842 35.8696 -95.5494 168.446 -205.333 175.271 -103.451 40.4093 -9.43477];
end
но что то не то, в этом и вопрос.
Входной сигнал пила с частотой 1500, Объем выборки 1024 вот так выглядит

На выходе такое
1.0e+07 *
Columns 1 through 12
0 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
Columns 13 through 24
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000
Columns 25 through 36
0.0000 0.0000 0.0000 0.0000 0.0001 0.0001 0.0002 0.0003 0.0005 0.0007 0.0010 0.0015
Columns 37 through 48
0.0023 0.0037 0.0062 0.0108 0.0187 0.0324 0.0554 0.0933 0.1548 0.2537 0.4124 0.6675
Columns 49 through 50
1.0803 1.7534
и т.д. увеличивается в бесконечность.