【導(dǎo)讀】IIR濾波器又叫IIR數(shù)字濾波器,“遞歸濾波器”。遞歸濾波器,也就是IIR數(shù)字濾波器,顧名思義,具有反饋。FIR濾波器:有限長(zhǎng)單位沖激響應(yīng)濾波器,又稱(chēng)為非遞歸型濾波器,是數(shù)字信號(hào)處理系統(tǒng)中最基本的元件。
IR濾波器,F(xiàn)IR濾波器和窗口滑動(dòng)濾波
通常,信號(hào)的頻譜處于有限的頻率范圍內(nèi),而噪聲的頻譜則散布在很廣的頻率范圍內(nèi),為了消除噪聲,可以把FIR濾波器或者IIR濾波器設(shè)計(jì)成合適的頻帶濾波器,進(jìn)行頻域?yàn)V波。
一般濾波器可以分為經(jīng)典濾波器和數(shù)字濾波器。
經(jīng)典濾波器:假定輸入信號(hào)中的有用成分和希望去除的成分各自占有不同的頻帶。如果信號(hào)和噪聲的頻譜相互重迭,經(jīng)典濾波器無(wú)能為力。比如 FIR 和 IIR 濾波器等。
現(xiàn)代濾波器:從含有噪聲的時(shí)間序列中估計(jì)出信號(hào)的某些特征或信號(hào)本身?,F(xiàn)代濾波器將信號(hào)和噪聲都視為隨機(jī)信號(hào)。包括 Wiener Filter、Kalman Filter、線(xiàn)性預(yù)測(cè)器、自適應(yīng)濾波器等
一、IIR濾波器
IIR濾波器又叫IIR數(shù)字濾波器,“遞歸濾波器”。遞歸濾波器,也就是IIR數(shù)字濾波器,顧名思義,具有反饋。IIR數(shù)字濾波器是一類(lèi)遞歸型的線(xiàn)性時(shí)不變因果系統(tǒng)。
特點(diǎn):
lIR數(shù)字濾波器的系統(tǒng)函數(shù)可以寫(xiě)成封閉函數(shù)的形式,具有反饋回路;
IIR數(shù)字濾波器的相位非線(xiàn)性,相位特性不好控制,隨截止頻率變化而變化,對(duì)相位要求較高時(shí),需加相位校準(zhǔn)網(wǎng)絡(luò);
IIR濾波器有歷史的輸出參與反饋,同F(xiàn)IR相比在相同階數(shù)時(shí)取得更好的濾波效果;
IIR數(shù)字濾波器采用遞歸型結(jié)構(gòu),由于運(yùn)算中的舍入處理,使誤差不斷累積,有時(shí)會(huì)產(chǎn)生微弱的寄生振蕩。
IIR濾波原理圖
#define Pi 3.1415927f
/**************************************************************************
函數(shù)原型:void Calculate_FilteringCoefficient(float Time, float Cut_Off)
功 能:iir低通濾波參數(shù)計(jì)算
**************************************************************************/
void Calculate_FilteringCoefficient(float Time, float Cut_Off)
{
ACC_IIR_FACTOR = Time /( Time + 1/(2.0f*Pi*Cut_Off) );
// ACC_IIR_FACTOR為IIR濾波器因數(shù)
}
/**************************************************************************
函數(shù)原型: 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)濾波器:有限長(zhǎng)單位沖激響應(yīng)濾波器,又稱(chēng)為非遞歸型濾波器,是數(shù)字信號(hào)處理系統(tǒng)中最基本的元件,它可以在保證任意幅頻特性的同時(shí)具有嚴(yán)格的線(xiàn)性相頻特性,同時(shí)其單位抽樣響應(yīng)是有限長(zhǎng)的,因而濾波器是穩(wěn)定的系統(tǒng)。因此,F(xiàn)IR濾波器在通信、圖像處理、模式識(shí)別等領(lǐng)域都有著廣泛的應(yīng)用。
特點(diǎn):
FIR濾波器的最主要的特點(diǎn)是沒(méi)有反饋回路,穩(wěn)定性強(qiáng),故不存在不穩(wěn)定的問(wèn)題;
FIR具有嚴(yán)格的線(xiàn)性相位,幅度特性隨意設(shè)置的同時(shí),保證精確的線(xiàn)性相位;
FIR設(shè)計(jì)方式是線(xiàn)性的,硬件容易實(shí)現(xiàn);
FIR相對(duì)IIR濾波器而言,相同性能指標(biāo)時(shí),階次較高,對(duì)CPU的性能要去較高。
FIR濾波原理圖
三、滑動(dòng)窗口濾波
滑動(dòng)平均濾波算法只采樣一次,將一次采樣值和過(guò)去的若干次采樣值一起求平均,得到的有效采樣值即可投入使用。如果取N個(gè)采樣值求平均,存儲(chǔ)區(qū)中必須開(kāi)辟N個(gè)數(shù)據(jù)的暫存區(qū)。每新采集一個(gè)數(shù)據(jù)便存入暫存區(qū)中,同時(shí)去掉一個(gè)最老數(shù)據(jù),保存這N個(gè)數(shù)據(jù)始終是最新更新的數(shù)據(jù)。采用環(huán)型隊(duì)列結(jié)構(gòu)可以方便地實(shí)現(xiàn)這種數(shù)據(jù)存放方式。
#define Filter_Num 2
/**************************************************************************
函數(shù)原型: void Gyro_Filter(struct _gyro *Gyro_in,struct _gyro *Gyro_out)
功 能: gyro窗口滑動(dòng)濾波
**************************************************************************/
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;
}