傅里葉變換 - Fourier Transform


傅里葉級數

傅里葉在他的專著《熱的解析理論》中提出,任何一個周期函數都可以表示為若干個正弦函數的和,即:

\[f(t)=a_0+\sum_{n=1}^{\infty}(a_ncos(n\omega t)+b_nsin(n\omega t))$$其中$\omega=\dfrac{2\pi}{T}$,$T$為函數的周期。$a_n/b_n$和$n$分別控制了正弦波的振幅與頻率。這就是傅里葉級數的**三角形式**。 我們還可以用**復指數形式[^1]**和**積分[^2]**來表示傅里葉級數: $$ f(t)=\sum_{n=-\infty}^{\infty}F_ne^{in\omega t} $$ $$ F_n=\frac{1}{T}\int_0^T f(t)e^{-in\omega t} dt $$其中$F$就是周期函數$f$的**傅里葉級數(Fourier Series, FS)**。 **如果說$f$是某段信號在時域上的表現,$F$就是其在頻域上的表現。傅里葉變換實現的就是從時域到頻域的變換。** ![這里寫圖片描述](http://ww2.sinaimg.cn/mw690/7cc829d3gw1eh5v57q4vij20go0a0gn0.jpg) ##傅里葉變換 對於非周期函數,我們可以將其視為一個以$(-\infty,\infty)$為一個周期的周期函數。 經過數學推導,得到: $$ F(\omega)=\int_{-\infty}^\infty f(t)e^{-i\omega t} dt$$ $$ f(t)=\frac{1}{2\pi}\int_{-\infty}^\infty F(\omega)e^{i\omega t} d\omega $$ 這叫做**傅里葉變換(Fouier Transform, FT)**及**傅里葉逆變換(IFT)**。 注意,其結果都可能是復數。 這時,$F$不再是離散的級數,而是一個連續的函數了。 與傅里葉級數的比較: - 傅里葉級數:周期信號,離散頻率,頻率分量的值 - 傅里葉變換:非周期信號,連續頻率,頻率分量的**密度** ##卷積定理 卷積定理有兩個: $$ FT[f_1(t)*f_2(t)]=FT[f_1(t)]\cdot FT[f_2(t)] $$ $$ IFT[F_1(\omega)*F_2(\omega)]=\frac{1}{2\pi}IFT[F_1(\omega)]\cdot IFT[F_2(\omega)] $$ 分別稱為**時域卷積定理**和**頻域卷積定理**。 > 下面對時域卷積定理進行證明。 \]

\begin{align}
FT[f_1(t)
f_2(t)] &= FT[\int_{-\infty}^\infty f_1(\tau)f_2(t-\tau) d\tau] \
&= \int_{-\infty}^\infty[\int_{-\infty}^\infty f_1(\tau)f_2(t-\tau) d\tau]e^{-i\omega t} dt \
&= \int_{-\infty}^\infty f_1(\tau)[\int_{-\infty}^\infty f_2(t-\tau)e^{-i\omega t} dt]d\tau \
&= \int_{-\infty}^\infty f_1(\tau)[\int_{-\infty}^\infty f_2(t)e^{-i\omega (t+\tau)} dt]d\tau \
&= \int_{-\infty}^\infty f_1(\tau)e^{-i\omega\tau}[\int_{-\infty}^\infty f_2(t)e^{-i\omega t} dt]d\tau \
&= \int_{-\infty}^\infty f_1(\tau)e^{-i\omega\tau}F_2(\omega) d\tau \
&= F_2(\omega) \int_{-\infty}^\infty f_1(\tau)e^{-i\omega\tau} d\tau \
&= F_1(\omega)F_2(\omega)
\end{align*}

\[ 其實基本上就是直接展開啦。頻域卷積定理的證明也是類似的。 可以觀察到,在一個域上進行卷積,相當於在另一個域上進行點積。這啟發我們用復雜度低的點積運算來代替復雜度高的卷積運算。 ##離散時間傅里葉變換 以上的內容都是針對連續信息/連續函數的。但是,計算機是無法存儲連續的信息的,只能每隔時間$T$對信息進行采樣。也就是說,計算機把**連續的函數**轉化為了**離散的序列**。對於這樣一個序列進行的傅里葉變換就稱為**離散時間傅里葉變換(Discrete Time Fouier Transform, DTFT)**。 $$ F(\omega)=\sum_{n=-\infty}^\infty f(nT)e^{-i\omega nT } $$ 我們其實是用離散的采樣點$nT$代替了FT中連續的時間$t$。進一步,由於采樣的結果本質上是一個序列,那么我們可以把序列中連續兩項的間隔,也就是采樣頻率$T$看做**單位“1”**。我們用$x(n)$表示采樣結果序列,那么有: $$ X(\omega)=\sum_{n=-\infty}^\infty x(n)e^{-i\omega n} $$ 事實上,這個將$T$轉化為“1”的過程,就是模擬信號轉化為數字信號的過程。 其逆變換IDTFT的表達式為: $$ x(n)=\int_{-\pi}^\pi X(\omega)e^{i\omega n} d\omega\]

離散傅里葉變換

通過DTFT,我們已經能夠處理離散的采樣信號了。但由於采樣結果序列依然是無限長的,計算機還是無法進行處理。從DTFT的式子中可以看出,\(X(\omega)\)是以\(2\pi\)為周期的,那么解決的方法很簡單:我們只從時域\((0,2\pi)\)上均勻地取\(N\)個點,用這\(N\)個點計算出頻域上的\(N\)個點,這\(N\)個點就可以作為頻域上的一個周期。

\[ X(k)=\sum_{n=0}^{N-1}x(n)W_N^{nk} \quad (k=0,1,2...,N-1)$$ 其中$W_N=e^{-i\frac{2\pi}{N}}$,也就是n次單位根。 其實DFT就是將DTFT中的對$\omega$積分替換為對$\frac{2k\pi}{N}$求和[^3]。 這樣,我們就得到了一個$N$點信號到$N$點頻域的離散變換,這個變換就叫做**離散傅里葉變換(Discrete Fourier Transform, DFT)**。 其逆變換的表達式為: $$ x(n)=\frac{1}{N} \sum_{k=0}^{N-1}X(k)W_N^{-nk} \quad (n=0,1,2...,N-1)\]

FS, FT, DTFT, DFT的比較

變換 特點
傅里葉級數FS 周期信號,離散頻率,頻率分量的值
傅里葉變換FT 非周期信號,連續頻率,頻率分量的密度
離散時間傅里葉變換DTFT 非周期采樣信號,連續頻率,頻率分量的密度
離散傅里葉變換DFT 有限長度非周期采樣信號,離散頻率,對於DTFT頻譜頻率分量的密度

快速傅里葉變換

朴素進行DFT的復雜度是\(O(n^2)\),這可以從其表達式中看出。事實上我們有一種利用分治進行DFT的\(O(nlogn)\)算法,這就是常常被應用在OI中的快速傅里葉變換(Fast Fourier Transform, FFT)
為了方便,以下若不做特殊說明,\(N\)均是\(2\)的整數次冪,這可以通過在原來的序列后補若干個\(0\)至有\(2\)的整數次冪項來實現。

\[\begin{align} X(k) &= \sum_{n=0}^{N-1}x(n)W_N^{nk} \\ &= \sum_{n=0,n+=2}^{N-2}x(n)W_N^{nk} + \sum_{n=1,n+=2}^{N-1}x(n)W_N^{nk} \\ &= \sum_{n=0}^{\frac{N}{2}-1}x(2n)W_N^{2nk} + \sum_{n=0}^{\frac{N}{2}-1}x(2n+1)W_N^{(2n+1)k} \\ &= \sum_{n=0}^{\frac{N}{2}-1}x(2n)W_{\frac{N}{2}}^{nk} + W_N\sum_{n=0}^{\frac{N}{2}-1}x(2n+1)W_{\frac{N}{2}}^{nk} \end{align} $$ 通過以上變形,原問題變成了兩個規模減半的子問題。合並兩個子問題的復雜度是$O(1)$,分治層數為$O(logn)$,所以計算一項的復雜度是$O(logn)$,計算$n$項的復雜度是$O(nlogn)$。 ##例題:多項式乘法 設$n$次多項式$f_1(x)=\sum_{i=0}^{n}a_ix^i$和$m$次多項式$f_2(x)=\sum_{i=0}^{m}b_ix^i$的積為$n+m$次多項式$f_3(x)=\sum_{i=0}^{n+m}c_ix^i$。給出序列$a,b$,求序列$c$。 容易知道$c_k=\sum_{i=0}^{k}a_ib_{k-i}$,事實上序列$c$就是序列$a$和序列$b$的**離散卷積**。 那么根據卷積定理,$c_k=IDFT[DFT[c_k]]=IDFT[DFT[a_k*b_k]]=IDFT[DFT[a_k]\cdot DFT[b_k]]$ 所以我們只要將序列$a$和$b$DTFT到頻域,點積后再IDTFT回時域,就可以得到序列$c$啦。 > 時間復雜度$O((n+m)log(n+m))$。 ##快速數論變換 在我們進行DTFT的過程中,使用的是復數。如果精度要求很高(比如求方案數),用復數來進行FFT就會出現誤差。所以我們需要找到一個與復數單位根有相似性質的替代。 注意到FFT能夠進行的根本因素就是復數單位根具有$W_N^2=W_{\frac{N}{2}}$這一性質。事實上,模意義域下的原根[^4]就是復數單位根的一個很好的替代。 定義$W_N=g^{\frac{P-1}{N}}(mod \ P)$,則有: $$ X(k)=\sum_{n=0}^{N-1}x(n)W_N^{nk} \quad (mod \ P)$$ 這就是**快速數論變換(Number Theory Transform, NTT)**。 進行NTT時,最常用的模數就是998244353,其原根$g=3$。 ##Code [UOJ34 - 多項式乘法](http://www.cnblogs.com/VisJiao/p/uoj34.html) [^1]:$e^{i\theta}=cos\theta+isin\theta$ [^2]:$\int_a^b f(x)dx$表示對$x\in(a,b)$的$f(x)$進行積分。 [^3]: 把這個式子轉化成類似DTFT的形式: $$ X(k)=\sum_{n=0}^{N-1}x(n)W_N^{nk}=\sum_{n=0}^{N-1} x(n)e^{-i \frac{2k\pi}{N}n} $$ $\frac{2k\pi}{N}$代替的就是DTFT中$\omega$的位置。 [^4]: $P$的原根$g$定義為使得$g^0,g^1,...,g^{P-2} \ (mod \ P)$互不相同的數。\]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM