Main Content

생성된 C 코드를 사용하여 수정된 주기도 계산하기

윈도우를 사용하여 입력 신호의 수정된 주기도 PSD(파워 스펙트럼 밀도) 추정값을 반환하는 함수 periodogram_data.m을 만듭니다. 함수는 이산 푸리에 변환 점의 개수를 입력 신호의 길이와 동일하게 지정합니다.

type periodogram_data
function [pxx,f] = periodogram_data(inputData,window)
%#codegen
nfft = length(inputData);
[pxx,f] = periodogram(inputData,window,nfft);
end

codegen (MATLAB Coder)을 사용하여 MEX 파일 을 생성합니다.

  • 함수의 %#codegen 지시문은 이 MATLAB® 코드가 코드 생성을 위한 코드임을 나타냅니다.

  • -args 옵션은 MEX 파일에 대한 입력값의 크기, 클래스, 실수/복소수 여부를 정의하는 예제 인수를 지정합니다. 예를 들어, inputData를 1024×1 배정밀도 확률 벡터로 지정하고 window를 길이가 1024인 해밍 윈도우로 지정합니다. 이후 MEX 함수를 호출할 때 1024개 샘플을 갖는 입력 신호와 윈도우를 사용하게 됩니다.

  • MEX 함수에 다른 이름을 지정하려면 -o 옵션을 사용하십시오.

  • 코드 생성 리포트를 확인하려면 codegen 명령 끝에 -report 옵션을 추가하십시오.

codegen periodogram_data -args {randn(1024,1),hamming(1024)}
Code generation successful.

periodogram 함수와 생성한 MEX 함수를 사용하여 1024개 샘플을 갖는 잡음이 있는 정현파의 PSD 추정값을 계산합니다. 2π/5 rad/sample의 정규화 정현파 주파수와 핸 윈도우를 지정합니다. 두 추정값을 플로팅하여 두 값이 일치하는 것을 확인합니다.

N = 1024;
x = 2*cos(2*pi/5*(0:N-1)') + randn(N,1);
periodogram(x,hann(N))
[pxMex,fMex] = periodogram_data(x,hann(N));
hold on
plot(fMex/pi,pow2db(pxMex),':','Color',[0 0.4 0])
hold off
grid on
legend('periodogram','MEX function')

Figure contains an axes object. The axes object with title Periodogram Power Spectral Density Estimate contains 2 objects of type line. These objects represent periodogram, MEX function.