Compute Modified Periodogram Using Generated C Code
Create a function periodogram_data.m
that returns the modified periodogram power spectral density (PSD) estimate of an input signal using a window. The function specifies a number of discrete Fourier transform points equal to the length of the input signal.
type periodogram_data
function [pxx,f] = periodogram_data(inputData,window) %#codegen nfft = length(inputData); [pxx,f] = periodogram(inputData,window,nfft); end
Use codegen
(MATLAB Coder) to generate a MEX function.
The
%#codegen
directive in the function indicates that the MATLAB® code is intended for code generation.The
-args
option specifies example arguments that define the size, class, and complexity of the inputs to the MEX-file. For this example, specifyinputData
as a 1024-by-1 double precision random vector andwindow
as a Hamming window of length 1024. In subsequent calls to the MEX function, use 1024-sample input signals and windows.If you want the MEX function to have a different name, use the
-o
option.If you want to view a code generation report, add the
-report
option at the end of thecodegen
command.
codegen periodogram_data -args {randn(1024,1),hamming(1024)}
Code generation successful.
Compute the PSD estimate of a 1024-sample noisy sinusoid using the periodogram function and the MEX function you generated. Specify a sinusoid normalized frequency of rad/sample and a Hann window. Plot the two estimates to verify they coincide.
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')