В таких случаях вы можете использовать filtfilt
, который реализует фильтрацию нулевой фазы, т. Е. Обрабатывает данные один раз вперед и один раз назад, что не приводит к чистой задержке. Тем не менее, вы должны заметить, что эффективный порядок фильтрации в два раза больше, чем указано в b
.
Вот пример из документации (сюжет был изменен):
x=ecg(500)'+0.25*randn(500,1); %'#noisy waveform
h=fdesign.lowpass('Fp,Fst,Ap,Ast',0.15,0.2,1,60);
d=design(h,'equiripple'); %#Lowpass FIR filter
y=filtfilt(d.Numerator,1,x); %#zero-phase filtering
y1=filter(d.Numerator,1,x); %#conventional filtering
figure(1)
h=plot([x y y1]);
set(h(1),'color',[0.8,0.8,0.8])
title('Filtered Waveforms');
legend('Original waveform', 'Zero-phase Filtering','Conventional Filtering');