目錄
一、FIR 低通、高通、帶通、帶阻
1、FIR濾波器特點
2、濾波器結構
3、濾波器系數
4、濾波實現
5、FIR 濾波后的群延遲
二、IIR 低通、高通、帶通、帶阻
?1、IIR濾波器特點
2、濾波器結構
3、濾波器系數
4、濾波實現
5、IIR濾波后的群延遲
三、中值濾波
1、中值濾波特點
2、MidFilterBlock
3、MidFilterRT
四、自適應濾波
1、自適應濾波特點
2、濾波器結構
3、濾波實現
五、樣條插補
1、樣條插補特點
2、樣條函數初始化
3、樣條插補實現
一、FIR 低通、高通、帶通、帶阻
1、FIR濾波器特點
- FIR 濾波器永遠是穩定的(系統只有零點);
- FIR 濾波器的沖激響應是有限長序列;
- FIR 濾波器的系統函數為多項式;
- FIR 濾波器具有線性相位。
2、濾波器結構
void arm_fir_init_f32(arm_fir_instance_f32 * S,uint16_t numTaps,const float32_t * pCoeffs,float32_t * pState,uint32_t blockSize
);
? ? ? ? 最終實現的是低通、高通、帶通、帶阻只和濾波器系數有關。
3、濾波器系數
????????點擊 Design Filter 按鈕以后就生成了所需的濾波器系數,生成濾波器系數以后點擊 filterDesigner 界面上的菜單 Targets->Generate C header ,打開后顯示如下界面:
4、濾波實現
? ? ? ? 實現單點或數組格式的濾波。
void arm_fir_f32(const arm_fir_instance_f32 * S,const float32_t * pSrc,float32_t * pDst,uint32_t blockSize
)
5、FIR 濾波后的群延遲
????????波形經過 FIR 濾波器后,輸出的波形會有一定的延遲。對于線性相位的 FIR,這個群延遲就是一個常數。但是實際應用中這個群延遲是多少呢? 關于群延遲的數值, filterDesigner 工具箱會根據用戶的配置計算好。
二、IIR 低通、高通、帶通、帶阻
?1、IIR濾波器特點
????????IIR 濾波器與 FIR 濾波器相比,具有相位特性差的缺點,但它的的結構簡單、運算量小,具有經濟、高效的特點,并且可以用較少的階數獲得很高的選擇性。因此也得到了廣泛應用。
2、濾波器結構
void arm_biquad_cascade_df1_init_f32(arm_biquad_casd_df1_inst_f32 * S,uint8_t numStages,const float32_t * pCoeffs,float32_t * pState
)
? ? ? ? 最終實現的是低通、高通、帶通、帶阻只和濾波器系數有關。
3、濾波器系數
????????點擊 Design Filter 按鈕以后就生成了所需的濾波器系數,生成濾波器系數以后點擊 filterDesigner 界面上的菜單 Targets->Generate C header ,打開后顯示如下界面:
4、濾波實現
? ? ? ? 實現單點或數組格式的濾波。
void arm_biquad_cascade_df1_f32(const arm_biquad_casd_df1_inst_f32 * S,float32_t * pSrc,float32_t * pDst,uint32_t blockSize
)
5、IIR濾波后的群延遲
????????波形經過 IIR 濾波器后,輸出的波形會有一定的延遲。對于線性相位的 IIR ,這個群延遲就是一個常數。但是實際應用中這個群延遲是多少呢? 關于群延遲的數值, filterDesigner 工具箱會根據用戶的配置計算好。
三、中值濾波
1、中值濾波特點
????????將濾波階數設置為 5,即 y = medfilt1(x, 5),表示每 5 個采樣值求一次中值。原理和實現如下:函數是取 x(k-2), x(k-1), x(k), x(k+1), x(k+2)的中值作為輸出 y(k)。 對于 y(1),只有 x(1), x(2), x(3)存在數值,之前的不存在,對于不存在的補 0。 每 5 個數按從小到大排列后取中值有。
2、MidFilterBlock
? ? ? ? 實現數組形式的一段數據的中值濾波。
void MidFilter(float32_t *pSrc, float32_t *pDst, uint32_t blockSize, uint32_t order)
3、MidFilterRT
? ? ? ? 實現變量形式的單個數據的中值濾波。
void MidFilterRT(float32_t *pSrc, float32_t *pDst, uint8_t ucFlag, uint32_t order)
四、自適應濾波
1、自適應濾波特點
????????自適應濾波器能夠根據輸入信號自動調整濾波系數進行數字濾波。作為對比,非自適應濾波器有靜態的濾波器系數,這些靜態系數一起組成傳遞函數。
????????對于一些應用來說,由于事先并不知道需要進行操作的參數,例如一些噪聲信號的特性,所以要求使用自適應的系數進行處理。在這種情況下,通常使用自適應濾波器,自適應濾波器使用反饋來調整濾波器系數以及頻率響應。
????????隨著處理器性能的增強,自適應濾波器的應用越來越常見,時至今日它們已經廣泛地用于手機以及其它通信設備、數碼錄像機和數碼照相機以及醫療監測設備中
2、濾波器結構
? ? ? ? 重點是濾波的步長。
void arm_lms_norm_init_f32(arm_lms_norm_instance_f32 * S,uint16_t numTaps,float32_t * pCoeffs,float32_t * pState,float32_t mu,uint32_t blockSize
);
3、濾波實現
? ? ? ? 步長越大,抖動越大,但是平穩速度越快;步長越小,抖動越小,但是平穩速度越慢。
五、樣條插補
1、樣條插補特點
????????DSP 庫支持了樣條插補,雙線性插補和線性插補,我們這里主要介紹樣條插補的實現。低階的樣條插值還具有“保凸”的重要性質。在計算機科學的計算機輔助設計和計算機圖形學中,樣條通常是指分段定義的多項式參數曲線。
2、樣條函數初始化
void arm_spline_init_f32(arm_spline_instance_f32 * S,arm_spline_type type,const float32_t * x,const float32_t * y,uint32_t n,float32_t * coeffs,float32_t * tempBuffer
)
3、樣條插補實現
void arm_spline_f32(arm_spline_instance_f32 * S,const float32_t * xq,float32_t * pDst,uint32_t blockSize
)
????????樣條插補的主要作用是使得波形更加平滑。比如一幀是128點,步大小是8個像素,我們可以通過插補實現步長為1, 1024點的波形,本質是你的總步長大小不能變,我們這里都是1024,這個不能變,在這個基礎上做插補,效果就出來了。