영위상 필터링
1kHz 3dB 주파수를 갖는 저역통과 버터워스 필터를 설계하여 20kHz 레이트로 샘플링된 데이터에 대해 영위상 필터링을 구현합니다.
type myZerophaseFilt.mfunction output = myZerophaseFilt(input) %#codegen [B,A] = butter(20,0.314); output = filtfilt(B,A,input); end
codegen을 사용하여 myZerophaseFilt.m에 대한 MEX 파일을 만듭니다.
codegen myZerophaseFilt -args {zeros(1,20001)} -o myZerophaseFilt_mex -report
Code generation successful: View report
필터에 대한 입력으로 잡음 있는 정현파 신호를 생성합니다.
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);
500Hz 성분과 필터링된 데이터를 플로팅합니다.
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')
