你好!欢迎来到深圳市品慧电子有限公司!
语言
当前位置:首页 >> 技术中心 >> 通用技术 >> IIR滤波器与FIR滤波器的特点分析

IIR滤波器与FIR滤波器的特点分析


品慧电子讯:IIR滤波器又叫IIR数字滤波器,“递归滤波器”。递归滤波器,也就是IIR数字滤波器,顾名思义,具有反馈。FIR滤波器:有限长单位冲激响应滤波器,又称为非递归型滤波器,是数字信号处理系统中最基本的元件。

IR滤波器,FIR滤波器和窗口滑动滤波

通常,信号的频谱处于有限的频率范围内,而噪声的频谱则散布在很广的频率范围内,为了消除噪声,可以把FIR滤波器或者IIR滤波器设计成合适的频带滤波器,进行频域滤波。

一般滤波器可以分为经典滤波器和数字滤波器。

经典滤波器:假定输入信号中的有用成分和希望去除的成分各自占有不同的频带。如果信号和噪声的频谱相互重迭,经典滤波器无能为力。比如 FIR 和 IIR 滤波器等。

现代滤波器:从含有噪声的时间序列中估计出信号的某些特征或信号本身。现代滤波器将信号和噪声都视为随机信号。包括 Wiener Filter、Kalman Filter、线性预测器、自适应滤波器等

一、IIR滤波器

IIR滤波器又叫IIR数字滤波器,“递归滤波器”。递归滤波器,也就是IIR数字滤波器,顾名思义,具有反馈。IIR数字滤波器是一类递归型的线性时不变因果系统。

特点:

lIR数字滤波器的系统函数可以写成封闭函数的形式,具有反馈回路;

IIR数字滤波器的相位非线性,相位特性不好控制,随截止频率变化而变化,对相位要求较高时,需加相位校准网络;

IIR滤波器有历史的输出参与反馈,同FIR相比在相同阶数时取得更好的滤波效果;

IIR数字滤波器采用递归型结构,由于运算中的舍入处理,使误差不断累积,有时会产生微弱的寄生振荡。

IIR滤波原理图

#define Pi 3.1415927f

/**************************************************************************

函数原型:void Calculate_FilteringCoefficient(float Time, float Cut_Off)

功 能:iir低通滤波参数计算

**************************************************************************/

void Calculate_FilteringCoefficient(float Time, float Cut_Off)

{

ACC_IIR_FACTOR = Time /( Time + 1/(2.0f*Pi*Cut_Off) );

// ACC_IIR_FACTOR为IIR滤波器因数

}

/**************************************************************************

函数原型: void ACC_IIR_Filter(struct _acc *Acc_in,struct _acc *Acc_out)

功 能: iir低通滤波

**************************************************************************/

void ACC_IIR_Filter(struct _acc *Acc_in,struct _acc *Acc_out)

{

Acc_out->x = Acc_out->x + ACC_IIR_FACTOR*(Acc_in->x - Acc_out->x);

Acc_out->y = Acc_out->y + ACC_IIR_FACTOR*(Acc_in->y - Acc_out->y);

Acc_out->z = Acc_out->z + ACC_IIR_FACTOR*(Acc_in->z - Acc_out->z);

}

二、FIR滤波器

FIR(Finite Impulse Response)滤波器:有限长单位冲激响应滤波器,又称为非递归型滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。因此,FIR滤波器在通信、图像处理、模式识别等领域都有着广泛的应用。

特点:

FIR滤波器的最主要的特点是没有反馈回路,稳定性强,故不存在不稳定的问题;

FIR具有严格的线性相位,幅度特性随意设置的同时,保证精确的线性相位;

FIR设计方式是线性的,硬件容易实现;

FIR相对IIR滤波器而言,相同性能指标时,阶次较高,对CPU的性能要去较高。

FIR滤波原理图

三、滑动窗口滤波

滑动平均滤波算法只采样一次,将一次采样值和过去的若干次采样值一起求平均,得到的有效采样值即可投入使用。如果取N个采样值求平均,存储区中必须开辟N个数据的暂存区。每新采集一个数据便存入暂存区中,同时去掉一个最老数据,保存这N个数据始终是最新更新的数据。采用环型队列结构可以方便地实现这种数据存放方式。

#define Filter_Num 2

/**************************************************************************

函数原型: void Gyro_Filter(struct _gyro *Gyro_in,struct _gyro *Gyro_out)

功 能: gyro窗口滑动滤波

**************************************************************************/

void Gyro_Filter(struct _gyro *Gyro_in,struct _gyro *Gyro_out)

{

static int16_t Filter_x[Filter_Num],Filter_y[Filter_Num],Filter_z[Filter_Num];

static uint8_t Filter_count;

int32_t Filter_sum_x=0,Filter_sum_y=0,Filter_sum_z=0;

uint8_t i=0;

Filter_x[Filter_count] = Gyro_in->x;

Filter_y[Filter_count] = Gyro_in->y;

Filter_z[Filter_count] = Gyro_in->z;

for(i=0;i<Filter_Num;i++)

{

Filter_sum_x += Filter_x[i];

Filter_sum_y += Filter_y[i];

Filter_sum_z += Filter_z[i];

}

Gyro_out->x = Filter_sum_x / Filter_Num;

Gyro_out->y = Filter_sum_y / Filter_Num;

Gyro_out->z = Filter_sum_z / Filter_Num;

Filter_count++;

if(Filter_count == Filter_Num)

Filter_count=0;

}

用户评论

发评论送积分,参与就有奖励!

发表评论

评论内容:发表评论不能请不要超过250字;发表评论请自觉遵守互联网相关政策法规。

深圳市品慧电子有限公司