Вычислите модифицированную периодограмму Используя сгенерированный код C

Создайте функциональный periodogram_data.m это возвращает модифицированную оценку спектральной плотности мощности (PSD) периодограммы входного сигнала с помощью окна. Функция задает много дискретных точек преобразования Фурье, равных длине входного сигнала.

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 опция.

  • Если вы хотите просмотреть отчет генерации кода, добавьте -report опция в конце codegen команда.

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

Вычислите оценку PSD шумной синусоиды с 1024 выборками с помощью функции периодограммы и MEX-функции, которую вы сгенерировали. Укажите, что синусоида нормировала частоту 2π/5 рад/отсчет и окно Hann. Постройте две оценки, чтобы проверить, что они совпадают.

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.