В чем разница между numpy.fft.fft и numpy.fft.rfft? - PullRequest
0 голосов
/ 18 сентября 2018

В документации сказано, что np.fft.fft делает это:

Вычислить одномерное дискретное преобразование Фурье.

и np.fft.rfft делает это:

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

Я также вижу, что для моих данных (звуковые данные, действительные значения), np.fft.fft возвращает двумерный массив формы (number_of_frames, fft_length), содержащий комплексные числа.

Для np.fft.rfft возвращает двумерный массив формы (number_of_frames, ((fft_length / 2) + 1)), содержащий комплексные числа. Я склонен полагать, что это содержит только ненужных бункеров FFT .

Может кто-нибудь объяснить более подробно разницу между командами и почему форма возвращаемого массива отличается. Спасибо.

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

причина объяснена в документах:

Когда ДПФ вычисляется для чисто реального ввода, выход является эрмитово-симметричным, то есть отрицательные частотные слагаемые являются просто комплексными сопряжениями соответствующегочлены с положительной частотой и члены с отрицательной частотой, следовательно, являются избыточными.Эта функция не вычисляет отрицательные частотные слагаемые, поэтому длина преобразованной оси выходного сигнала равна n // 2 + 1.

Как следствие, алгоритм оптимизируется, а rfft работает в два раза быстрее,Кроме того, спектр легче построить:

In [124]: s=abs(sin(arange(0,2**13,3)))

In [125]: sp=rfft(s)

In [126]: plot(abs(sp))

enter image description here

0 голосов
/ 18 сентября 2018

Основная разница объясняется здесь на примере. Как говорится:

import numpy as np

data = [0, 1, 2, 1, 0]

print("FFT output\n", np.fft.fft(data))
print("RFFT output\n", np.fft.rfft(data))

приведет к:

FFT output
 [ 4.        +0.j         -2.11803399-1.53884177j  0.11803399+0.36327126j
  0.11803399-0.36327126j -2.11803399+1.53884177j]
RFFT output
 [ 4.        +0.j         -2.11803399-1.53884177j  0.11803399+0.36327126j]

Обратите внимание, как конечный элемент fft вывода является комплексом сопряжение второго элемента, для реального ввода. Для rfft , это Симметрия используется для вычисления только неотрицательной частоты Условия .

...