В этом примере показано, как фильтровать низкочастотный сигнал ЭКГ, который содержит высокочастотный шум.
Создайте один период сигнала ЭКГ. ecg функция создает сигнал ЭКГ длиной 500. sgolayfilt функция сглаживает сигнал ЭКГ с помощью сглаживающего фильтра Савицки-Голая (многочлена).
x = ecg(500).'; y = sgolayfilt(x,0,5); [M,N] = size(y);
Инициализируйте область времени для просмотра шумного сигнала и отфильтрованного сигнала.
Fs = 1000; TS = timescope('SampleRate',Fs,... 'TimeSpanSource','Property',... 'TimeSpan',1.5,... 'ShowGrid',true,... 'NumInputPorts',2,... 'LayoutDimensions',[2 1]); TS.ActiveDisplay = 1; TS.YLimits = [-1,1]; TS.Title = 'Noisy Signal'; TS.ActiveDisplay = 2; TS.YLimits = [-1,1]; TS.Title = 'Filtered Signal';
Проектирование фильтра нижних частот минимального порядка с частотой края полосы пропускания 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);
Проектирование фильтра верхних частот минимального порядка с частотой края полосы стоп-сигналов 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);
Шумный сигнал содержит сглаженный ЭКГ-сигнал вместе с высокочастотным шумом. Сигнал фильтруется с помощью фильтра нижних частот. Просмотрите шумный сигнал и отфильтрованный сигнал, используя область времени.
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)
