주요 콘텐츠

영위상 필터링

1kHz 3dB 주파수를 갖는 저역통과 버터워스 필터를 설계하여 20kHz 레이트로 샘플링된 데이터에 대해 영위상 필터링을 구현합니다.

type myZerophaseFilt.m
function 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')

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