Как именно вы вычисляете быстрое преобразование Фурье? - PullRequest
14 голосов
/ 12 июля 2010

Я много читал о быстром преобразовании Фурье и пытаюсь понять его низкоуровневый аспект. К сожалению, Google и Википедия не очень помогают ... и у меня есть 5 открытых книг по алгоритмам, которые тоже мало помогают.

Я пытаюсь найти БПФ чего-то простого, например, вектора [1,0,0,0]. Конечно, я мог бы просто подключить его к Matlab, но это не поможет мне понять, что происходит под ним. Кроме того, когда я говорю, что хочу найти БПФ вектора, это то же самое, что сказать, что я хочу найти ДПФ вектора просто с помощью более эффективного алгоритма?

Ответы [ 5 ]

26 голосов
/ 12 июля 2010

Вы правы, "быстрое преобразование Фурье - это просто имя для любого алгоритма, который вычисляет дискретное преобразование Фурье за ​​O (n log n) времени, и существует несколько таких алгоритмов.

Вот простейшее объяснение ДПФ и БПФ, как мне кажется, а также примеры для малого N, которые могут помочь.(Обратите внимание, что существуют альтернативные интерпретации и другие алгоритмы.)

Дискретное преобразование Фурье

Дано N чисел f 0 , f 1 , f 2 ,…, f N-1 , ДПФ дает другой набор N чисел.

В частности: пусть ω будет примитивом N -го корня из 1 (либо в комплексных числах, либо в некотором конечном поле), что означает, что ω N = 1но не меньшая степень равна 1. Вы можете думать о f k как о коэффициентах многочлена P (x) = ∑f k x k , N новые числа F 0 , F 1 ,…, F N-1 , которые дает DFT, являются результатами оценивая полином при степенях ω.То есть для каждого n от 0 до N-1 новый номер F n равен P (ω n ) = ∑ 0≤k≤N-1 f k ω nk .

image of dft

[Причина выбора ω заключается в том, что обратное ДПФимеет приятную форму, очень похожую на сам ДПФ.]

Обратите внимание, что нахождение этих F наивно требует операций O (N 2 ).Но мы можем использовать специальную структуру, которая исходит из выбранных нами ω, и это позволяет нам делать это в O (N log N).Любой такой алгоритм называется быстрым преобразованием Фурье.

Быстрое преобразование Фурье

Так что вот один из способов сделать БПФ.Я заменим N на 2N, чтобы упростить обозначения.У нас есть f 0 , f 1 , f 2 ,…, f 2N-1 , и мы хотим вычислить P (ω 0 ), P (ω 1 ),… P (ω 2N-1 ), где мы можем написать

P (x) = Q (x) + ω N R (x) с

Q (x) = f 0 + f 1 x+… + F N-1 x N-1

R (x) = f N + f N + 1 x +… + f 2N-1 x 2N-1

Теперь в этом вся прелесть.Заметьте, что значение в ω k + N очень просто связано со значением в ω k :
P (ω k + N ) = ω N (Q (ω k ) + ω N R (ω k )) = R (ω k ) + ω N Q (ω k ).Таким образом, оценки Q и R от ω 0 до ω N-1 достаточно.

Это означает, что ваша первоначальная задача - оценить 2N-членный многочленP в 2N точках ω 0 до ω 2N-1 - сводится к двум задачам оценки N-членных полиномов Q и R в N точках ω 0 до ω N-1 .Так что время работы T (2N) = 2T (N) + O (N) и все то, что дает T (N) = O (N log N).

Примеры DFT

Обратите внимание, что в других определениях коэффициенты 1 / N или 1 / √N.

Для N = 2 ω = -1, а преобразование Фурье (a, b) равно (a + b, ab).).

Для N = 3 ω - комплексный корень куба из 1, а преобразование Фурье (a, b, c) - (a + b + c, a + bω + cω 2 , a + bω 2 + cω).(Поскольку ω 4 = ω.)

Для N = 4 и ω = i, а преобразование Фурье для (a, b, c, d) равно (a + b + c)+ d, a + bi-c-di, a-b + cd, a-bi-c + di).В частности, пример в вашем вопросе: DFT на (1,0,0,0) дает (1,1,1,1), возможно, не очень освещающее.

7 голосов
/ 12 июля 2010

БПФ - это просто эффективная реализация ДПФ.Результаты должны быть одинаковыми для обоих, но в целом БПФ будет намного быстрее.Сначала убедитесь, что вы понимаете, как работает DFT, поскольку его гораздо проще и легче понять.

Когда вы понимаете DFT, переходите к FFT.Обратите внимание, что, хотя общий принцип один и тот же, существует много разных реализаций и вариаций БПФ, например, прореживание во времени v прореживание по частоте, основание 2 против других излучений и смешанное основание, комплекс от комплекса к реальномукомплекс и т. д.

Хорошая практическая книга для чтения на эту тему: Быстрое преобразование Фурье и ее приложения Э. Бригама.

2 голосов
/ 29 сентября 2010

Если вы ищете простое английское объяснение DFT и немного FFT, вместо академического goggledeegoo , тогда вы должны прочитать это: http://blogs.zynaptiq.com/bernsee/dft-a-pied/

Я не мог бы объяснить это лучше сам.

2 голосов
/ 04 августа 2010

Я также новичок в преобразованиях Фурье и нашел эту онлайн-книгу очень полезной:

Руководство для ученых и инженеров по цифровой обработке сигналов

Вы к главе о дискретном преобразовании Фурье.Эта глава объясняет разницу между всеми преобразованиями Фурье, а также то, где вы будете использовать какой из них, и псевдокод, который показывает, как вы собираетесь вычислять дискретное преобразование Фурье.

2 голосов
/ 12 июля 2010

Да, FFT - это просто эффективный алгоритм DFT. Понимание самого БПФ может занять некоторое время, если вы уже не изучили комплексные числа и непрерывное преобразование Фурье; но в основном это базовое изменение базы, полученной из периодических функций.

(Если вы хотите узнать больше об анализе Фурье, я рекомендую книгу Фурье-анализ и его применения Джеральда Б. Фолланда)

...