你的位置:首页 > 测试测量 > 正文

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

发布时间:2018-11-30 责任编辑:xueqi

【导读】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;
}
 
要采购滤波器么,点这里了解一下价格!
特别推荐
技术文章更多>>
技术白皮书下载更多>>
热门搜索
 

关闭

 

关闭