Создание функции periodogram_data.m который возвращает модифицированную оценку спектральной плотности мощности периодограммы (PSD) входного сигнала с использованием окна. Функция задает количество дискретных точек преобразования Фурье, равное длине входного сигнала.
type periodogram_datafunction [pxx,f] = periodogram_data(inputData,window) %#codegen nfft = length(inputData); [pxx,f] = periodogram(inputData,window,nfft); end
Использовать codegen (Кодер MATLAB) для генерации функции 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. Задайте нормализованную частоту синусоиды рад/образец и окно Ганна. Постройте график двух оценок для проверки их совпадения.
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')
