心电图ECG常用滤波器之陷波器
1.介紹
什么是陷波器?
其實就是一直特殊的帶通濾波器,只不過一般它的頻帶極窄,可以理解為就是濾除某種特定頻率的濾波器。
為什么心電圖ECG需要陷波器?
由于我們所處的環境,到處都有50/60Hz的交流電,所以采集的人體心電信號常常伴有50/60Hz頻率的信號干擾,也就是常說的工頻干擾,常規的低通濾波器很難完全把干擾濾除,這個需要設定一個針對特定頻率50/60Hz有很強的濾除作用的濾波器。
2.濾波器實現
這里我們直接使用IIR濾波,來設計陷波器,使用的是直接型 II結構。
使用matlab的fdatool工具設計濾波器參數(這里只以50Hz為例,其它頻率同理),經過反復測試,最終設計參數如下
圖1 50Hz陷波器?
接下來是濾波器的輸入/輸出函數模型,熟悉的話,可以直接用IIR濾波直接型 II結構的數學模型,這里我們使用matlab推導,導出剛剛設計的濾波器的Realize mode,如下:
圖2 陷波器Realize mode推導如下:(假設輸入為x,系統輸出為y)
st0?= x - a(2)*st1 - a(3)*st2;
y = st0*b(1) + st1*b(2)+st2*b(3);
st2 = st1;
st1 = st0;
其中a,b參數就是剛才設計的濾波器參數,濾波器的參數和數學模型都有了,下一章節我們將對濾波器的性能進行驗證。
3.算法驗證
我們這里直接使用matlab驗證,導出上一章節設計的濾波器,使用一段真實的心電圖,人為加上工頻干擾,輸入濾波器,看濾波器輸出能否把干擾濾除。
導入心電圖:
%0.導入原始數據 orig_x = load('D:\Documents\MATLAB\ecg_test.txt'); figure(1); subplot(4,1,1); plot(orig_x); title('原始信號');生成50Hz干擾信號:
%1.生成噪聲信號 fs = 50; %頻率 N = length(orig_x); %采樣點數 dt = 1/250; %采樣間隔 n = dt:dt:N*dt; noise = 120*sin(2*pi*fs*n); subplot(4,1,2); plot(noise); title('噪聲信號');心電圖信號疊加干擾信號:
%2.信號疊加 orig_x_add_noise = orig_x + noise; subplot(4,1,3); plot(orig_x_add_noise); title('疊加后的信號');最后一步,濾波:
%3.低通濾波處理 ld = notch_50Hz_boke; lp_output = filter(ld,orig_x_add_noise); subplot(4,1,4); plot(lp_output); title('陷波濾波后的信號');可以看到,原本心電信號是很干凈的,疊加了50Hz的干擾后,幾乎把信號全部淹沒了,但經過陷波器濾波后,信號又恢復了原樣,說明濾波效果良好。
圖3 濾波形性能驗證4.評價
本章節,我們借助matlab設計了一個陷波器,并推導了濾波器的輸入/輸出數學模型,最后使用一個實例驗證了濾波器的性能。本章節是使用IIR濾波來設計陷波器,其實目前這個陷波器濾波效果還不是最好的,目前可以使用另一種更高效的方式實現陷波器,就是使用自適應濾波器來實現,具體細節在其它章節會詳細講解。
?
總結
以上是生活随笔為你收集整理的心电图ECG常用滤波器之陷波器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常规心电图和动态心电图的区别
- 下一篇: Unity案例-实现心电图效果