STM32心率濾波器實現

2021-10-19 21:17:09 字數 2337 閱讀 3273

​ 這次平台選用的是stm32f407,因為畢竟要進行濾波運算,用有fpu的f4系列會比f1舒服很多。當然,在現場也看到許多用f1做的,效果也非常好。

​ 由於我們對濾波的實時性要求比較高,所以這裡選中fir濾波器進行設計,fir濾波器的群延遲是固定的,在處理資料上會更加舒服一些。但是fir濾波的計算量會比較大,後文中如何減少fir的計算量是一大重點。

​ 網上能找到的常見的濾波器教程用的都是以下形式:

一、濾波器的延遲取決於n的數量,n越大延遲越高。二、和其他濾波器配合的時候不是特別靈活。

​ 於是,在上面濾波器結構的基礎上進行改進:

一、能減少單次計算的計算量,相當於每次只用計算群延時+1的資料二、減少單次計算的n值,最大程度減少由於資料採集帶來的延遲,保持好的效果的同時保持較高的實時性。

​ 這裡的低通濾波器主要採用以下這兩個函式

​ void arm_fir_init_f32(arm_fir_instance_f32 s, uint16_t numtaps,const float32_t pcoeffs,float32_t* pstate,uint32_t blocksize)**這個函式主要是對濾波器進行初始化

​ **void arm_fir_f32(const arm_fir_instance * s,const float32_t psrc,float32_t * pdst,uint32_t blocksize)**這個函式是最終進行濾波器的函式。

​ 具體這兩個函式的用法和引數在這個**有非常詳細的解釋了,這裡就不過多贅述了。

​ 下面是包裝了以下的濾波器函式

#include

"fir_48.h"

#include

"sys.h"

static float32_t firstatef32_48[block_size+num_taps-1]

;arm_fir_instance_f32 s;

uint32_t block_size = block_size;

const

int bl =49;

const float32_t b[49]

=;void

arm_fir_f32_lp_48

(float32_t *input_buffer,float32_t *output_buffer)

void

arm_fir48_init

(void

)

其中b[49]這個濾波器引數的生成使用matlab來做的,具體操作可以參考這篇文章

後續要使用濾波器的話只要使用這兩個函式就可以了

下面是實現上述濾波器結構的具體**

arm_fir48_init()

;if(ads1292_recive_flag)

}else

if(mid_filt_start_flag ==1)

else

}else

half_send_flag =0;

//printf("n0.val=%d",(int)bpm);

//輸出心率資料

//send_ending_flag();

}//printf("add 2,0,%0.f",fir_put[0]-mid_val+100);

bpm_val = fir_put[0]

-mid_val+

100;

if(debug_flag ==1)

else

//send_ending_flag();

arm_copy_f32

(mid_filt_cache1,mid_filt_cache,midfilt_num);}

arm_copy_f32

(calculate_cache+

1,calculate_cache1,18)

;//將前一陣列的後18位拷貝到快取陣列中,作為fir濾波器的群延時

arm_copy_f32

(calculate_cache1,calculate_cache,18)

;//將快取陣列的18位拷貝到後一陣列中

}

ads1292_recive_flag=0;

}

整個工程檔案我放在github倉庫裡面了,裡面有整個a題的**

​謝謝**

濾波器實現

基於matlab內建函式的fir設計。功能 設計標準頻率響應的基於窗函式的fir濾波器。語法 說明 fir1函式可以實現加窗線形相位fir數字濾波器設計,它可以設計出標準的低通 高通 帶通和帶阻濾波器.當wn w1 w2 時,fir1函式可得到帶通濾波器,其通帶為w1 w w2.在設計高通和帶阻濾波...

python實現濾波器

在使用python進行訊號處理過程中,利用 scipy.signal.filtfilt 可以快速幫助實現訊號的濾波。1.函式的介紹 1 濾波函式 scipy.signal.filtfilt b,a,x,axis 1,padtype odd padlen none,method pad irlen n...

stm32晶元休眠模式 stm32實現待機喚醒

stm32的低功耗模式有3種 1 睡眠模式 cm3核心停止,外設仍然執行 2 停機模式 所有時鐘都停止 3 待機模式 1.8v核心電源關閉 進入待機模式的方法,以及設定wk up引腳用於把stm32從待機模式喚醒的方法 一般步驟如下 1 設定sleepdeep位 scb scr的第二位 2 使能電源...