вычисление ДПФ временного сигнала в MATLAB

Этот код вычисляет ДПФ из временной области. Может ли кто-нибудь увидеть код ниже и помочь мне получить правильный ответ? моя проблема: когда я меняю значение N, например, на 4, 5, 10 или другие значения. X(1) меняется вместе с этим. но я думаю, что X (1) должен быть одинаковым для каждого значения N. точно так же, как форма ниже: значение N изменяется, но вертикальное значение остается прежним. Я ценю, если вы поможете мне. Спасибо.

введите здесь описание изображения

clear; clc;
% %%  Analytical
N=4;
k=0:N-1;
X=zeros(N,1);
t=k/N;
x=(5+2*cos(2*pi*t-pi/2)+3*cos(4*pi*t))
%x=abs((1-(0.012.*(pi.*52.*(t-0.3721)).^2)).*exp(-(pi.*52.*(t-0.3721).^2)))
abs(sum(x))

for k=0:N-1
    for n=0:N-1
        X(k+1)=X(k+1)+x(n+1).*exp(-1i.*2.*pi.*(n).*(k)/N);
    end
end

k1=[0:N-1];
stem(k1,abs(X))
% xlim([0 1])
% ylim([-1 1])
xlabel('Frequency');
ylabel('|X(k)|');
title('Frequency domain - Magnitude response')

person Sanaz Darzipour    schedule 09.11.2020    source источник


Ответы (1)


Ваше определение ДПФ (которое, вероятно, является наиболее распространенным определением) не имеет свойства, согласно которому X(1) остается постоянным с N. Вместо этого X(1)/N остается постоянным. Чтобы использовать это ДПФ для получения входных величин на различных частотах, вам нужно разделить выход ДПФ на N.

Чтобы убедиться в этом, вы можете вызвать функцию Matlab fft и сравнить с вашими результатами. Вы должны получить тот же ответ от fft Matlab. Обратите внимание, что в документации Matlab fft говорится:

Результирующая амплитуда БПФ равна A*n/2, где A — исходная амплитуда, а n — количество точек БПФ.

person Eric Backus    schedule 20.11.2020