matlab创建一个4阶巴特沃斯低通滤波器代码;
clc
clear
% Digits =8;
fs=40960;
lpf=8000;
f=8000;
t=0:1/fs:0.1-1/fs;
x=cos(2*pi*f*t);
[b,a]=butter(4,lpf*2/fs,'low');%%构建4阶巴特沃斯低通滤波器lpf为3db带宽
y=filter(b,a,x);
filter的实际就是对X数组做离散运算得到滤波后数组;
使用的离散序列为:
a(1)*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)
b=[0.043217558470443 0.172870233881774 0.259305350822661 0.172870233881774 0.043217558470443];
a=[1 -0.855646565289075 0.718318727070705 -0.203916450503673 0.032725224249138];
y(1)=b(1)*x(1);
y(2)=b(1)*x(2)+b(2)*x(1)-a(2)*y(1);
y(3)=b(1)*x(3)+b(2)*x(2)+b(3)*x(1)-a(2)*y(2)-a(3)*y(1);
for i=4:length(x)
y(i)=b(1)*x(i)+b(2)*x(i-1)+b(3)*x(i-2)+b(4)*x(i-3)-a(2)*y(i-1)-a(3)*y(i-2)-a(4)*y(i-3);
end
以上代码可放到C语言实现,只是数组写的形式不一样,需要做一些修改;
滤波效果对比,略有差异:整体是一致的,filter描述也是使用该离散序列,但实际filter滤波效果更好,离散序列效果不够。暂未深究
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)