查看“︁短時距傅立葉變換”︁的源代码
←
短時距傅立葉變換
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{noteTA |G1=Signals and Systems |1=zh-cn:数据;zh-tw:資料; }} {{傅立葉變换}} '''短時距傅立葉變換'''(Short-time Fourier Transform, STFT)是[[傅立葉變換]]的一種變形,也稱作加窗傅里叶变换(Windowed Fourier transform)或Time-dependent Fourier transform,用於決定隨時間變化的信號局部部分的正弦頻率和相位。實際上,計算短時距傅立葉變換的過程是將長時間信號分成數個較短的等長信號,然後再分別計算每個較短段的傅立葉轉換。通常拿來描繪頻域與時域上的變化,為[[時頻分析]]中其中一個重要的工具。 ==與[[傅立葉轉換]]在概念上的區別== 將訊號做[[傅立葉變換]]後得到的結果,並不能給予關於信號頻率隨時間改變的任何資訊。以下的例子作為說明: :<math>x(t)=\begin{cases} \cos(440 \pi t); & t < 0.5 \\ \cos(660 \pi t); & 0.5 \leq t < 1 \\ \cos(524 \pi t); & t \ge 1 \end{cases}</math> [[傅立葉變換]]後的頻譜和短時距傅立葉轉換後的結果如下: {| |- | [[File:FtThreeFreq.jpg|none|thumb|380px|傅立葉轉換後, 橫軸為頻率(赫茲)]] | [[File:ftgabor.jpg|none|thumb|360px|短時距傅立葉轉換, 橫軸為時間(秒),縱軸為頻率(赫茲)]] |} 由上圖可發現,傅立葉轉換只提供了有哪些頻率成份的資訊,卻沒有提供時間資訊;而短時傅立葉轉換則清楚的提供這兩種資訊。這種[[時頻分析]]的方法有利於頻率會隨著時間改變的信號,如音樂信號和語音信號等分析。 ==定義== === 連續短時傅立葉轉換 === 簡單來說,在連續時間的例子,一個函數可以先乘上僅在一段時間不為零的[[窗函數]]再進行一維的[[傅立葉變換]]。再將這個窗函數沿著時間軸挪移,所得到一系列的傅立葉變換結果排開則成為二維表象。數學上,這樣的操作可寫為: :<math> X(t, f) = \int_{-\infty}^{\infty} w(t-\tau)x(\tau) e^{-j 2 \pi f \tau} \, d\tau </math> 另外也可用[[角頻率]]來表示: :<math> X(t, \omega) = \int_{-\infty}^{\infty} w(t-\tau)x(\tau) e^{-j \omega \tau} \, d\tau </math> 其中<math>w(t)</math>是[[窗函數]],窗函數種類有很多種,會在稍後再做仔細討論。<math>x(t)</math>是待變換的訊號。<math>X(t,\omega)</math>是<math>w(t-\tau)x(\tau)</math>的傅立葉變換。 隨著<math>t</math>的改變,窗函數在時間軸上會有位移。经<math>w(t-\tau)x(\tau)</math>後,信號只留下了窗函數截取的部分做最後的傅立葉轉換,所得到的結果為一複數函數,代表著信號隨時間與頻率變化的大小與相位。 === 離散短時傅立葉轉換 === 在離散時間的例子,資料會被切割成數個大量的帧,而每組帧通常會互相重疊,避免因切割方式造成邊界的誤差。而每組帧在各自進行傅立葉轉換後所得的複數結果會再進行相加,可得到每個點時間與頻率變化的大小與相位。數學上,這樣的操作可寫為: <math>\mathbf{STFT}\{x[n]\}(m,\omega)\equiv X(m,\omega) = \sum_{n=-\infty}^{\infty} x[n]w[n-m]e^{-j \omega n} </math> 相同地,其中<math>w[n]</math>是[[窗函數]],<math>x[n]</math>是待變換的訊號。在這個例子裡,m是離散的且ω是連續的,但大部分實際的應用當中,短時距傅立葉轉換在電腦中都是以快速傅立葉轉換進行計算(見實現方法的快速傅立葉變換),而此時這兩個參數都是離散且被量化的。 === Sliding 離散傅立葉轉換 === 當只想要得知特定少數的ω,或是短時距傅立葉轉換每次窗函數移動m的值,則短時距傅立葉轉換可以利用sliding DFT演算法更有效地計算出來。 === 反短時距傅立葉轉換 === 短時距傅立葉轉換是可逆的,也就是說原本的信號可以藉由反短時距傅立葉轉換將短時距傅立葉轉換後的信號還原。 其中最廣為接受的反短時距傅立葉轉換方法是[[重疊-相加之摺積法]],此方法也促成了更多樣的信號處理方法。 反短時距傅立葉轉換,其數學類似[[傅立葉轉換]],但須消除窗函數的作用,首先必須先將窗函數的總面積規模化使得 : <math> \int_{-\infty}^{\infty} w(\tau) \, d\tau = 1.</math> 而從上也可輕易地得出 : <math> \int_{-\infty}^{\infty} w(t-\tau) \, d\tau = 1 \quad \forall \ t </math> 和 : <math> x(t) = x(t) \int_{-\infty}^{\infty} w(t-\tau) \, d\tau = \int_{-\infty}^{\infty} x(t) w(t-\tau) \, d\tau. </math> 連續傅立葉轉換公式如下: : <math> X(\omega) = \int_{-\infty}^{\infty} x(t) e^{-j \omega t} \, dt. </math> 將<math>x(t)</math>進行上述的替換: : <math> X(\omega) = \int_{-\infty}^{\infty} \left[ \int_{-\infty}^{\infty} x(t) w(t-\tau) \, d\tau \right] \, e^{-j \omega t} \, dt </math> : <math> = \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} x(t) w(t-\tau) \, e^{-j \omega t} \, d\tau \, dt. </math> 將積分順序進行交換: : <math> X(\omega) = \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} x(t) w(t-\tau) \, e^{-j \omega t} \, dt \, d\tau </math> : <math> = \int_{-\infty}^{\infty} \left[ \int_{-\infty}^{\infty} x(t) w(t-\tau) \, e^{-j \omega t} \, dt \right] \, d\tau </math> : <math> = \int_{-\infty}^{\infty} X(\tau, \omega) \, d\tau. </math> 因此傅立葉轉換可以視為某種將<math>x(t)</math>所有的短時距傅立葉轉換的相位同調部分進行相加。 而反傅立葉轉換公式如下: : <math> x(t) = \frac{1}{2 \pi} \int_{-\infty}^{\infty} X(\omega) e^{+j \omega t} \, d\omega, </math> 因此 <math>x(t)</math>可以從<math>X( \tau, \omega)</math>被復原 <math> x(t) = \frac{1}{2 \pi} \int_{-\infty}^{\infty} \int_{-\infty}^{\infty} X(\tau, \omega) e^{+j \omega t} \, d\tau \, d\omega. </math> 或 : <math> x(t) = \int_{-\infty}^{\infty} \left[ \frac{1}{2 \pi} \int_{-\infty}^{\infty} X(\tau, \omega) e^{+j \omega t} \, d\omega \right] \, d\tau. </math> 與上面所列的窗函數的式子進行比較,可得 : <math> x(t) w(t-\tau) = \frac{1}{2 \pi} \int_{-\infty}^{\infty} X(\tau, \omega) e^{+j \omega t} \, d\omega. </math> 對反傅立葉轉換公式中的<math>X( \tau, \omega)</math>來說<math> \tau </math>是不變的 :<math> x(t)=w(t_1-t)^{-1} \int_{-\infty}^{\infty} X(t_1, f) e^{j 2 \pi f t}\, df ; \ \ w(t_1-t)\ne 0 </math> :另外用角頻率來表示: :<math>x(t)=\frac{1}{2\pi}w^{-1}(t_1-t)\int\limits_{-\infty}^{\infty} X(t_1,w)e^{jwt}dw</math> ===窗函數=== [[窗函數]]通常滿足下列特性: # <math>w(t) = w(-t) \,</math>,即為偶函數。 # <math>max(w(t))=w(0) \,</math>,即窗函數的中央通常是最大值的位置。 # <math>w(t_1)\ge w(t_2), |t_2| \ge |t_1|</math>,即窗函數的值由中央開始向兩側單調遞減。 # <math>w(t)\cong 0 , |t|\to \infty</math>,即窗函數的值向兩側遞減為零。 常見的[[窗函數]]有:方形、三角形、[[高斯函數]]等,而短時距傅立葉轉換也因窗函數的不同而有不同的名稱。而[[加伯轉換]],即為窗函數是高斯函數的短時距傅立葉轉換,通常沒有特別說明的短時距傅立葉轉換,即為[[加伯轉換]]。 ===== 非對稱窗函數 ===== 當在特殊應用時,窗函數特性的第一點可以不滿足,如下圖的非對稱窗函數<math> w(t) </math>,其中<math> B_1\neq B_2 </math>。左圖為窗函數原本的圖形,而在計算短時距傅立葉變換時,需將窗函數轉到<math> \tau </math>軸上得出<math> w(t-\tau) </math>,換言之,欲得到的短時距傅立葉變換的結果需在<math>t+B_1</math>的時間點才能算出,因此若<math>B_1</math>愈小,即可愈快得結果,此種非對稱窗函數可應用在地震波、碰撞偵測...等,需要即時處理的應用。[[File:Asymmetric window.png|800x800像素]] ==優缺點== *優點:比起傅立葉轉換更能觀察出信號[[瞬時頻率]]的資訊。 *缺點:計算複雜度高 ==方形窗函數的短時距傅立葉轉換== ===概念=== [[File:SquareWave.jpg|thumb|right|300px|方形窗函數,B = 50,橫軸為時間(秒)]] 右圖即為方形窗函數的一個例子,其數學定義: <math> w(t) =\begin{cases} \ 1; & |t|\leq B \\ \ 0; & |t|>B \end{cases}</math> 可以隨要分析的信號,來調整B的大小(即調整方形窗函數的寬度)。至於B的選擇,將會在下面探討。 短時傅立葉轉換可以簡化為 :<math> X(t, f) = \int_{t-B}^{t+B} x(\tau) e^{-j 2 \pi f \tau} \, d\tau </math> 反短時傅立葉轉換可簡化為 :<math> x(t)=\int_{-\infty}^{\infty} X(t_1, f) e^{j 2 \pi f t}\, df ; t-B<t_1<t+B </math> ===特性=== 其大部分的特性都與[[傅立葉轉換]]的特性相對應 *積分特性 :<math>\int_{-\infty}^{\infty} X(t, f)\, df = \int_{t-B}^{t+B} x(\tau)\int_{-\infty}^{\infty} e^{-j 2 \pi f \tau}\, df \, d\tau = \begin{cases} \ x(0); & |t|\leq B \\ \ 0; & |t|>B \end{cases}</math> *位移特性(時間軸方向的移動) :<math>\int_{t-B}^{t+B} x(\tau+\tau_0) e^{-j 2 \pi f \tau}\, d\tau = X(t+\tau_0,f)e^{j 2 \pi f \tau_0}</math> *調變特性(頻率軸方向的移動) :<math>\int_{t-B}^{t+B} \left( x(\tau) e^{j 2 \pi f_0 \tau} \right) e^{-j 2 \pi f \tau}\, d\tau = X(t,f-f_0)</math> *線性特性 :若有一信號<math>h(t)=\alpha x(t)+\beta y(t) \,</math>,<math> H(t,f), X(t,f), Y(t,f) \,</math>分別為<math>h(t),x(t),y(t) \,</math>做方形窗函數短時 距傅立葉轉換的結果,則<math>H(t,f)=\alpha X(t,f)+\beta Y(t,f) \,</math>。 *能量積分特性 :<math>\int_{-\infty}^{\infty} |X(t, f)|^2\, df = \int_{t-B}^{t+B} |x(\tau)|^2\,d\tau</math> :<math>\int_{-\infty}^{\infty} X(t,f)Y^*(t,f)\,df = \int_{t-B}^{t+B} x(\tau)y^*(\tau)\,d\tau</math> *特殊信號 :1. 當<math>x(t) =\delta(t) \,</math>, ::<math>X(t,f)=\begin{cases} \ 1; & |t| \leq B \\ \ 0; & |t| > B \end{cases}</math> :2. 當<math>x(t) = 1 \,</math>, ::<math>X(t,f)=2Bsinc(2Bf)e^{-j2\pi ft} \,</math> ===方形窗函數寬度<math>(B)</math>的選取=== [[File:DifferentB.JPG|thumb|right|400px|方形窗函數短時距傅立葉轉換用不同窗函數寬度(B)的比較,橫軸為時間(秒),縱軸為頻率(赫茲)]] *由上述特性中的特殊信號<math>x(t) =\delta(t)</math>來分析,信號只有在<math>t=0</math>的時候有值;若短時距傅立葉轉換是理想的話,<math>X(t,f)</math>應該只有在<math>t=0</math>的時候有能量。但由上面的特性可發現,能量會出現在<math>\begin{smallmatrix}|t| \leq B \end{smallmatrix}</math>中間。因此,若我們取較小的<math> B</math>,則可使結果趨近理想。 *接著我們來分析<math>x(t) = 1 </math>,信號因為沒有改變,應該為DC。若短時距傅立葉轉換是理想的話,<math>X(t,f)</math>應該只有在<math>f=0</math>的時候有能量。但由上面的特性可發現,能量會沿著頻率軸呈現[[sinc函數]]。若我們取較大的<math> B</math>,可使[[sinc函數]]沿著頻率軸變窄,使得結果趨近理想。 *綜合以上說明,若我們使用較大的方形窗函數寬度<math>(B)</math>,則<math>X(t,f)</math>時間軸的解析度會下降;頻率軸的解析度上升。若使用較小的<math>B</math>,則<math>X(t,f)</math>時間軸的解析度會上升;頻率軸的解析度下降。我們以下面做為例子說明: :<math>x(t)=\begin{cases} \cos(2 \pi t); & t < 10 \\ \cos(6 \pi t); & 10 \leq t < 20 \\ \cos(4 \pi t); & t \ge 20 \end{cases}</math> 結果如右圖所示,B越大則在頻率變化處(t = 10, 20)附近的頻率越不準確,即可能會有多個頻率成分出現。但同時,其他時間點的能量則較集中;沒有如B較小時,頻率散開或模糊的情形。 上述也是其中一個小波轉換及[[多解析度分析]]作為改進的方向,其中多解析度分析能在高頻時有較好的時間軸解析,而在低頻時能有較好的頻率軸解析,此種組合較契合許多實際的應用。 時間軸與頻率軸的解析度無法同時提升也與海森堡[[不确定性原理|不確定性原理]]有關,即時間與頻率的標準差乘積有所限制,而高斯函數恰好能符合不確定性原理的極值,也就是兩者同時達到最好的解析度,而應用高斯函數的時頻分析方法即為加伯轉換,而在經過修改及多解析度分析後,成為了[[莫萊小波]]。 ===優缺點=== *優點:方形窗函數的短時距傅立葉轉換有許多可應用的數學特性,在數位的應用上所需的計算時間較少。 *缺點:時頻分析的表現較差 == 其他窗函數 == === <u>高斯窗函數</u> === ==== 概念 ==== [[高斯函数|高斯窗函數]]的短時距傅立葉轉換又稱為[[加伯轉換]]。以下是高斯函數的數學定義, <math>w(t) = \exp(-\pi\sigma t^2)</math> 據此,短時傅立葉轉換可以寫為 <math>G_x(t,f) = \int_{-\infty}^{\infty} e^{-\pi(\tau-t)^2} e^{-j2\pi f\tau}x(\tau)d\tau</math> ==== 優缺點 ==== * 優點:可以在時間跟頻率上有更好的平衡,得到較清楚的時頻圖。 * 缺點:因窗函數跟信號本身的乘法,計算時間跟複雜度都比較高。 === [[窗函数|<u>三角形窗函數</u>]] === [[File:Triangular_function.svg|thumb|三角形函數,橫軸為時間,B=1/2]] ==== 概念 ==== 三角形窗函數如右圖所示,數學定義如下, <math>w(t) = max(1-\left\vert t \right\vert,0)</math> <math>w(t) = \begin{cases} 1-\left\vert t \right\vert, & \left\vert t \right\vert<2B; \\ 0, & \text{otherwise.} \end{cases}</math> 可使用在震幅改變的情況下,相對於方形窗函數,可更好的濾除雜訊。 === <u>海寧(Hanning/ Hann)窗函數</u> === [[File:Window_function_(hann).png|thumb|海寧函數]] ==== 概念 ==== 海寧函數如右圖所示,數學定義如下, <math> w(t) = \begin{cases} 0.5+0.5cos(\pi t/B), & \text{when }\left\vert t \right\vert\leq B \\ 0, & \text{otherwise }\end{cases} </math> 相較於三角形窗函數,海寧窗函數更為貼近現實訊號的趨勢,可進一步濾除雜訊。 === <u>漢明(Hamming)窗函數</u> === [[File:Window_function_(hamming).svg|thumb|漢明函數]] ==== 概念 ==== 漢明窗函如右圖所示,數學定義如下, <math> w(t) = \begin{cases} 0.54+0.46cos(\pi t/B), & \text{when }\left\vert t \right\vert\leq B \\ 0, & \text{otherwise }\end{cases} </math> 跟海寧窗函數類似,但兩端不為零。 === <u>海寧與漢明窗的區別<ref>{{Cite web |last=Kang |first=Li |date=2020-06-20 |title=一文讀懂FFT,海寧窗(hann)和漢明窗(hamming)的區別,如何選擇窗函數 |url=https://www.twblogs.net/a/5eed7182210de7f528fd8076 |url-status=no |access-date=2022-12-15 |archive-date=2022-12-15 |archive-url=https://web.archive.org/web/20221215125303/https://www.twblogs.net/a/5eed7182210de7f528fd8076 }}</ref></u> === 窗函數有四個指標,分別為 * 泄露指數 (Leakage Factor) * 主辦寬度 (Mainlobe width) * 旁辦衰減 (Sidelobe attenuation) * 旁辦滾降率 (Sidelobe roll-off rate)[[File:DifferentB.JPG|thumb|right|400px|方形窗函數寬度(B)與STFT清晰率的取捨,橫軸為時間(秒),縱軸為頻率(赫茲)]] 因為漢明窗兩端不能到零,而海寧窗兩端為零。從以上頻率響應來看,漢明窗可以有效減少靠近的旁辦,但在較遠的旁辦洩漏比海寧窗嚴重。 === <u>如何決定窗函數</u> === 可根據以下條件來選取窗函數, * 複雜度,方形複雜度較低 * 解析率,以方形為例,越寬的主辦可以得到更清楚的時頻圖,卻會把雜訊也一同顯示,反之則得到不清晰的時頻圖 在決定複雜度跟解析率後,可利用不同的窗函數達到更好的濾雜訊效果。 == 瑞利頻率 == 當Nyquist頻率是能被有意義分析的頻率最大值的限制,而瑞利頻率則是能被有限頻寬頻的窗函數解析的頻率最小值的限制。若給定一窗函數的長度是T秒,最低能被解析的頻率即為1/T Hz。 瑞利頻率在短時距傅立葉變化的應用中扮演重要的角色,像是在分析神經信號時。 ==頻譜(Spectrogram)== Spectrogram即短時傅立葉轉換後結果的絕對值平方,兩者本質上是相同的,在文獻上也常出現spectrogram這個名詞。 :<math>SP_x(t,f) = |X(t,f)|^2 = | \int_{-\infty}^{\infty} w(t-\tau)x(\tau) e^{-j 2 \pi f \tau} \, d\tau |^2 </math> == 應用<ref>{{Cite web |title=Short-time Fourier transform |url=https://en.wikipedia.org/wiki/Short-time_Fourier_transform |url-status=no |language=en |access-date=2022-12-15 |archive-date=2023-08-09 |archive-url=https://web.archive.org/web/20230809113245/https://en.wikipedia.org/wiki/Short-time_Fourier_transform }}</ref><ref>{{Cite book|title=Time frequency analysis and wavelet transform class notes|last=Ding|first=Jian-Jiun|publisher=Graduate Institute of Communication Engineering, National Taiwan University (NTU)|year=2022|location=Taipei, Taiwan}}</ref> == [[File:Short time fourier transform.PNG|thumb|應用短時距傅立葉變換分析聲音訊號]] 短時距傅立葉變換及其他工具經常用於分析音樂。 如右圖所示, # 水平軸為頻率,左側為最低頻率,右側為最高頻率 # 條形高度(混和顏色表示)表示該頻帶內的頻率幅度 # 深度表示時間 音頻工程師使用這種視覺來獲取有關音頻樣本的信息。 此外,因頻率會隨時間而改變,短時距也可使用在以下情境, * 訊號取樣 (signal sampling), * 調變 (modulation), * 生物訊號 (biomedical signals),等等 若與時間無關,如卷積,照片等則不能使用短時距傅立葉變換來進行分析。而影片屬於3D訊號,其短時距傅立葉產物為6D訊號,故也不適用。 ==短時距傅立葉變換實現方法== 從連續短時距傅立葉變化的定義出發 <math>{X}\left( {t,f} \right) = \int_{ - \infty }^\infty {w\left( {t - \tau } \right) \cdot } {x}\left( {\tau} \right)\,{e^{ - j2\pi \,f\tau }} \cdot d\tau</math> 令 <math>t = n\Delta_t , f = m\Delta_f ,\tau= p\Delta_t </math> ,則上述式子時域可從連續轉為離散 <math>{X}\left( {n{\Delta _t},m{\Delta _f}} \right) = \sum\limits_{p = - \infty }^\infty {w\left( {(n - p){\Delta _t}} \right){x}\left( {p{\Delta _t}} \right)}{e^{ - j2\pi \,mp{\Delta _t}{\Delta _f}}}{\Delta _t}</math> 若當<math>\left| t\right| >B , w(t) \cong 0 \qquad\frac{B}{\Delta _t} = Q</math> 上式可改寫為 <math> {X}\left( {n{\Delta _t},m{\Delta _f}} \right) = \sum\limits_{p = n-Q }^{ n+Q} {w\left( {(n - p){\Delta _t}} \right){x}\left( {p{\Delta _t}} \right)}{e^{ - j2\pi \,mp{\Delta _t}{\Delta _f}}}{\Delta _t} </math> ---- ===直接運算 === ====限制條件==== (1)要滿足Nyquist criterion :<math>{\Delta_t} < \frac{1}{2\Omega} \qquad {\Omega} = {{\Omega_x} +{\Omega_w}}</math> :<math>x(\tau)</math>的頻寬為<math>\Omega _x</math>。而<math>w(\tau)</math>的頻寬則為<math>\Omega _w</math>,<math>w(t-\tau)</math>的頻寬也為<math>\Omega _w</math> :因為在時域相乘相當於在頻域做[[摺積]],因此<math>x(\tau)w(t-\tau)</math>的頻寬為<math>\Omega_x +\Omega_w</math>(通常<math>\Omega_x</math>會遠大於<math>\Omega_w</math>,所以主要影響頻寬的是<math>\Omega_x</math>) ==== 推導 ==== :<math>X(t,f) = \int_{-\infty}^{\infty} w(t-\tau)x(\tau)e^{-j2\pi f\tau} d\tau</math> :轉換到離散形式(<math>t = n\Delta_t, f = m\Delta_f, \tau = p\Delta_t</math>),其中<math>\Delta_t=\frac{1}{f_s}</math> :<math>X(n\Delta_t, m\Delta_f) = \sum_{p=-\infty}^{\infty} w((n-p)\Delta_t)x(p\Delta_t)e^{-j2\pi pm\Delta_t \Delta_f}\Delta_t</math>,由於無限大的上下限實務上做不到,所以嘗試變成有限大的上下限。 :假設<math>w(t)\cong 0</math> for <math>|t| > B, \frac{B}{\Delta_t} = Q</math> :<math>X(n\Delta_t, m\Delta_f) = \sum_{p = n-Q}^{n+Q} w((n-p)\Delta_t)x(p\Delta_t)e^{-j2\pi pm\Delta_t \Delta_f} \Delta_t</math> *對於縮放的[[加伯轉換]],<math>Q=\frac{1.9143}{\sqrt{\sigma}\Delta t}</math> ====時間複雜度==== :<math> TF(2Q+1) \to O(TFQ)</math> :假設t-axis有T個取樣點,f-axis有F個取樣點,則我們總共要對TF個點做<math>(2Q+1)</math>次的運算,因此可得複雜度為<math>TF(2Q+1)</math> ====優缺點==== :優點:簡單及有彈性(因為限制少) :缺點:複雜度較高 ---- ===快速傅立葉變換=== ====限制條件==== (1)要滿足Nyquist criterion :<math>{\Delta_t}< \frac{1}{2\Omega} \qquad {\Omega} = {{\Omega_x} +{\Omega_w}}</math> (2)<math>{\Delta _t}{\Delta _f} = {\textstyle{1 \over {N}}}</math> (N可為任意整數) (3) <math>N \ge 2Q+1</math> (做N點傅立葉轉換,輸入必要<=N) ====推導==== 標準的離散傅立葉轉換式子為 <math>Y[m]=\sum\limits_{n = 0 }^{ N-1}y[n]e^{-j\frac{2\pi mn}{N}}</math> 由直接運算得知如下公式 <math>{X}\left( {n{\Delta _t},m{\Delta _f}} \right) = \sum\limits_{p = n-Q }^{ n+Q} {w\left( {(n - p){\Delta _t}} \right){x}\left( {p{\Delta _t}} \right)}{e^{ - j2\pi \,mp{\Delta _t}{\Delta _f}}}{\Delta _t}</math> 因此為了讓上式符合離散傅立葉轉換的上下界,令<math>q=p-(n-Q) \to p=(n-Q)+q</math>代入上式即可得 <math>{X}\left( {n{\Delta _t},m{\Delta _f}} \right) = {\Delta _t}{e^{ j{\textstyle{{2\pi \,(Q-n)m} \over N}}}}\sum\limits_{q = 0}^{N-1} {x_1\left( {q} \right){e^{ - j{\textstyle{{2\pi \,qm} \over N}}}}}</math> 其中 <math> \begin{cases} {x_1}\left( q \right) = w\left( {(Q - q ){\Delta _t}} \right) x\left( {(n - Q + q){\Delta _t}} \right) , & \mbox{for}{\rm{0}} \le q \le 2{\rm{Q}} \\ {x_1}\left( q \right) = 0, & \mbox{for}{\rm{ 2}}Q < q \le N \end{cases}</math> ====運算步驟==== 假設<math>t=n_0\Delta_t,(n_0+1)\Delta_t,\cdots \cdots ,(n_0+T-1)\Delta_t</math> : <math>\,f=m_0\Delta_f,(m_0+1)\Delta_f,\cdots \cdots,(m_0+F-1)\Delta_f</math> 步驟一:計算<math>n_0,m_0,T,F,N,Q</math> 步驟二:<math>n=n_0</math> 步驟三:決定<math>x_1(q)</math> 步驟四:<math>X_1(m)=FFT[x_1(q)]</math> 步驟五:轉換<math>X_1(m)</math>成<math>X(n\Delta_t,m\Delta_f)</math> 步驟六:設<math>n=n+1</math>,並回到步驟三,直到<math>n=n_0+T+1</math> *範例 <math>\begin{cases} x(t)=\cos{(2\pi t)}, & \mbox{when }t<10 \\ x(t)=\cos{(6\pi t)}, & \mbox{when }10 \le t<20 \\ x(t)=\cos{(4\pi t)}, & \mbox{when }t \geq 20 \\ \end{cases}</math> 藉由取樣定理可得知<math>\Delta_t < \frac{1}{6}</math> 假設<math>f=-5 \sim 5</math>及<math>\Delta_f=0.1</math>,則經由<math>f=m\Delta_f</math>可得<math>m=-50 \sim 50</math> :<math>\; t=0\sim 30</math>及<math>\Delta_t = 0.1</math>,則經由<math>t=n\Delta_t</math>可得<math>n=0\sim 300</math> 步驟一:<math>n_0=0,m_0=-50,T=301,F=101,N=\frac{1}{\Delta_t \Delta_f}=100,Q=\frac{B}{\Delta_t}=10</math> 步驟二:<math>n=n_0=0</math> 步驟三:計算<math>x_1(q)(q=0 \sim 99)</math> 步驟四:利用求得的<math>x_1(q)</math>計算快速傅立葉轉換 <math>X_1[m] = \sum_{q=0}^{N-1} x_1(q)e^{-j\frac{2\pi qm}{N}}</math> 步驟五:轉換<math>X_1(m)</math>到<math>X(n\Delta_t,m\Delta_f)</math> :<math>X(n\Delta_t,m\Delta_f)=X_1[m]\Delta_t e^{j\frac{2\pi (Q-n)m}{N}}</math> *註:若是於程式中執行,要注意m可能為負數,所以需要利用到週期性性質<math>X_1[m]=X_1[m+N]</math> :<math>X_1[-50] = X_1[50],X_1[-49]=X_1[51], \cdots \cdots ,X_1[-1]=X_1[99]</math> :因此可將上式改為<math>X(n\Delta_t,m\Delta_f)=X[((m))_N] e^{j\frac{2\pi (Q-n)m}{N}}</math>,其中<math>((m))_N</math>代表取m除以N的餘數 步驟六:設定<math>n=n+1</math>,回到步驟三直到<math>n=n_0+T-1</math> ====時間複雜度==== 利用FFT計算<math>\sum\limits_{q = 0}^{N-1} {x_1\left( {q} \right){e^{ - j{\textstyle{{2\pi \,qm} \over N}}}}}</math>,其中每次FFT的時間複雜度為 <math>N{\log _2}N</math> 總時間複雜度為<math>TN{\log _2}N \to O(TN{\log _2}N)</math> ====優缺點==== 優點:與直接運算相比,複雜度較低 缺點:較多限制,包括 <math>\begin{cases} \Delta_t < \frac{1}{2(\Omega_x + \Omega_w)} \\ \Delta_t \Delta_f = \frac{1}{N} \\ N\geq 2Q+1 \\ \end{cases}</math> ---- ===使用快速傅立葉變換加上遞迴關係式=== ====限制條件 ==== (1)要滿足Nyquist criterion :<math>{\Delta_t}\le \frac{1}{2\Omega} \qquad {\Omega} = {{\Omega_x} +{\Omega_w}}</math> (2)<math>{\Delta _t}{\Delta _f} = {\textstyle{1 \over {N}}}</math> (3)<math>N \ge 2Q+1</math> (4)需為方形窗函數的短時距傅立葉轉換 ====推導 ==== 因為是方形窗函數 <math>{w}\left( (n-p){\Delta _t}\right) = 1</math>,因此原式可由此關係變成以下式子 <math> {X}\left( {n{\Delta _t},m{\Delta _f}} \right) = \sum\limits_{p = n-Q }^{ n+Q} {{x}\left( {p{\Delta _t}} \right)}{{w}\left( (n-p){\Delta _t}\right)}{e^{ - j2\pi \,mp{\Delta _t}{\Delta _f}}}{\Delta _t} \to {X}\left( {n{\Delta _t},m{\Delta _f}} \right) = \sum\limits_{p = n-Q }^{ n+Q} {{x}\left( {p{\Delta _t}} \right)}{e^{ - j2\pi \,mp{\Delta _t}{\Delta _f}}}{\Delta _t}</math> 而由此可看出n和n-1有遞迴關係,如下 <math>{X}\left( {(n-1){\Delta _t},m{\Delta _f}} \right) = \sum\limits_{p = n-1-Q }^{ n-1+Q} {{x}\left( {p{\Delta _t}} \right)}{e^{ - j2\pi \,mp{\Delta _t}{\Delta _f}}}{\Delta _t} = {X}\left( {n{\Delta _t},m{\Delta _f}} \right) + x((n-Q-1)\Delta_t ) - x((n+Q+1)\Delta_t)</math> (1)以FFT計算<math>{X}\left( {{n_0}{\Delta _t},m{\Delta _f}} \right) = {\Delta _t}{e^{ j{\textstyle{{2\pi \,(Q-n_0)m} \over N}}}}\sum\limits_{q = 0}^{N-1} {x_1\left( {q} \right){e^{ - j{\textstyle{{2\pi \,qm} \over N}}}}} \qquad {n_0} = min(n)</math> :其中<math> \begin{cases} {x_1}\left( q \right) = x\left( {(n - Q + q){\Delta _t}} \right) , & \mbox{for}{\rm{0}} \le q \le 2{\rm{Q}} \\ {x_1}\left( q \right) = 0, & \mbox{for}{ q > 2{\rm{Q}}}\end{cases}</math> (2)利用遞迴關係式計算算<math>{X}\left( {{n}{\Delta _t},m{\Delta _f}} \right),\qquad n = {n_0} + 1 \backsim max(n)</math> :則<math>{X}\left( {{n_0}{\Delta _t},m{\Delta _f}} \right) = {X}\left( {(n-1){\Delta _t},m{\Delta _f}} \right) - {x}\left( (n-Q-1){\Delta _t}\right) {e^{ - j{\textstyle{{2\pi \,(n-Q-1)m} \over N}}}} {\Delta _t} + {x}\left( (n+Q){\Delta _t}\right){e^{ - j{\textstyle{{2\pi \,(n+Q)m} \over N}}}}{\Delta _t} </math> ====時間複雜度==== (1)FFT計算一次 <math>{X}\left( {{n_0}{\Delta _t},m{\Delta _f}} \right) = {\Delta _t}{e^{ j{\textstyle{{2\pi \,(Q-n_0)m} \over N}}}}\sum\limits_{q = 0}^{N-1} {x_1\left( {q} \right){e^{ - j{\textstyle{{2\pi \,qm} \over N}}}}} \qquad {n_0} = min(n)</math> *時間複雜度:<math>O(N\log_2 N)</math> (2)利用遞迴關係,計算<math> n=n_0 + 1</math>時的數值,因此共會執行T-1次遞迴,如下式 :<math>{X}\left( {{n_0}{\Delta _t},m{\Delta _f}} \right) = {X}\left( {(n-1){\Delta _t},m{\Delta _f}} \right) - {x}\left( (n-Q-1){\Delta _t}\right) {e^{ - j{\textstyle{{2\pi \,(n-Q-1)m} \over N}}}} {\Delta _t} + {x}\left( (n+Q){\Delta _t}\right){e^{ - j{\textstyle{{2\pi \,(n+Q)m} \over N}}}}{\Delta _t} </math> :每次遞迴都要計算<math>{x}\left( (n-Q-1){\Delta _t}\right) {e^{ - j{\textstyle{{2\pi \,(n-Q-1)m} \over N}}}} {\Delta _t}</math>及<math>{x}\left( (n+Q){\Delta _t}\right){e^{ - j{\textstyle{{2\pi \,(n+Q)m} \over N}}}}{\Delta _t} </math>兩個乘法(相當於2F的複雜度) *時間複雜度:<math>2F(T+1) \to O(TF)</math> 總時間複雜度 <math>2(T-1)F+N{\log _2}N \to O(FT)</math> ====優缺點==== 優點:四種運算中,最低的複雜度<math>O(TF)</math> 缺點: #只適用於方形窗函數的短時傅立葉轉換 #由於遞迴的關係,會有累加誤差。所以只要當中有小錯誤,誤差會累積到最後,造成無可預期的錯誤 #不能用在不平衡的取樣點 ---- ===使用Chirp-Z 轉換=== ====限制條件==== (1)要滿足Nyquist criterion :<math>{\Delta_t}\le \frac{1}{2\Omega} \qquad {\Omega} = {{\Omega_x} +{\Omega_w}}</math> ====推導==== 令<math>exp( - j2\pi \,mp{\Delta _t}{\Delta _f} ) = exp( -j\pi \, p^2{\Delta _t}{\Delta _f}) exp( j\pi \, {(p-m)}^2{\Delta _t}{\Delta _f}) exp( -j\pi \, m^2{\Delta _t}{\Delta _f})</math> 即可由直接運算的式子導出Chirp_Z變換的式子,如下所示 <math> {X}\left( {n{\Delta _t},m{\Delta _f}} \right) = {\Delta _t} \sum\limits_{p = n-Q }^{ n+Q} {w\left( {(n - p){\Delta _t}} \right){x}\left( {p{\Delta _t}} \right)}{e^{ - j2\pi \,mp{\Delta _t}{\Delta _f}}} \to {X}\left( {n{\Delta _t},m{\Delta _f}} \right) = {\Delta _t} {e^{ - j\pi \,m^2{\Delta _t}{\Delta _f}}}\sum\limits_{p = n-Q }^{ n+Q} {w\left( {(n - p){\Delta _t}} \right){x}\left( {p{\Delta _t}} \right)}{e^{ - j\pi \,p^2{\Delta _t}{\Delta _f}}}{e^{ j\pi \,{(p-m)}^2{\Delta _t}{\Delta _f}}}</math> ====運算步驟==== Step1:<math>x_1[p] = w((n-p)\Delta_t)x(p\Delta_t)e^{-j\pi p^2 \Delta_t\Delta_f}</math> <math>\quad \quad n-Q \le p \le n+Q</math> Step2:<math>X_2[n,m] = \sum_{p=n-Q}^{n+Q}x_1[p]c[m-p] \quad \quad c[m]=e^{j\pi m^2 \Delta_t\Delta_f}</math> Step3:<math>X(n\Delta_t,m\Delta_f)=\Delta_t e^{-j\pi m^2 \Delta_t\Delta_f}X_2[m,n]</math> ====時間複雜度==== 當n為定值時 (1)假設<math>x_1[p]= w((n-p)\Delta_t)x(p\Delta_t)e^{-j\pi p^2 \Delta_t\Delta_f} \to </math> 相乘時間複雜度為2Q+1 (2)令<math>c[m] = e^{j\pi m^2 \Delta_t\Delta_f}</math>,則<math> \sum\limits_{p = n-Q }^{ n+Q} x_1[p]c[m-p]\to </math> convolution時間複雜度為 <math>3N{\log _2}N </math> (3)<math>{\Delta _t} {e^{ - j\pi \,m^2{\Delta _t}{\Delta _f}}}\sum\limits_{p = n-Q }^{ n+Q} {w\left( {(n - p){\Delta _t}} \right){x}\left( {p{\Delta _t}} \right)}{e^{ - j\pi \,p^2{\Delta _t}{\Delta _f}}}{e^{ j\pi \,{(p-m)}^2{\Delta _t}{\Delta _f}}} \to </math>相乘時間複雜度為 F 因此,總時間複雜度為<math> T(2Q+1+F+3N{\log _2}N) \to O(TN{\log_2}N) </math> 雖然此實現方法和使用FFT計算的時間複雜度相同,但因為convolution相當於做三次FFT,因此實際操作時運算時間約為使用FFT計算的2~3倍 ====優缺點==== 優點:只有一項限制:<math>\Delta_t < \frac{1}{2(\Omega_x+\Omega_w)}</math> 缺點:與前四種相比,複雜度是中間的。 ---- === Unbalanced Sampling for STFT and WDF === 將直接法和快速傅立葉轉換方法做修正 ==== 1.直接法 ==== <math>X(t,f) = \int_{-\infty}^{\infty} w(t-\tau)x(\tau)e^{-j2\pi f\tau} d\tau</math> 修正後 :<math>X(n\Delta_t, m\Delta_f) = \sum_{p=nS-Q}^{nS+Q} w((nS-p)\Delta_\tau)x(p\Delta_\tau)e^{-j2\pi pm\Delta_\tau\Delta_f}\Delta_\tau</math> 其中, <math>t = n\Delta_t, f = m\Delta_f, \tau = p\Delta_\tau, B = Q\Delta_\tau</math> ,<math>S = \frac{\Delta_t}{\Delta_\tau}, \Delta_t\neq \Delta_\tau</math> 假設<math>w(t)\approxeq 0</math> for <math>|t| > B</math>,則上下限可藉由以下推導而修正 <math>\int_{t+B}^{t-B} \to \int_{n\Delta_t+Q\Delta_\tau}^{n\Delta_t-Q\Delta_\tau}</math> 則上限可以寫成<math>n\Delta_t+Q\Delta_\tau == nS\Delta_\tau + Q\Delta_\tau = \Delta_\tau (nS+Q)</math>,下限則以此類推 註:<math>\Delta_\tau</math>(輸入訊號的取樣間隔) <math>\Delta_t</math>(在t軸上的輸出訊號的取樣間隔) 然而,<math>S = \frac{\Delta_t}{\Delta_\tau}</math>是整數會是比較好的。 *假設一聲音訊號: <math>\begin{cases} \Delta_\tau = \frac{1}{44100} \\ \Delta_t = \frac{1}{100} \end{cases}</math> 則經由上述公式可求得S=441,代表經由unbalanced sampling,我們跟原本<math>\Delta_t = \Delta_\tau = \frac{1}{44100}</math>相比可減少441倍的取樣點。 ====時間複雜度==== 由於t軸的取樣點少了S倍,因此跟原本的直接運算複雜度相比,只要把<math>T \to \frac{T}{S}</math>即可,如下: 複雜度:<math>O(\frac{T}{S}N \log_{2}N)</math> ==== 2.快速傅立葉轉換 ==== ===== 限制條件 ===== (1) <math>\Delta_\tau\Delta_f = \frac{1}{N}</math> (2) <math>N = \frac{1}{\Delta_\tau\Delta_f} > 2Q+1</math> : (<math>\Delta_\tau\Delta_f</math>只要是整數的倒數即可) (3) <math>\Delta_\tau < \frac{1}{2\Omega}</math>,<math>w(\tau-t)x(\tau)</math>的頻寬是 <math>\Omega</math> i.e. <math>|FT\{w(\tau-t)x(\tau)\}| = |X(t,f)|\approx 0 </math> ,當 <math>|f| > \Omega</math> ===== 過程 ===== <math>X(n\Delta_t, m\Delta_f) = \sum_{p=nS-Q}^{nS+Q} w((nS-p)\Delta_\tau)x(p\Delta_\tau)e^{-j\tfrac{2\pi pm}{N}}\Delta_\tau</math> 令 <math>q = p - (nS-Q) \longrightarrow p = (nS-Q)+q</math> <math>x_1(q) = w((Q-q)\Delta_\tau)x((nS-Q+q)\Delta_\tau)</math> for <math>0\leq q \leq 2Q</math> <math>x_1(q) = 0 \qquad \qquad \qquad \qquad \qquad \qquad \quad \quad </math>for <math>2Q <q < N</math> 修正後:<math>X(n\Delta_t, m\Delta_f) = \Delta_\tau e^{j\tfrac{2\pi (Q-nS)m}{N}} \sum_{q=0}^{N-1} x_1(q)e^{-j\tfrac{2\pi qm}{N}}</math> ====運算步驟==== 假設<math>t=c_0\Delta_t,(c_0+1)\Delta_t,\cdots , (c_0+C-1)\Delta_t =c_0S\Delta_\tau, (c_0S+S)\Delta_\tau,\cdots , [c_0S+(C-1)S]\Delta_\tau</math> <math>\quad \; \; f=m_0\Delta_f,(m_0+1)\Delta_f,\cdots , (m_0+F-1)\Delta_f</math> <math>\quad \; \; \tau =n_0\Delta_\tau,(n_0+1)\Delta_\tau,\cdots , (n_0+T-1)\Delta_\tau</math> 步驟一:計算<math>c_0,m_0,n_0,C,F,T,N,Q</math> 步驟二:<math>n = c_0 </math> 步驟三:決定<math>x_1(q)</math> 步驟四:<math>X_1(m)=FFT[x_1(q)]</math> 步驟五:轉換<math>X_1(m) \to X(n\Delta_t,m\Delta_f)</math> 步驟六:設定<math>n=n+1</math>及返回步驟三,直到<math>n=c_0+C-1</math> ====複雜度==== <math>O(\frac{T}{S}N \log_{2}N)</math> === Non-Uniform <math>\Delta_t</math> === (1) 先用比較大的<math>\Delta_t</math> (2) 如果發現<math>|X(n\Delta_t, m\Delta_f)|</math> 和 <math>|X((n+1)\Delta_t, m\Delta_f)|</math> 之間有很大的差異,則在<math>n\Delta_t</math>,<math>(n+1)\Delta_t</math> 之間選用比較小的取樣區間<math>\Delta_{t1}</math> (<math>\Delta_\tau < \Delta_{t1} < \Delta_t</math>,<math>\frac{\Delta_t}{\Delta_{t1}}</math> 和 <math>\frac{\Delta_{t1}}{\Delta_\tau}</math>皆為整數) 再用Unbalanced Sampling for STFT and WDF 中修正後的快速傅立葉轉換方法算出 <math>X(n\Delta_t + \Delta_{t1}, m\Delta_f)</math>,<math>X(n\Delta_t + 2\Delta_{t1}, m\Delta_f)</math><math>X((n+1)\Delta_t - \Delta_{t1}, m\Delta_f)</math> (3) 以此類推,如果 <math>|X(n\Delta_t + k\Delta_{t1}, m\Delta_f)|, |X((n+1)\Delta_t + (k+1)\Delta_{t1}, m\Delta_f)|</math>的差距還是太大,則再選用更小的取樣間隔<math>\Delta_{t2}</math> (<math>\Delta_\tau < \Delta_{t2} < \Delta_{t1}</math>,<math>\frac{\Delta_{t1}}{\Delta_{t2}}</math> 和 <math>\frac{\Delta_{t2}}{\Delta_\tau}</math>皆為整數) *比較 若有一音樂信號總共有1.6秒,<math>\Delta_\tau = \frac{1}{44100}</math> #選擇<math>\Delta_t = \Delta_\tau</math>,則共有<math>44100*1.6+1=70561</math>點 #選擇<math>\Delta_t = 0.01 = 441\Delta_\tau</math>,則共有<math>100*1.6+1 = 161</math>點 #t隨時間不同有不同的選擇,如下 ::<math>t=0,0.05,0.1,0.15,0.2,0.4,0.45,0.46,0.47,0.48,0.49,0.5,0.55,0.6,0.8,0.85,0.9,0.95,0.96,0.97,0.98,0.99,1,1.05,1.1,1.15,1.2,1.4,1.6</math>,共29點 ::可以這樣做的原因為:有些音樂訊號在和弦與和弦中間幾乎沒有變化,因此可以挑選較大的<math>\Delta_t</math>取樣;和弦在變換時,頻率會變化的較劇烈,因此變換和弦是需要用較多的取樣點。藉由此種non-uniform的取樣,可以讓我們大幅減少運算量,從最一開始的<math>70561 \to 29 </math>可看出我們的運算量大幅降低。 == 参见 == * [[闵可夫斯基空间]] * [[柯西不等式]] * [[三角不等式]] * [[完备空间]] == 參考書目、資料來源 == # Jian-Jiun Ding, Time frequency analysis and wavelet transform class notes, the Department of Electrical Engineering, National Taiwan University (NTU), Taipei, Taiwan, 2011. # Alan V. Oppenheim, Ronald W. Schafer, John R. Buck : Discrete-Time Signal Processing, Prentice Hall, ISBN 0-13-754920-2 # Jian-Jiun Ding, Time frequency analysis and wavelet transform class notes, Graduate Institute of Communication Engineering, National Taiwan University (NTU), Taipei, Taiwan, 2017. # Jian-Jiun Ding, Time frequency analysis and wavelet transform class notes, Graduate Institute of Communication Engineering, National Taiwan University (NTU), Taipei, Taiwan, 2020. # Jian-Jiun Ding, Time frequency analysis and wavelet transform class notes, Graduate Institute of Communication Engineering, National Taiwan University (NTU), Taipei, Taiwan, 2022. [[category:傅里叶变换|D]]
该页面使用的模板:
Template:Cite book
(
查看源代码
)
Template:Cite web
(
查看源代码
)
Template:NoteTA
(
查看源代码
)
Template:傅立葉變换
(
查看源代码
)
返回
短時距傅立葉變換
。
导航菜单
个人工具
登录
命名空间
页面
讨论
不转换
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
工具
链入页面
相关更改
页面信息