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

环境:matlab2014a
工具:Filter Design & Analysis Tool
参数设置如下图:

C语言实现,MATLAB生成巴特沃斯滤波器_第1张图片

这里用的是250HZ的采样频率,低通截止频率为20HZ,6阶巴特沃斯滤波器。
C语言实现,MATLAB生成巴特沃斯滤波器_第2张图片
设置好参数后,点最下方的“Design Filter”,生成参数。
然后在菜单File下Export导出参数:

C语言实现,MATLAB生成巴特沃斯滤波器_第3张图片

点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语言滤波器设计。

你可能感兴趣的:(日记)