Этот пример показывает, как lowpass фильтровать сигнал ЭКГ, который содержит шум высокой частоты.
Создайте один период сигнала ЭКГ. The ecg
функция создает сигнал ЭКГ длины 500. The 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';
Проектируйте 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);
Проектируйте высокочастотный фильтр минимального порядка с частотой ребер стоповой полосы 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);
Этот сигнал с шумом содержит сглаженный сигнал ЭКГ вместе с высокой частотой шумом. Сигнал фильтруется с помощью 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)