Спроектируйте Фильтр Баттерворта 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')