Remove the 20 Hz low frequency and 95 Hz high frequency from an ecg signal with bandpass filter
5 ビュー (過去 30 日間)
古いコメントを表示
close all
clear all
M=dlmread('FOETAL_ECG.dat')
v=M(:,3)
figure
subplot(4,1,1),plot(v)
Fe=250;
Te=1/Fe;
n=length(v);
t=(0:n-1)/Fe;
subplot(4,1,2),plot(t,v),
V=fft(v);
sp=abs(V);
%ff=((0:n-1)*Fe)/n
ff=(0:(n-1))/n*Fe;
subplot(4,1,3),
plot(ff(1:length(ff)/2),sp(1:length(sp)/2));
N=4;
Wn= [19 96];
filtru=fir1(N,Wn/(Fe/2),'bandpass')
semnalfiltrat_fir1=filter(filtru,1,v/100);
subplot(4,1,4),plot(t,semnalfiltrat_fir1),
figure
subplot(2,1,1),plot(t,v),
subplot(2,1,2),plot(t,semnalfiltrat_fir1),
H_fir1=abs(a);
figure
plot(b,H_fir1),
1 件のコメント
Star Strider
2021 年 12 月 17 日
Removing those specific frequencies requires either an IIR bandstop filter for each, or a FIR filter that can remove both at the same time. The problem is that filtering out the 20 Hz signal will also filter out a significant part of the EKG record (usually considerd to span 0 Hz to 100 Hz).
Since I seriously doubt that this would ever be a real-world situation, I assume this is a homework problem.
We give hints for homework problems, so I have here.
.
回答 (1 件)
Ashutosh Singh Baghel
2021 年 12 月 20 日
編集済み: Ashutosh Singh Baghel
2021 年 12 月 20 日
Hi Denis,
I understand that you wish to remove several freq peaks from a signal, this can be achived by using two bandstop filters centered at the frequencies to be removed. Follow the folloing example for a better understanding. A signal having multiple frequency contents is passed through a bandstop filter of center frequency as 95Hz. the output of filter 'X_out' is then plotted later.
Here
fs = 500; %Sampling Frequency
t = 0:1/fs:4-1/fs; %time axis
x1 = sin(2*pi*t*20); %signal one with 20Hz
x2 = sin(2*pi*t*40); %signal two with 40Hz
x3 = sin(2*pi*t*95); %signal three with 95Hz
x4 = sin(2*pi*t*45); %signal four with 45Hz
X = x1+x2+x3+x4; %signal containing all
[pxx,fxx] = pspectrum(X,fs);
plot(fxx,pow2db(pxx))
N_1 = 10; % Order
Fstop1_1 = 94; % First Stopband Frequency
Fstop2_1 = 96; % Second Stopband Frequency
Astop_1 = 80; % Stopband Attenuation (dB)
% Construct an FDESIGN object and call its CHEBY2 method.
h_1 = fdesign.bandstop('N,Fst1,Fst2,Ast', N_1, Fstop1_1, Fstop2_1, Astop_1, fs);
Hd_95 = design(h_1, 'cheby2');
X_ans = filter(Hd_95,X);
[pxx_out,fxx_out] = pspectrum(X_ans,fs);
plot(fxx_out,pow2db(pxx_out))
Similarly, a 20Hz bandstop filter can be designed. Follow the MATLAB documentation link on filterDesign, and how to filter data.
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Filter Design についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!