matlab生成滤波器,C语言实现,MATLAB生成巴特沃斯滤波器

环境:matlab2014a

工具:Filter Design & Analysis Tool

参数设置如下图:

23f43dcc723daa596eb7889b0704b1dc.png

这里用的是250HZ的采样频率,低通截止频率为20HZ,6阶巴特沃斯滤波器。

6157525cd4cf71c2125dd46bdd788543.png

设置好参数后,点最下方的“Design Filter”,生成参数。

然后在菜单File下Export导出参数:

9eeeb3a0cf187c6e3d17711c74e193de.png

点Export后即可在工作区看到导出的数据Hd.

最后使用命令行将参数转换为C语言可用的参数表:

[b,a]=sos2tf(Hd.sosMatrix,Hd.ScaleValues)

可得到b和a参数表:

b =

1.0e-03 *

0.0231 0.1388 0.3470 0.4627 0.3470 0.1388 0.0231

a =

1.0000 -4.5450 8.7464 -9.0984 5.3862 -1.7181 0.2305

使用之前得到的参数[b,a]:

b =

1.0e-03 *

0.0231 0.1388 0.3470 0.4627 0.3470 0.1388 0.0231

a =

1.0000 -4.5450 8.7464 -9.0984 5.3862 -1.7181 0.2305

在C语言中,首先声明数组,存放这些参数:

float b[7]={0.0000231,0.0001388,0.0003470,0.0004627,0.0003470,0.0001388,0.0000231};

float a[7]={1,-4.5450,8.7464,-9.0984,5.3862,-1.7181,0.2305};

再声明另两个数组:

float xBuf[7]={0,0,0,0,0,0,0};

float yBuf[7]={0,0,0,0,0,0,0};

然后使用函数:

float IIRLowPass(float x)

{

int i;

//运算之前Buf向前移动一个位置,以保存之前Buf的数据;

for(i=6; i>0; i–)

{

yBuf[i] = yBuf[i-1];

xBuf[i] = xBuf[i-1];

}

xBuf[0] = x;

yBuf[0] = 0;

for(i=1;i<7;i++)

{

yBuf[0] = yBuf[0] + b2[i]*xBuf[i];

yBuf[0] = yBuf[0] - a2[i]*yBuf[i];

}

yBuf[0] = yBuf[0] + b2[0]*xBuf[0];

return yBuf[0];

}

最终实现C语言滤波器设计。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值