傅里叶变换函数FFT的使用方法
原文鏈接:https://blog.csdn.net/defu123sss/article/details/80457699
點擊查看更多通信知識點擊此處
快速傅里葉變換(Fast Fourier transform,FFT)
利用離散傅里葉變換(DTF)算法進行運算時,復數乘法運行次,復數加法運行次,計算量其實可以通過fft減小。1965年,首先由Cooley-Tukey提出了基-2FFT算法,對DFT的發展起到了極大推進作用。隨后又出現了混合基算法。fft 是一種計算DTF的快速算法,利用因子的周期性、共軛對稱性、可約性。
?
1、fft算法主要有以下3種
時域抽取基-2FFT算法(Decimation -In- Time,DIT-FFT)
頻域抽取基-2FFT算法(Decimation-In-Freqency,DIF-FFT)
序列長度N可表示為合數的FFT 算法(混合基)
?
2、fft函數
(matlab說明文檔:https://ww2.mathworks.cn/help/matlab/ref/fft.html?searchHighlight=fft&s_tid=doc_srchtitle)
?
2.1 Y = fft(X) ——用快速傅里葉變換 (FFT) 算法計算 X 的離散傅里葉變換 (DFT)。
如果 X 是向量,則 fft(X) 返回該向量的傅里葉變換。
如果 X 是矩陣,則 fft(X) 將 X 的各列視為向量,并返回每列的傅里葉變換。
如果 X 是一個多維數組,則 fft(X) 將沿大小不等于 1 的第一個數組維度的值視為向量,并返回每個向量的傅里葉變換。
?
2.2 Y = fft(X,n) ——返回 n 點 DFT。如果未指定任何值,則 Y 的大小與 X 相同。
如果 X 是向量且 X 的長度小于 n,則為 X 補上尾零以達到長度 n。
如果 X 是向量且 X 的長度大于 n,則對 X 進行截斷以達到長度 n。
如果 X 是矩陣,則每列的處理與在向量情況下相同。
如果 X 為多維數組,則大小不等于 1 的第一個數組維度的處理與在向量情況下相同。
?
2.3 Y = fft(X,n,dim) ——返回沿維度 dim 的傅里葉變換。
如果 X 是矩陣,則 fft(X,n,2) 返回每行的 n 點傅里葉變換。
?
具體的示例都在官方文檔中,這里說說fft函數的特點:
1.? 函數fft返回值的數據結構具有對稱性
根據采樣定理,fft能分辨的最高頻率為采樣頻率的一半(即Nyquist頻率),函數fft返回值是以Nyqusit頻率為軸對稱的,Y的前一半與后一半是復數共軛關系,信息其實是重復的。所以,如果進行N點的fft,實際上有用的點數為n+1點(N為奇數或者偶數的情況下有用的點數均相同)。
Fn = (n-1)* Fs /N
Fn是第n點所表示的真實頻率值。當然,n只取前一半的點就足夠了。這樣,可以達到的頻率分辨率即為Fs/N。
2.? 幅值
作FFT分析時,幅值大小與輸入點數有關,要得到真實的幅值大小,需要將變換后的結果除以N。且由于零頻在雙邊譜中本沒有被一分為二,所以對于零頻外的點還有乘以2,得到的才是真實的頻率幅值。
3.? 基頻
?若分析數據時長為T,則分析結果的基頻就是f0=1/T,分析結果的頻率序列為[0:N-1]*f0
4.? 執行N點FFT
在調用格式 2.2 中,函數執行N點FFT。若y為向量且長度小于N,則函數將y補零至長度N,若向量y的長度大于N,則函數截斷y使之長度為N。由于fft算法的本質,對于N的選取一般為大于序列長度點數的最小2的冪次方,這樣能改善 fft 的計算性能。
而如果未制定進行fft的點數N,默認產生的結果為N點,默認進行的fft便是基于混合基來進行計算的,性能當然不會優于基2。
3、fftshift函數
官方文檔:
https://ww2.mathworks.cn/help/matlab/ref/fftshift.html
fftshift的功能是將零頻分量移到頻譜中心。怎么理解這句話呢?fft計算得到的頻域信號的頻率區間是0~Fs(Fs是采樣頻率)的,且關于Fs/2對稱。稱0~FS為數字頻率,對應模擬角頻。但是我們只關心區間,fftshift函數的功能就是將fft處理之后的部分搬移至,從而使零頻分量居于頻譜的中心位置。
?
Y = fftshift(X) 通過將零頻分量移動到數組中心,重新排列傅里葉變換 X。
如果 X 是向量,則 fftshift 會將 X 的左右兩半部分進行交換。
如果 X 是矩陣,則 fftshift 會將 X 的第一象限與第三象限交換,將第二象限與第四象限交換。
如果 X 是多維數組,則 fftshift 會沿每個維度交換 X 的半空間。
?
Y = fftshift(X,dim) 沿 X 的維度 dim 執行運算。例如,如果 X 是矩陣,其行表示多個一維變換,則 fftshift(X,2) 會將 X 的每一行的左右兩半部分進行交換。
注意:fftshift 沒有fft的功能,是在 fft 之后進行的(有需要的話)。
運行代碼:
得到如下的結果:
?
總結
以上是生活随笔為你收集整理的傅里叶变换函数FFT的使用方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果小圆点怎么弄出来_原来苹果手机轻点2
- 下一篇: C语言实现前部插入创建链表以及尾部插入链