Опубликован: 03.06.2019 | Уровень: для всех | Доступ: платный
Лекция 17:

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

< Лекция 16 || Лекция 17: 12 || Лекция 18 >

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

a_p=f*u_p=\sqrt{\frac2N}\sum_{j=0}^{N-1}f_j\cos\left(\frac{(2p+1)(2j+1)\pi}{2N}\right)\\
b_p=f*v_p=\sqrt{\frac2N}\sum_{j=0}^{N-1}f_j\sin\left(\frac{(2p+1)(2j+1)\pi}{2N}\right)

Давайте оценим сложность, задаваемую этими формулами. При определении вычислительной сложности будем учитывать число умножений, игнорируя сложения, поскольку это более легкие операции в сравнения с умножением. Мы предполагаем, что значения синусов и косинусов предварительно вычислены и хранятся в памяти. Проигнорируем множитель  \sqrt{\frac2N}, так как можно выбрать N/2 как степень 4, тогда деление на степень 2 является простой операцией для компьютера.

Вычисления каждого коэффициента Фурье, будет тогда включать N умножений, а поскольку коэффициентов тоже N, то сложность ДПФ, вычисляемого по этим формулам - N^2.

БПФ позволяет вычислить те же коэффициенты, но со сложностью 2N\1og_2(N). Для вектора длины 1024 (что не является чем-то необычным при цифровой обработке сигнала) сложность прямого метода -1048576, а БПФ - 20480. БПФ - рекурсивный алгоритм. Его идея -разбить исходный вектор на два вектора половинной длины, применить рекурсивно БПФ к каждому короткому вектору, а затем комбинировать две последовательности коэффициентов Фурье, построенные для коротких векторов, в последовательность коэффициентов полного вектора.

С этого момента будем полагать, что N - степень 2, N = 2^n,\; М == N/2 = 2^{n-1}

Давайте разделим вектор f = (f_0, f_1, \dots, f_{N-1}) на два коротких вектора, где компоненты с четными индексами будут принадлежать одному вектору, с нечетными - другому, f = (g_0, g_1, \dots, g_{M-1}h_{M-1}) Пока что, мы только ввели новую нотацию, не производя никаких вычислений:

g_i=f_{2i},\; h_i=f_{2i+1},\; i=0,1,\dots,M-1

В результате созданы два вектора длины 2^{n-1}:

g=(g_0,g_1,\dots,g_{2^{n-1}-1}),\;\; h=(h_0,h_1,\dots,h_{2^{n-1}-1}

Давайте применим ДПФ к векторам g и h:

g \to (a_0^g, \dots, a_{2^{n-2}-1}^g, b_0^g, \dots, b_{2^{n-2}-1}^g)\\
h \to (a_0^h, \dots, a_{2^{n-2}-1}^h, b_0^h, \dots, b_{2^{n-2}-1}^h)

Коэффициенты Фурье для g и h соответственно имеют вид:

a_s^g=\frac{1}{\sqrt{2^{n-2}}}\sum_{i=0}^{2^{n-1}-1}g_i\cos\left(\frac{(2s+1)(2i+1)\pi}{2^n}\right),\\
b_s^g=\frac{1}{\sqrt{2^{n-2}}}\sum_{i=0}^{2^{n-1}-1}g_i\sin\left(\frac{(2s+1)(2i+1)\pi}{2^n}\right)

Формулы для коэффициентов a_s^h и b_s^h аналогичны.

Теперь покажем, как можно сконструировать коэффициенты Фурье a_p,\; b_p для вектора f из коэффициентов: a_s^g и a_s^h, b_s^g и b_s^h

a_p=\frac{1}{\sqrt{2^{n-1}}}\sum_{j=0}^{2^n-1}f_i \cos \left( \frac{(2p+1)(2j+1)\pi}{2^{n+1}}\right)=\frac{1}{\sqrt{2^{n-1}}}\sum_{\substack{i=0\\j=2i}}^{2^{n-1}-1}f_{2i}\cos\left(\frac{(2p+1)(4i+1)\pi}{2^{n+1}}\right)\\
+\frac{1}{\sqrt{2^{n-1}}}\sum_{\substack{i=0\\j=2i+1}}^{2^{n-1}-1}f_{2i+1}\cos\left(\frac{(2p+1)(4i+3)\pi}{2^{n+1}}\right)= \frac{1}{\sqrt{2^{n-1}}}\sum_{i=0}^{2^{n-1}-1}g_i\cos\left(\frac{(2p+1)(4i+2)\pi}{2^{n+1}}-\frac{(2p+1)\pi}{2^{n+1}}\right)\\
+\frac{1}{\sqrt{2^{n-1}}}\sum_{i=0}^{2^{n-1}-1}h_i\cos\left(\frac{(2p+1)(4i+2)\pi}{2^{n+1}}+\frac{(2p+1)\pi}{2^{n+1}}\right)= \frac{1}{\sqrt{2^{n-1}}}\sum_{i=0}^{2^{n-1}-1}g_i\cos\left(\frac{(2p+1)(2i+1)\pi}{2^n}\right)\cos\left(\frac{(2p+1)\pi}{2^{n+1}}\right)\\
+ \frac{1}{\sqrt{2^{n-1}}}\sum_{i=0}^{2^{n-1}-1} g_i\sin \left( \frac{(2p+1)(2i+1)\pi}{2^n}\right) \sin\left(\frac{(2p+1)\pi}{2^{n+1}}\right)+ \frac{1}{\sqrt{2^{n-1}}}\sum_{i=0}^{2^{n-1}-1}h_i\cos \left( \frac{(2p+1)(2i+1)\pi}{2^n} \right)\cos\left(\frac{(2p+1)\pi}{2^{n+1}}\right)\\
- \frac{1}{\sqrt{2^{n-1}}}\sum_{i=0}^{2^{n-1}-1}h_i\cos \left( \frac{(2p+1)(2i+1)\pi}{2^n}\right) \sin\left(\frac{(2p+1)\pi}{2^{n+1}}\right)=\frac{a_p^g+a_p^h}{\sqrt2}\cos\left(\frac{(2p+1)\pi}{2^{n+1}}\right)+\frac{b_p^g-b_p^h}{\sqrt2}\sin\left(\frac{(2p+1)\pi}{2^{n+1}}\right)
< Лекция 16 || Лекция 17: 12 || Лекция 18 >
Сергей Гутько
Сергей Гутько
Россия, ВИУ, 2003