我想在1D信号上使用巴特沃斯滤波器.在Matlab中,脚本看起来像这样:
f=100;
f_cutoff = 20;
fnorm =f_cutoff/(f/2);
[b,a] = butter(8,fnorm,'low');
filteredData = filter(b,a,rawData); % I want to write this myself
Run Code Online (Sandbox Code Playgroud)
现在我不想直接使用Matlab中给出的filter -function,而是自己编写.在Matlab文档中,它描述如下:
滤波器功能实现为直接形式II转置结构,
y(n)= b(1)*x(n)+ b(2)*x(n-1)+ ... + b(nb + 1)*x(n-nb) - a(2)*y(n-1) - ... - a(na + 1)*y(n-na)
其中n-1是滤波器阶数,它处理FIR和IIR滤波器[1],na是反馈滤波器阶数,nb是前馈滤波器阶数.
所以我已经尝试过编写这样的函数:
f=100;
f_cutoff = 20;
fnorm =f_cutoff/(f/2);
[b,a] = butter(8,fnorm,'low');
for n = 9:size(rawData,1)
filteredData(n,1) = b(1)*n + b(2)*(n-1) + b(3)*(n-2) + b(4)*(n-3) + b(5)*(n-4) ...
- a(2)*rawData(n-1,1) - a(3)*rawData(n-2,1) - a(4)*rawData(n-3,1) - a(5)*accel(n-4,1);
end
Run Code Online (Sandbox Code Playgroud)
但那不起作用.你能帮我么?我究竟做错了什么?
真诚的,Cerdo
PS:过滤器文档可以在这里foud:http …