fft語法為:
解釋:
y = fft(x) ,返回 x的離散傅利葉變換(dft)
y = fft(x,n) ,若x點的個數少於n,則在後面加0,湊到n。若x的點的個數多於n,則刪除多餘的數。其餘與上相同。
y = fft(x,n,dim) ,若dim=1,則按照列向量進行dft。若dim=2,則按照行向量進行dft。若dim>2,也可以計算,但是還不知是什麼~
例子: 使用fft 計算一段波的 基本資訊
同時我們可以給波增加小部分雜訊
計算波形的頻率、幅值、相位分量。
原始函式為:s = 0.7*sin(2*pi*50*t+pi/4) + sin(2*pi*120*t-pi/2)
利用fft計算其中的 頻率、幅值、相位。
clear;clc
fs = 1000; % 取樣頻率
t = 1/fs; % 取樣週期
l = 1000; % 訊號長度 由此知,頻率解析度為 1hz
t = (0:l-1)*t; % 時間相量
s = 0.7*sin(2*pi*50*t+pi/4) + sin(2*pi*150*t-pi/2); % 原始函式
s = s + 2*randn(size(t)); %增加雜訊 -------------------------------------------
y = fft(s);
p2 = abs(y/l); % 每個量除以數列長度 l
p1 = p2(1:l/2+1); % 取交流部分
p1(2:end-1) = 2*p1(2:end-1); % 交流部分模值乘以2
f = fs*(0:(l/2))/l;
plot(f,p1)
title('single-sided amplitude spectrum of s(t)')
xlabel('f (hz)')
ylabel('|p1(f)|')
f1=y(1:l/2+1);
f1=atan2(imag(f1),real(f1))+pi/2;
%需要將fft的結果加上pi/2才是真實的值,實驗出來的,原理未明。
theta = [f1(51) f1(151)]
%結果為弧度制
-------------------------計算結果---------------------------------------
theta =
0.7854 4.7124(減去2pi,則為-pi/2)
Matlab快速傅利葉變換程式(FFT)編寫
最近在學習數字訊號處理,正好到快速傅利葉變換,寫乙個基於基2fft演算法的傅利葉變換。利用原理 dit fft 時域抽取法基2fft dit fft 設序列x n 的長度為n,且滿足n 2 m,m為自然數。按n的奇偶把x n 分解為兩個n 2的子串行。對x n 做dft,經過化簡可以得到 x k x...
MATLAB中快速傅利葉變換fft的應用
傅利葉變換是一種線性的積分變換,它提供了一種可以將訊號從時間幅值座標變換到頻率幅值座標的方法,其具體的定義如下 上式即為傅利葉變換的表示式。傅利葉變換將訊號分解為若干個簡諧訊號疊加的形式,通過傅利葉變換畫出頻譜圖之後就可以找到訊號中包含的頻率成分。matlab中自帶的fft 函式可以幫助我們完成傅利...
FFT和Matlab中操作FFT
fft 離散傅氏變換的快速演算法 fft fast fourier transformation 是離散傅氏變換 dft 的快速演算法。即快速傅氏變換。輸入n 1個數,輸出n 1個數 意義不同 輸入是時域,輸出為頻域 輸出是 每個取樣點對應的振幅或者能量值 輸出值的第乙個對應直流分量的振幅,第二個值...