Как точно Вы вычисляете Быстрое преобразование Фурье?

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

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

15
задан ShreevatsaR 12 July 2010 в 20:06
поделиться

4 ответа

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

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

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

7
ответ дан 1 December 2019 в 00:59
поделиться

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

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

2
ответ дан 1 December 2019 в 00:59
поделиться

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

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

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

Учитывая N чисел f0, f1, f2, ..., fN-1, ДПФ дает другой набор N чисел.

В частности: Пусть ω - примитивный N-й корень из 1 (либо в комплексных числах, либо в некотором конечном поле), что означает, что ωN=1, но никакая меньшая степень не равна 1. Можно представить fk как коэффициенты многочлена P(x) = ∑fkxk. N новых чисел F0, F1, ..., FN-1, которые дает ДПФ, являются результатами оценки многочлена на мощностях ω. То есть для каждого n от 0 до N-1 новое число Fn равно P(ωn) = ∑0≤k≤N-1 fkωnk.

image of dft

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

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

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

Итак, вот один из способов выполнения БПФ. Я заменю N на 2N для упрощения обозначений. У нас есть f0, f1, f2, ..., f2N-1, и мы хотим вычислить P(ω0), P(ω1), .... P(ω2N-1), где мы можем записать

P(x) = Q(x) + ωNR(x) с

Q(x) = f0 + f1x + ... + fN-1xN-1

R(x) = fN + fN+1x + ... + f2N-1x2N-1

Теперь вот в чем прелесть. Обратите внимание, что значение ωk+N очень просто связано со значением ωk:
P(ωk+N) = ωN(Q(ωk) + ωNR(ωk)) = R(ωk) + ωNQ(ω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).

Примеры ДПФ

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

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

Для 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+c-d, a-bi-c+di). В частности, пример из вашего вопроса: ДПФ на (1,0,0,0,0) дает (1,1,1,1), не очень, наверное, поучительный.

27
ответ дан 1 December 2019 в 00:59
поделиться

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

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

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

2
ответ дан 1 December 2019 в 00:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: