Проверка личности Парсеваля с Matlab - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь проверить идентичность Парсеваля с помощью 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)?

...