資源簡介
對于心電信號處理不錯的資源,本次實驗是要我們先產生心電信號,再加噪聲再濾波。由一個心電信號數據表輸出心電信號,由于已知的心電信號有噪聲,所以我先將信號進行濾波,得到正確的心電信號。再加噪聲,通過濾波可以得到高頻和中頻噪聲,將原信號加上噪聲顯示再濾波。每次的時域信號都畫出了他們相應的頻譜,便于觀察。每次的濾波我也嘗試了不同的濾波器。
代碼片段和文件信息
%程序中s為原信號,s1為濾過噪聲之后的心電信號
%11107110任惠
clear;
load?data0.txt;
s=data0;
%時域波形
t=0:4/3255:4;???????%設心率為每分鐘75次,則QRS波群周期為0.8秒,5個周期為4秒
subplot(431)
plot(ts);??????????%帶噪聲的心電信號
xlabel(‘時間?t/s‘);
ylabel(‘電壓?V/mV‘);
title(‘含噪聲的ECG信號‘);
subplot(434)
x=fft(s1024);
Pxx=?x.*?conj(x)?/?1024;
f?=?3255/4*(0:216)/1024;
plot(fPxx(1:217));???????%信號頻譜
title(‘fft畫出的原信號頻譜‘)
xlabel(‘頻率‘)
ylabel(‘幅值?V‘)
subplot(432)
wp=tan(0.02*pi/2);
ws=tan(0.03*pi/2);
[NWn]=buttord(wpws0.520‘s‘);
[numden]=butter(NWn‘s‘);
[BA]=bilinear(numden1/2);
s1=filter(BAs);???????????????????%巴特沃斯濾波得到正確信號
plot(ts1);
xlabel(‘時間?t/s‘);
ylabel(‘電壓?V/mV‘);
title(‘巴特沃斯濾波器去噪聲的ECG信號‘);
subplot(435)
w=0:pi/256:pi;
y=freqz(s11w);????????????????????%畫出信號的頻譜
plot(w/piabs(y));
axis([0?1?0?300]);
xlabel(‘頻率?w‘);
ylabel(‘幅值?V‘);
title(‘巴特沃斯去噪聲的ECG信號頻譜‘);
subplot(433)
s2=3*(rand(13256)-1);??????????????%產生噪聲
wp=tan(0.6*pi/2);
ws=tan(0.4*pi/2);
[NWn]=buttord(wpws0.120‘s‘);
[numden]=butter(NWn‘high‘‘s‘);
[BA]=bilinear(numden1/2);
s3=filter(BAs2);??????????????????%得到高頻噪聲
s4=s1‘+s3;??????????????????????????%加完噪聲后的信號
plot(ts4);
xlabel(‘時間?t/s‘);
ylabel(‘電壓?V/mV‘);
title(‘加高頻噪聲的ECG信號‘);
subplot(436)
y=freqz(s41w);
plot(w/piabs(y));
axis([0?1?0?300]);
xlabel(‘頻率?w‘);
ylabel(‘幅值?V‘)
- 上一篇:Matlab一元二次方程求解程序
- 下一篇:splitting Bregman
評論
共有 條評論