Remove the 20 Hz low frequency and 95 Hz high frequency from an ecg signal with bandpass filter

4 次查看(过去 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
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
编辑: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.

类别

Help CenterFile Exchange 中查找有关 Filter Design 的更多信息

产品


版本

R2019a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by