MATLAB巴特沃斯滤波器C语言离散实现

MATLAB巴特沃斯滤波器C语言离散实现,第1张

MATLAB巴特沃斯滤波器C语言离散实现

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滤波效果更好,离散序列效果不够。暂未深究

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5714093.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存