傅立葉變換(FT, Fourier Transform)的作用是将一個信号由時域變換到頻域。其實就是把資料由橫坐标時間、縱坐标采樣值的波形圖格式,轉換為橫坐标頻率、縱坐标振幅(或相位)的頻譜格式。變換後可以很明顯地看出一些原先不易察覺的特征。
離散傅立葉變換(DFT)的算法屬于線性變換。由于對每個采樣點,都要做一次全部點的權重求和的運算,是以當采樣點比較多時,運算速度會很慢。
快速傅立葉變換(FFT)是DFT的快速算法,運算結果和DFT是相等的。其原理是利用權值的對稱性與周期性,把采樣點分解成兩份,每份的點數是原來的一半,這樣運算量也會減半。然後可以繼續分解為4份、8份、16份……以此不斷提升效率。

波形的公式:
采樣植(y) - 縱坐标軸代表采樣點的值
時間(t) - 橫坐标軸代表時間,或者代表目前是第幾個采樣點
振幅(A) - 也叫幅度,代表波的高度(峰值)
圓頻率(ω) - ω=2π*f,f代表頻率
相位(ω*t) - 是個角度,一般用弧度制表示,弧度制的0~2π,代表0度到360度
采樣點數量(N) - 采樣的資料是離散的,常常用散點來表示,下圖共有20個采樣點。
頻率(f) - 是機關時間内完成振動的次數,f=波的重複次數/N。
假如一個波的圖形為:采樣點數量(N)=200,振幅(A)=3,頻率為10個波,即3*sin(2π*10/200)。
經過傅立葉變換後,可以看到在大約10的位置有一條豎線,由此很容易看出,頻率為10個波。由于變換的結果是個對稱圖形,是以在右邊200-10的對應位置也會出現一條豎線。變換後的資料,除了這兩條豎線以外,其它值的都近似為0,是個稀疏矩陣。
運算結果是複數,輸出值取複數的模(絕對值)。複數的模 = 實部的平方+虛部的平方,再開平方 = sqrt(real^2+imagine^2)
如果隻為提取特征的話,使用上面的輸出值就可以了。如果想得到标準的振幅和頻率值,那麼:
振幅 = 輸出值/(N/2) = 300/(200/2) = 3
頻率 = 波的重複次數/N = 10/200 = 0.05
Matlab:
N = 200; % 采樣點數量
A = 3; % 振幅
fv = 10; % 波的重複次數
f = fv / 200; % 頻率
t = [1:200]; % 時間
y = A * sin(t*2*pi*f); % 生成波形采樣資料
plot(y); % 顯示時域圖
figure;
Y = fft(y, N); % FFT變換
plot(abs(Y)); % 顯示頻域圖
--------------------------------------------
傅立葉變換入門: http://news.cnblogs.com/n/209014/
FFT是基于複數運算的,而實際采樣點的資料一般是實數,是以要轉換成複數形式。标準的做法是複數的實數部分為采樣點的實數資料,虛數部分全部填0。(但這樣做會有一定運算效率的問題,因為填0的部分也參與運算,對此也有一些優化算法。)
轉載于:https://www.cnblogs.com/tmdsleep/p/5424854.html