В этом примере показано, как к 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 = 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);
Спроектируйте минимальный порядок 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)