經過ADC採集到的位於袖袋內的壓力傳感器的電壓值,咱們能夠換算獲得對應的壓力值。而後根據血壓算法,找到對應的收縮壓和舒張壓。系統實現的核心就是濾波和尋找算法。在ADC採樣以前加入一個硬件的RC高通濾波器得到交流信號。可是這個交流信號採樣後依然會有ADC自己的噪聲和白噪聲,這時就須要加入軟件濾波算法。html
##有限長濾波器## 有限長濾波器是一種數字濾波器(finite impulse response filter)。窗函數法設計FIR數字濾波器是在時域進行的,於是必須由理想的頻率響應推導出對應的單位取樣響應hd(n),hd(n)是無限的。必須設計一個有限的單位取樣響應h (n)去逼近hd(n) 。算法
有限長單位脈衝響應hd(n)能夠由期待獲得的頻率響應函數和公式hd(n)=1/2π∫Hd(e^jw)(e^jw)dw獲得。函數
##Matlab實現##設計
<!-- lang: cpp --> n=2;f0=0.6;fs=200; %2表明階數,fs爲採樣率,f0是截止頻率 [b,a]=butter(n,f0/(fs/2),'high') %用butter函數獲取butter濾波器的係數 y(1:3)=0; %濾波後的前面3個點爲0 for i=3:1:num2 %高通濾波,從第3個點到最後一個點 y(i)=-1*(a(2)*y(i-1)+a(3)*y(i-2))+b(1)*u(i)+b(2)*u(i-1)+b(3)*u(i-2);
##C實現##3d
<!-- lang: cpp --> void butter_high(double* in,double* out,int length) { int i; for(i=2;i<length-1;i++) out[i]=-1*(A2_H*out[i-1]+A3_H*out[i-2])+B1_H*in[i]+B2_H*in[i-1]+B3_H*in[i-2]; }
其中A2_H,A3_H爲Matlab算得的濾波係數。我感受FIR和小波算法很像,都是構造一些係數用來卷積點。而這些係數相乘後的頻率響應在頻域上恰好構造了一個高通濾波器。這就達到了濾波的目的。說實話,仍是沒理解太透徹。由於信號與系統實在忘得太快了。code
##Reference## [1].http://wenku.baidu.com/view/dae2fb0103d8ce2f0066236b.htmlhtm