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);
y(4)=b(1)*x(4)+b(2)*x(3)+b(3)*x(2)+b(4)*x(1)-a(2)*y(3)-a(3)*y(2)-a(4)*y(1);
for i=5:length(x)
y(i)=b(1)*x(i)+b(2)*x(i-1)+b(3)*x(i-2)+b(4)*x(i-3)+b(5)*x(i-4)-a(2)*y(i-1)-a(3)*y(i-2)-a(4)*y(i-3)-a(5)*y(i-4);
end

以上代码可放到C语言实现,只是数组写的形式不一样,需要做一些修改;

滤波效果对比一致

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值