`fft` не возвращает то, что должно - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь выполнить преобразование Фурье, используя numpy's fft следующим образом:

import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(0,1, 128)
x = np.cos(2*np.pi*t)

s_fft = np.fft.fft(x)
s_fft_freq = np.fft.fftshift(np.fft.fftfreq(t.shape[-1], t[1]-t[0]))
plt.plot(s_fft_freq, np.abs(s_fft))

Результат, который я получаю

enter image description here

, что неправильно, так как я знаю, что FT должен достигать пика в f = 1, так как частота cos равна 1.

Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Вы применяете только fftshift к меткам оси x, а не к фактическим величинам БПФ - вам просто нужно применить s_fft = np.fft.fftshift(np.fft.fft(x)).

0 голосов
/ 25 июня 2018

Есть 2 или 3 вещи, которые вы ошиблись:

  1. БПФ будет пиковым в двух положениях для чистой реальной частоты. Это плюс и минус частоты. Единственный способ получить единственный пик в области Фурье - это получить комплексный сигнал (или иметь тривиальный компонент постоянного тока).

  2. (если с f вы имеете в виду частотный индекс) При использовании ДПФ число выборок будет определять, сколько у вас частотных компонентов. При самом высоком частотном показателе вы всегда близки к колебаниям на выборку: (-1) ^ t

  3. (если с f вы подразумеваете амплитуду) Есть много определений ДПФ , влияющих как на прямое, так и на обратное преобразование. Это повлияет на то, как значения интерпретируются при чтении спектра.

...