주요 콘텐츠

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

영위상 필터링

R2026a

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("Time (ms)")
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 Time (ms), ylabel Amplitude contains 3 objects of type line. These objects represent 500 Hz component, MEX, MATLAB.