前言
数字滤波的原理就不说了,网上资料很多,这里只说下实现。
一、使用Matlab进行数字滤波器设计
在Matlab中输入filterDesigner打开滤波器设计工具,选择滤波器类型和频率。这里使用4阶IIR巴特沃斯型带通滤波器,计算频率20Hz,通带频率0.16-0.66Hz。
选择分析->滤波器系数,编辑->转换为单节,得到滤波器系数。
二、滤波器实现,stm32平台
1.实现代码
使用平台为stm32单片机,只适用低阶的滤波器,高阶还是多个滤波器串联效果更好,实现代码如下
#define numStages 4 /* IIR滤波的阶数 */
/* 巴特沃斯带通滤波器系数0.16Hz 0.66Hz*/
const float a[numStages+1] = {1.0f, -3.7589173f, 5.32081326298f, -3.362601167f, 0.8008026466657f};
const float b[numStages+1] = {0.00554271721f, 0.0f, -0.0110854344f, 0.0f, 0.00554271721f};
static float old_x[numStages] = {0.0f};
static float old_y[numStages] = {0.0f};
static int pos = 0;
float arm_iir_f32_bp(float input)
{
int i,p;
float output = b[0] * input;
for(i=1; i<=numStages; i++)
{
p=(pos + numStages - i)%numStages;
output += b[i] * old_x[p] - a[i] * old_y[p];
}
if(numStages > 1) {
old_x[pos] = input;
old_y[pos] = output;
pos = (pos+1)%numStages;
}
return output;
}
2.滤波效果
输入使用0.055Hz, 0.555Hz, 1.11Hz三个频率的波形叠加。波形频谱如图
滤波之后的波形和频谱文章来源:https://www.toymoban.com/news/detail-506099.html
效果还可以,但是滤波之后波形会有滞后。文章来源地址https://www.toymoban.com/news/detail-506099.html
总结
到了这里,关于IIR数字滤波器的设计及实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!