Я пытаюсь проверить идентичность Парсеваля с помощью Matlab, но у меня возникают проблемы с поиском связного значения при интеграции в частотную область. Возможно, я делаю что-то глупо неправильно, но пока не могу понять, что ....
Вот мой код:
function [] = TestParseval()
%[
% Init
n = 1024;%512;
t = linspace(0, 20, n);
fe = 1/(t(2)-t(1));
% Signal of fs Hz in time domain
fs = fe / 10; % this way it is less than Fe/2
x = exp(1i*2*pi*fs*t);
% Compute signal in frequency domain
X = fft(x);
fr = (0:(n-1))/n;
f = fr*fe;
% Discrete Parseval
E1 = sum(x.*conj(x));
E2 = sum(X.*conj(X)) / n;
disp(sprintf('Discrete: time=%G, freq=%G', E1, E2));
% Parseval integral
E11 = trapz(t, x.*conj(x));
E22 = trapz(f, X.*conj(X));
disp(sprintf('Integral: time=%G, freq=%G', E11, E22));
%]
end
При дискретном суммировании все в порядке, суммирование элементов во временной области равно суммированию элементов в частотной области, деленному на n.
При выполнении интеграции во временной области я получаю значение, пропорциональное продолжительности интеграции (как и ожидалось), но при выполнении интеграции в частотной области значение является некогерентным и изменяется как n
, так и по продолжительности.
Я не совсем понимаю, почему интеграция в частотной области не дает согласованного результата? Может быть, потому что это должно быть Dira c spike в теории (бесконечное значение по нулевому широкому частотному диапазону => интегрирование = 1), а не на практике (наблюдение конечной длины => умножено на sin c)?