Быстрое преобразование Фурье — различия между версиями
 (→Алгоритм построения БПФ)  | 
				м (rollbackEdits.php mass rollback)  | 
				||
| (не показано 15 промежуточных версий 4 участников) | |||
| Строка 12: | Строка 12: | ||
Метод основывается на том, что степени одних комплексных корней единицы в степени <tex>n</tex> дают другие.    | Метод основывается на том, что степени одних комплексных корней единицы в степени <tex>n</tex> дают другие.    | ||
| − | + | Cначала мы разделяем вектор коэффициентов на два вектора, рекурсивно вычисляем значение ДПФ для них, и объединяем их в одно ДПФ.  | |
== Алгоритм построения БПФ ==  | == Алгоритм построения БПФ ==  | ||
| − | Пусть имеется многочлен <tex>A(x)</tex>   | + | Пусть имеется многочлен <tex>A(x)</tex> порядка <tex>n</tex>, где <tex>n > 1, n = 2^t</tex>. Если <tex>n</tex> не является степенью двойки, добавим недостающие члены и положим коэффициенты равными нулю.  | 
<center><tex> A(x) = a_0 x^0 + a_1 x^1 + \ldots + a_{n-1} x^{n-1} </tex></center>  | <center><tex> A(x) = a_0 x^0 + a_1 x^1 + \ldots + a_{n-1} x^{n-1} </tex></center>  | ||
| Строка 33: | Строка 33: | ||
| − | Мы разбили исходный многочлен на два многочлена, имеющих вдвое меньшую степень. Нам необходимо по вычисленным <tex>DFT(A_0)</tex> и <tex>DFT(A_1)</tex> за линейное время вычислить <tex>DFT(A)</tex>. Так как здесь используется идея   | + | Мы разбили исходный многочлен на два многочлена, имеющих вдвое меньшую степень. Нам необходимо по вычисленным <tex>\mathrm{DFT}(A_0)</tex> и <tex>\mathrm{DFT}(A_1)</tex> за линейное время вычислить <tex>\mathrm{DFT}(A)</tex>. Так как здесь используется идея ''разделяй и властвуй'', то асимптотическая оценка будет <tex>O(n \log n)</tex>.  | 
Пусть <tex>\mathrm{DFT}(A_0) = \{y_k^0\}^{\frac{n}{2}-1}_{k=0}</tex> и <tex>\mathrm{DFT}(A_1) = \{y_k^1\}^{\frac{n}{2} - 1}_{k=0}</tex>. Найдем вектор значений <tex>\mathrm{DFT}(A) = \{y_k\}^{n-1}_{k=0}</tex>.  | Пусть <tex>\mathrm{DFT}(A_0) = \{y_k^0\}^{\frac{n}{2}-1}_{k=0}</tex> и <tex>\mathrm{DFT}(A_1) = \{y_k^1\}^{\frac{n}{2} - 1}_{k=0}</tex>. Найдем вектор значений <tex>\mathrm{DFT}(A) = \{y_k\}^{n-1}_{k=0}</tex>.  | ||
| Строка 132: | Строка 132: | ||
*[[Дискретное преобразование Фурье]]  | *[[Дискретное преобразование Фурье]]  | ||
| − | == Источники ==  | + | == Источники информации ==  | 
*[https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Быстрое преобразование Фурье]  | *[https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5 Википедия {{---}} Быстрое преобразование Фурье]  | ||
*[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]  | *[http://e-maxx.ru/algo/fft_multiply MAXimal::algo::Быстрое преобразование Фурье за O (N log N)]  | ||
| − | [[Категория:   | + | [[Категория: Алгоритмы и структуры данных]]  | 
| + | [[Категория: Алгоритмы алгебры и теории чисел]]  | ||
| + | [[Категория: Основные элементы теории чисел]]  | ||
| + | [[Категория: Основные алгоритмы теории чисел]]  | ||
Текущая версия на 19:06, 4 сентября 2022
| Определение: | 
| Быстрое преобразование Фурье (англ. Fast Fourier Transform, FFT) — метод, позволяющий вычислять дискретное преобразование Фурье за время . | 
Содержание
Описание задачи
| Задача: | 
| Необходимо научиться вычислять прямое и обратное дискретное преобразование Фурье многочлена степени за время . | 
Метод основывается на том, что степени одних комплексных корней единицы в степени  дают другие. 
Cначала мы разделяем вектор коэффициентов на два вектора, рекурсивно вычисляем значение ДПФ для них, и объединяем их в одно ДПФ.
Алгоритм построения БПФ
Пусть имеется многочлен порядка , где . Если не является степенью двойки, добавим недостающие члены и положим коэффициенты равными нулю.
Разделим на два многочлена, где один будет с четными, а другой с нечетными коэффициентами:
Многочлен получается из и следующим образом:
Мы разбили исходный многочлен на два многочлена, имеющих вдвое меньшую степень. Нам необходимо по вычисленным  и  за линейное время вычислить . Так как здесь используется идея разделяй и властвуй, то асимптотическая оценка будет .
Пусть и . Найдем вектор значений .
- Из получаем значения для первой половины коэффициентов:
 
- Для второй половины получаем:
 
Заметим, что , тогда:
Таким образом, мы получили:
Алгоритм построения обратного БПФ
Пусть вектор — значения многочлена степени в точках . Необходимо, по данному вектору восстановить коэффициенты многочлена.
Рассмотрим ДПФ в матричном виде:
Отсюда можно найти вектор , умножив вектор на матрицу обратную матрице Вандермонда (матрица слева).
Непосредственной проверкой можно убедиться, что обратная матрица имеет вид:
Получаем формулу для :
Аналогично прямому ДПФ, по принципу разделяй и властвуй посчитаем .