Удаление высокочастотного шума от сигнала ECG

В этом примере показано, как к lowpass фильтруют сигнал ECG, который содержит высокочастотный шум.

Создайте один период сигнала ECG. ecg функция создает сигнал ECG длины 500. sgolayfilt функция приглаживает сигнал ECG использование Savitzky-Golay (полином), сглаживающий фильтр.

x = ecg(500).';
y = sgolayfilt(x,0,5);
[M,N] = size(y);

Инициализируйте осциллограф времени, чтобы просмотреть сигнал с шумом и отфильтрованный сигнал.

Fs = 1000;
TS = dsp.TimeScope('SampleRate',Fs,...
                      'TimeSpan',1.5,...
                      'YLimits',[-1 1],...
                      'ShowGrid',true,...
                      'NumInputPorts',2,...
                      'LayoutDimensions',[2 1],...
                      'Title','Noisy and Filtered Signals');

Спроектируйте минимальный порядок фильтр lowpass с частотой ребра полосы пропускания 200 Гц и частотой ребра полосы задерживания 400 Гц. Желаемая амплитуда частотной характеристики и весов задана в A и D векторы, соответственно. Передайте эти векторы спецификации firgr функционируйте, чтобы спроектировать коэффициенты фильтра. Передайте эти спроектированные коэффициенты dsp.FIRFilter объект.

Fpass  = 200;
Fstop = 400;
Dpass = 0.05;
Dstop = 0.0001;
F     = [0 Fpass Fstop Fs/2]/(Fs/2);
A     = [1 1 0 0];
D     = [Dpass Dstop];
b = firgr('minorder',F,A,D);
LP = dsp.FIRFilter('Numerator',b);

Спроектируйте минимальный порядок highpass фильтр с частотой ребра полосы задерживания 200 Гц и частотой ребра полосы пропускания 400 Гц. Спроектируйте фильтр с помощью firgr функция. Передайте эти спроектированные коэффициенты dsp.FIRFilter объект.

Fstop = 200;
Fpass = 400;
Dstop = 0.0001;
Dpass = 0.05;
F = [0 Fstop Fpass Fs/2]/(Fs/2); % Frequency vector
A = [0 0 1 1]; % Amplitude vector
D = [Dstop Dpass];   % Deviation (ripple) vector
b  = firgr('minord',F,A,D);
HP = dsp.FIRFilter('Numerator',b);

Сигнал с шумом содержит сглаживавший сигнал ECG наряду с высокочастотным шумом. Сигнал отфильтрован с помощью фильтра lowpass. Просмотрите сигнал с шумом и отфильтрованный сигнал с помощью осциллографа времени.

tic;
while toc < 30
    x = .1 * randn(M,N);
    highFreqNoise = HP(x);
    noisySignal = y + highFreqNoise;
    filteredSignal = LP(noisySignal);
    TS(noisySignal,filteredSignal);
end

% Finalize
release(TS)

Для просмотра документации необходимо авторизоваться на сайте