Россия, Сургут, Сургутский Государственный Университет, 2017 |
Быстрое преобразование Фурье
Быстрое преобразование Фурье (БПФ) - умный, быстрый алгоритм вычисления ДПФ. Цель остается та же - вычислить коэффициенты Фурье:
![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)](/sites/default/files/tex_cache/5396b73ea6c06045efe9cac438ab2f19.png)
Давайте оценим сложность, задаваемую этими формулами. При определении вычислительной сложности будем учитывать число умножений, игнорируя сложения, поскольку это более легкие операции в сравнения с умножением. Мы предполагаем, что значения синусов и косинусов предварительно вычислены и хранятся в памяти. Проигнорируем множитель , так как можно выбрать N/2 как степень 4, тогда деление на степень 2 является простой операцией для компьютера.
Вычисления каждого коэффициента Фурье, будет тогда включать N умножений, а поскольку коэффициентов тоже N, то сложность ДПФ, вычисляемого по этим формулам - .
БПФ позволяет вычислить те же коэффициенты, но со сложностью . Для вектора длины 1024 (что не является чем-то необычным при цифровой обработке сигнала) сложность прямого метода -1048576, а БПФ - 20480. БПФ - рекурсивный алгоритм. Его идея -разбить исходный вектор на два вектора половинной длины, применить рекурсивно БПФ к каждому короткому вектору, а затем комбинировать две последовательности коэффициентов Фурье, построенные для коротких векторов, в последовательность коэффициентов полного вектора.
С этого момента будем полагать, что N - степень 2,
Давайте разделим вектор на два коротких вектора, где компоненты с четными индексами будут принадлежать одному вектору, с нечетными - другому,
Пока что, мы только ввели новую нотацию, не производя никаких вычислений:
![g_i=f_{2i},\; h_i=f_{2i+1},\; i=0,1,\dots,M-1](/sites/default/files/tex_cache/8ba98387539c4b8d8443b5181d842244.png)
В результате созданы два вектора длины :
![g=(g_0,g_1,\dots,g_{2^{n-1}-1}),\;\; h=(h_0,h_1,\dots,h_{2^{n-1}-1}](/sites/default/files/tex_cache/7e2812ac143c7f7299d0f35a27227466.png)
Давайте применим ДПФ к векторам 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)](/sites/default/files/tex_cache/17d01e519741a1f881f930cd77c4936e.png)
Коэффициенты Фурье для 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)](/sites/default/files/tex_cache/8a5f60e0dd0a6b41a85eb05833f3e492.png)
Формулы для коэффициентов и
аналогичны.
Теперь покажем, как можно сконструировать коэффициенты Фурье для вектора f из коэффициентов:
и
,
и
![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)](/sites/default/files/tex_cache/fa8b9b588826972db5eb6aceccde0bfc.png)