Фильтрация нулевой фазы

Спроектируйте Фильтр Баттерворта lowpass с частотой на 1 кГц 3 дБ, чтобы реализовать фильтрацию нулевой фазы на данных, произведенных на уровне 20 кГц.

type myZerophaseFilt.m
function output  = myZerophaseFilt(input) %#codegen

[B,A] = butter(20,0.314);
output = filtfilt(B,A,input);

end

Используйте codegen, чтобы создать файл MEX для myZerophaseFilt.m.

codegen myZerophaseFilt -args {zeros(1,20001)} -o myZerophaseFilt_mex -report
Code generation successful: To view the report, open('codegen/mex/myZerophaseFilt/html/report.mldatx')

Сгенерируйте шумный сигнал синусоиды, как введено к фильтру.

Fs = 20000;
t = 0:1/Fs:1;
comp500Hz = cos(2*pi*500*t);
signal = comp500Hz + sin(2*pi*4000*t) + 0.2*randn(size(t));

Отфильтруйте входные данные с помощью и MATLAB® и MEX-функций.

FilteredData = myZerophaseFilt(signal);
MexFilteredData = myZerophaseFilt_mex(signal);

Постройте компонент на 500 Гц и отфильтрованные данные.

tms = t*1000;
plot(tms,comp500Hz)
hold on
plot(tms,MexFilteredData)
plot(tms,FilteredData)
hold off

xlabel('Milliseconds')
ylabel('Amplitude')
axis([0 25 -1.8 1.8])
legend('500 Hz component','MEX','MATLAB')

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent 500 Hz component, MEX, MATLAB.