Почему мое дискретное временное преобразование Фурье неверно? - PullRequest
0 голосов
/ 23 мая 2018

Я создал код, который пытается вычислить DTFT функции.

Это мой код:

figure
n = linspace(0,2*pi,1500); %example
x = cos(n); %example
l = length(n);
syms k w
Xk = sum(x(1:l).*exp((-1i.*k.*2/l.*pi.*(0:l-1))));
Xk = matlabFunction(Xk);
d = linspace(-5,5,1000);
stem(d,Xk(d))

Чтобы проверить мой код, как вы можете видеть, я попытался вычислить дискретное временное преобразование Фурье для cos(n), выбрав его и сравнивэто преобразование Фурье с непрерывным временем cos(x), но, к сожалению, я не получаю тот же результат.

Вот что я получаю, запустив этот код:

click here

и когда я увеличиваю n, хотя значения в -1,1 увеличиваются, как мы и ожидаем, ненулевые значения также увеличиваются в отличие от ожидаемого.

(Преобразование Фурье cos(x) равно deltaFunction(x-1)+deltaFunction(x+1))

Спасибо за любую помощь.Я знаю, что в MATLAB есть функции, которые делают это, но я пытаюсь создать их самостоятельно.

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Во-первых, показанный вами результат верен для DTFT косинуса, расположенного между 0 и 2π.У меня есть ощущение, что вы заинтересованы в вычислении ДПФ косинуса от -∞ до + ∞, который продемонстрировал Крис Луенго .

Я думаю, что было бы полезно поговорить с помощью преобразования Фурьекосинуса, оконного косинуса и кратко DTFT.


Преобразование Фурье косинуса равно

Fourier transform of cosine

, гдекосинус определен для t = -∞ до + ∞, который может быть вычислен с помощью ДПФ.Но преобразование Фурье оконного косинуса

Windowed cosine

равно

Fourier transform of windowed cosine

где N - количество периодов окна (1 выше).Построение этого в MATLAB дает

Plot of Fourier transform of windowed cosine

Итак, если в MATLAB вы хотите вычислить DTFT косинуса, ваш вход должен быть сэмплированным косинусом от t =От -∞ до + ∞ и ваш результат должен быть похож на

Plot of DTFT of cosine

, поскольку DTFT является периодическим с периодом 2π, а DFT - нет.DTFT косинуса

DTFT of cosine

0 голосов
/ 24 мая 2018

То, что вы видите, является результатом использования нецелых значений k.

DTFT:

DTFT принимает бесконечный входной сигнал.У вас этого нет, у вас есть только один период косинуса.Делая предположение, что остальная часть сигнала - все нули, вы вводите много высоких частот при переходе от 1 до 0 при t = 0 и t = 2π.Вы также вводите некоторые более низкие частоты.Эти частоты - те, которые вы видите на своем графике.

Если вы хотите вычислить DTFT cos(t) с t, не ограниченным одним периодом, то вам нужна бесконечная сумма в ваших вычислениях, выКонечно, это невозможно.

Если вы хотите предположить, что ваш сигнал является периодическим, то вы вычисляете ДПФ.

ДПФ:

У вас есть серия выборок, которую вы определяете как n = 0:l-1 в своем преобразовании, при этом l принимает функцию N в уравнении , как показано в Википедии :

DFT equation

В этом уравнении и n, и k являются целыми числами.k обычно также определяется в диапазоне 0:l-1, но, поскольку оно является периодическим, его можно определить, например, в диапазоне -ceil(l/2):ceil(l/2)-1.

Установка d на наборЦелочисленные значения в вашем коде, я вижу ожидаемый результат:

d = -10:10;
stem(d,abs(Xk(d)))

output

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...