快速傅立葉變換(FFT)結果的物理意義是什麼?(附Matlab程序)

2020-12-01 電子產品世界

FFT是離散傅立葉變換的快速算法,可以將一個信號變換到頻域。有些信號在時域上是很難看出什麼特徵的,但是如果變換到頻域之後,就很容易看出特徵了。這就是很多信號分析採用FFT變換的原因。另外,FFT可以將一個信號的頻譜提取出來,這在頻譜分析方面也是經常用的。

本文引用地址:http://www.eepw.com.cn/article/201610/308926.htm

雖然很多人都知道FFT是什麼,可以用來做什麼,怎麼去做,但是卻不知道FFT之後的結果是什麼意思、如何決定要使用多少點來做FFT。

現在就根據實際經驗來說說FFT結果的具體物理意義。一個模擬信號,經過ADC採樣之後,就變成了數位訊號。採樣定理告訴我們,採樣頻率要大於信號頻率的兩倍,這些我就不在此羅嗦了。

採樣得到的數位訊號,就可以做FFT變換了。N個採樣點,經過FFT之後,就可以得到N個點的FFT結果。為了方便進行FFT運算,通常N取2的整數次方。

假設採樣頻率為Fs,信號頻率F,採樣點數為N。那麼FFT之後結果就是一個為N點的複數。每一個點就對應著一個頻率點。這個點的模值,就是該頻率值下的幅度特性。具體跟原始信號的幅度有什麼關係呢?假設原始信號的峰值為A,那麼FFT的結果的每個點(除了第一個點直流分量之外)的模值就是A的N/2倍。而第一個點就是直流分量,它的模值就是直流分量的N倍。而每個點的相位呢,就是在該頻率下的信號的相位。第一個點表示直流分量(即0Hz),而最後一個點N的再下一個點(實際上這個點是不存在的,這裡是假設的第N+1個點,也可以看做是將第一個點分做兩半分,另一半移到最後)則表示採樣頻率Fs,這中間被N-1個點平均分成N等份,每個點的頻率依次增加。例如某點n所表示的頻率為:Fn=(n-1)*Fs/N。由上面的公式可以看出,Fn所能分辨到頻率為為Fs/N,如果採樣頻率Fs為1024Hz,採樣點數為1024點,則可以分辨到1Hz。1024Hz的採樣率採樣1024點,剛好是1秒,也就是說,採樣1秒時間的信號並做FFT,則結果可以分析到1Hz,如果採樣2秒時間的信號並做FFT,則結果可以分析到0.5Hz。如果要提高頻率分辨力,則必須增加採樣點數,也即採樣時間。頻率解析度和採樣時間是倒數關係。

假設FFT之後某點n用複數a+bi表示,那麼這個複數的模就是An=根號a*a+b*b,相位就是Pn=atan2(b,a)。根據以上的結果,就可以計算出n點(n≠1,且n=N/2)對應的信號的表達式為:An/(N/2)*cos(2*pi*Fn*t+Pn),即2*An/N*cos(2*pi*Fn*t+Pn)。對於n=1點的信號,是直流分量,幅度即為A1/N。

由於FFT結果的對稱性,通常我們只使用前半部分的結果,即小於採樣頻率一半的結果。

好了,說了半天,看著公式也暈,下面以一個實際的信號來做說明。

假設我們有一個信號,它含有2V的直流分量,頻率為50Hz、相位為-30度、幅度為3V的交流信號,以及一個頻率為75Hz、相位為90度、幅度為1.5V的交流信號。用數學表達式就是如下:

S=2+3*cos(2*pi*50*t-pi*30/180)+1.5*cos(2*pi*75*t+pi*90/180)

式中cos參數為弧度,所以-30度和90度要分別換算成弧度。我們以256Hz的採樣率對這個信號進行採樣,總共採樣256點。按照我們上面的分析,Fn=(n-1)*Fs/N,我們可以知道,每兩個點之間的間距就是1Hz,第n個點的頻率就是n-1。我們的信號有3個頻率:0Hz、50Hz、75Hz,應該分別在第1個點、第51個點、第76個點上出現峰值,其它各點應該接近0。實際情況如何呢?我們來看看FFT的結果的模值如圖所示。

FFT的結果

從圖中我們可以看到,在第1點、第51點、和第76點附近有比較大的值。我們分別將這三個點附近的數據拿上來細看:

1點: 512+0i

2點: -2.6195E-14 - 1.4162E-13i

3點: -2.8586E-14 - 1.1898E-13i

50點:-6.2076E-13 - 2.1713E-12i

51點:332.55 - 192i

52點:-1.6707E-12 - 1.5241E-12i

75點:-2.2199E-13 -1.0076E-12i

76點:3.4315E-12 + 192i

77點:-3.0263E-14 +7.5609E-13i

很明顯,1點、51點、76點的值都比較大,它附近的點值都很小,可以認為是0,即在那些頻率點上的信號幅度為0。接著,我們來計算各點的幅度值。分別計算這三個點的模值,結果如下:

1點: 512

51點:384

76點:192

按照公式,可以計算出直流分量為:512/N=512/256=2;50Hz信號的幅度為:384/(N/2)=384/(256/2)=3;75Hz信號的幅度為192/(N/2)=192/(256/2)=1.5。可見,從頻譜分析出來的幅度是正確的。

然後再來計算相位信息。直流信號沒有相位可言,不用管它。先計算50Hz信號的相位,atan2(-192, 332.55)=-0.5236,結果是弧度,換算為角度就是180*(-0.5236)/pi=-30.0001。再計算75Hz信號的相位,atan2(192, 3.4315E-12)=1.5708弧度,換算成角度就是180*1.5708/pi=90.0002。可見,相位也是對的。根據FFT結果以及上面的分析計算,我們就可以寫出信號的表達式了,它就是我們開始提供的信號。

總結:假設採樣頻率為Fs,採樣點數為N,做FFT之後,某一點n(n從1開始)表示的頻率為:Fn=(n-1)*Fs/N;該點的模值除以N/2就是對應該頻率下的信號的幅度(對於直流信號是除以N);該點的相位即是對應該頻率下的信號的相位。相位的計算可用函數atan2(b,a)計算。atan2(b,a)是求坐標為(a,b)點的角度值,範圍從-pi到pi。要精確到xHz,則需要採樣長度為1/x秒的信號,並做FFT。要提高頻率解析度,就需要增加採樣點數,這在一些實際的應用中是不現實的,需要在較短的時間內完成分析。解決這個問題的方法有頻率細分法,比較簡單的方法是採樣比較短時間的信號,然後在後面補充一定數量的0,使其長度達到需要的點數,再做FFT,這在一定程度上能夠提高頻率分辨力。具體的頻率細分法可參考相關文獻。

[附錄:本測試數據使用的matlab程序]

close all; %先關閉所有圖片

Adc=2; %直流分量幅度

A1=3; %頻率F1信號的幅度

A2=1.5; %頻率F2信號的幅度

F1=50; %信號1頻率(Hz)

F2=75; %信號2頻率(Hz)

Fs=256; %採樣頻率(Hz)

P1=-30; %信號1相位(度)

P2=90; %信號相位(度)

N=256; %採樣點數

t=[0:1/Fs:N/Fs]; %採樣時刻

%信號

S=Adc+A1*cos(2*pi*F1*t+pi*P1/180)+A2*cos(2*pi*F2*t+pi*P2/180);

%顯示原始信號

plot(S);

title('原始信號');

figure;

Y = fft(S,N); %做FFT變換

Ayy = (abs(Y)); %取模

plot(Ayy(1:N)); %顯示原始的FFT模值結果

title('FFT 模值');

figure;

Ayy=Ayy/(N/2); %換算成實際的幅度

Ayy(1)=Ayy(1)/2;

F=([1:N]-1)*Fs/N; %換算成實際的頻率值

plot(F(1:N/2),Ayy(1:N/2)); %顯示換算後的FFT模值結果

title('幅度-頻率曲線圖');

figure;

Pyy=[1:N/2];

for i=1:N/2

Pyy(i)=phase(Y(i)); %計算相位

Pyy(i)=Pyy(i)*180/pi; %換算為角度

end;

plot(F(1:N/2),Pyy(1:N/2)); %顯示相位圖

title('相位-頻率曲線圖');

相關焦點

  • 快速傅立葉變換FFT在MATLAB中的實現
    首先,為什麼要進行傅立葉變換?將時域的信號變換到頻域的正弦信號,正弦比原信號更簡單,且正弦函數很早就被充分地研究,處理正弦信號比處理原信號更簡單。正弦信號的頻率保持性:輸入為正弦信號,輸出仍是正弦信號,幅度和相位可能發生變化,但頻率與原信號保持一致,只有正弦信號才擁有這樣的性質。
  • 在MATLAB中如何實現快速傅立葉變換
    對於傅立葉變換的類型:非周期連續信號採用傅立葉變化;周期連續信號採用傅立葉級數;非周期連續離散信號採用離散時間傅立葉變換;周期離散信號採用離散傅立葉級數。四種傅立葉變換總結如下表所示。表1從離散傅立葉級數 (DFS) 到離散傅立葉變換 (DFT),周期序列雖為無窮長序列,但是只要知道一個周期的內容,便可知其全貌。因此,周期序列實際上只有N個樣值有信息,通過推導可得到DFT、時域和頻域 (DFT) 上的有限長序列,可以用來「代表」周期序列,DFT在時域和頻域上均離散,且為有限長序列,可以用計算機進行處理。
  • 用matlab對信號進行傅立葉變換
    傅氏變換分析是信號分析中很重要的方法,藉助matlab可以很方便的對各類信號進行傅氏頻域分析。
  • matlab下實現FFT信號分析
    利用matlab做頻譜分析前我們需要了解分析過程中的一些基礎知識,matlab中的 fft 函數用法、fftshift 函數的用法函數 1  fft :作用:快速傅立葉變換。語法:Y = fft(X)Y = fft(X,n)Y = fft(X,n,dim)語法:Y = fft(X) 用快速傅立葉變換 (FFT) 算法計算 X 的離散傅立葉變換 (DFT)。
  • 用matlab對信號進行傅立葉變換的入門實例
    本文介紹了集中離散的傅氏變換以及matlab實現方法。2、離散傅立葉變換DFT (Discrete Fourier Transform)與1中DTFT不一樣的是,DTFT的求和區間是整個頻域,這對計算機的計算來說是不可以實現的,DFT就是序列的有限傅立葉變換。
  • 如何用matlab對信號進行傅立葉變換
    傅氏變換分析是信號分析中很重要的方法,藉助matlab可以很方便的對各類信號進行傅氏頻域分析。
  • 史上最簡單的FFT(快速傅立葉變換)
    這個就需要傅立葉變換了。3 複數複數是數學上一個很常見的概念,複數的特點是對負數進行開方。負數相加的規則是實部(x軸)和實部相加,虛部(y軸)和虛部相加。 複數乘法的規則是模長相乘,幅角相加。單位圓上的點有什麼特殊性質麼?
  • MATLAB實驗——FFT變換
    實驗基本原理與設計1 應用傅立葉變換進行圖像處理傅立葉變換是線性系統分析的一個有力工具,它能夠定量地分析諸如數位化系統、採樣點、電子放大器、卷積濾波器、噪音和顯示點等的作用。通過實驗培養這項技能,將有助於解決大多數圖像處理問題。對任何想在工作中有效應用數字圖像處理技術的人來說,把時間用在學習和掌握博裡葉變換上是很有必要的。
  • 使用 matlab 進行傅立葉分析和濾波
    快速傅立葉matlab中的快速傅立葉有兩種調用形式:y=fft(x)。x是原始信號,y是變換之後的信號。y與x有相同的長度。y=fft(x,N)。x,y定義如上,N是正整數,表示進行N點快速傅立葉變換。如果x長度小於N,則對x補零,使之與N相等;反則,則對x進行截取。對應的逆變換有兩種,分別為x=ifft(y)和x=ifft(y.N)。一般而言,N點fft的結果y,在處對應的頻率為最高採樣率的一半,y的後一半與前一半對稱。
  • 【基礎教程】Matlab實現傅立葉變換
    非周期連續性信號 對應於傅立葉變換,頻域連續非周期 2. 周期性連續性信號 對應於傅立葉級數,頻域離散非周期 3. 非周期離散信號 對應於DTFT(離散時間傅立葉變換),頻域連續周期 4.傅立葉變換實現只有離散傅立葉變換才可以實現,在MATLAB中實現有fft,fft2進行傅立葉變換,同樣可以手動進行變換。
  • OpenCV-Python 傅立葉變換|三十
    對於圖像,使用2D離散傅立葉變換(DFT)查找頻域。一種稱為快速傅立葉變換(FFT)的快速算法用於DFT的計算。關於這些的詳細信息可以在任何圖像處理或信號處理教科書中找到。請參閱其他資源部分。現在,一旦獲得結果,零頻率分量(DC分量)將位於左上角。如果要使其居中,則需要在兩個方向上將結果都移動$frac{N}{2}$。只需通過函數np.fft.fftshift()即可完成。(它更容易分析)。找到頻率變換後,就可以找到幅度譜。
  • 通俗易懂的講解FFT的讓你快速了解FFT
    本人最早知道傅立葉變換的時候是沉迷於音樂的頻譜跳動無法自拔,當時就很想做一個音樂頻譜顯示器。搜閱了很多資料之後,才了解到傅立葉變換,和FFT。當然這都是以前的事情了,經過了系統的學習+2個星期的研究,自製了一個FFT的算法,不敢說速度上的優勢,但是個人認為是一種通俗易懂的實現方法。經過實際的VC++模擬實驗、和STM32跑的也很成功。
  • 傅立葉變換,拉普拉斯變換和Z變換的意義
    傅立葉變換就是將一個信號的時域表示形式映射到一個頻域表示形式;逆傅立葉變換恰好相反。這都是一個信號的不同表示形式。它的公式會用就可以,當然把證明看懂了更好。  對一個信號做傅立葉變換,可以得到其頻域特性,包括幅度和相位兩個方面。幅度是表示這個頻率分量的大小,那麼相位呢,它有什麼物理意義?頻域的相位與時域的相位有關係嗎?
  • 什麼是傅立葉變換,如何用MATLAB實現?
    第三場分享的主題是: 傅立葉變換的理解與MATLAB實現直播日期:2021年1月21日(周四)晚18點沒有傅立葉變換,就無法用數學的方法去處理現實世界中的各種各樣的信號。如今幾乎所有信息最終都會數位化,就會用到傅立葉變換及其變種,藉助傅立葉變換才能將信號識別為具體的成分,完成數位化。
  • 【E課堂】傅立葉變換拉普拉斯變換的物理解釋及區別
    傅立葉變換就是將一個信號的時域表示形式映射到一個頻域表示形式;逆傅立葉變換恰好相反。這都是一個信號的不同表示形式。它的公式會用就可以,當然把證明看懂了更好。  對一個信號做傅立葉變換,可以得到其頻域特性,包括幅度和相位兩個方面。幅度是表示這個頻率分量的大小,那麼相位呢,它有什麼物理意義?頻域的相位與時域的相位有關係嗎?
  • FFT 的物理意義
    FFT是離散傅立葉變換的快速算法,可以將一個信號變換到頻域。有些信號在時域上是很難看出什麼特徵的,但是如果變換到頻域之後,就很容易看出特徵了。這就是很多信號分析採用FFT變換的原因。另外,FFT可以將一個信號的頻譜提取出來,這在頻譜分析方面也是經常用的。
  • 傅立葉變換
    傅立葉級數實際實際是對周期函數和半周期函數的按基地函數去1、cosx、cos2x、...cosnx、sinx、sin2x、sinnx的展開式。如果定義在(-∞,∞)區間的非周期函數還能進行傅立葉展開嗎?傅立葉計算擴展到連續變換的情況後就是傅立葉積分。已知周期為2π的函數用傅立葉展開式形式如下:
  • Matlab與傅立葉變換
    今天,二狗給大家講一講Matlab實現傅立葉變換。大家都知道,信號分為兩種,確定信號和不確定信號。在確定信號中,有兩個非常重要的類別,時域分析和頻域分析。而將兩者充分結合的,就是我們今天要講的傅立葉變換。絕大多數工科狗在大一或者大二的時候,都或多或少接觸過傅立葉變換。二狗也不例外。當初二狗學《複變函數與積分變換》時,差點被搞成死狗,就是因為傅立葉變換。
  • 第三章 離散傅立葉變換
    本章的主題就是離散傅立葉變換。只講實用的,不講虛的。工程化的講解有助於同學們消化理論知識。
  • 魔法世界的入場券——量子快速傅立葉變換
    快速傅立葉變換快速傅立葉變換(Fast Fourier Transform, FFT)是現代生活中的幕後數字主力,在這個處處需要連接設備萬物互聯的世界中,它使人們的信號傳輸成為現實,是一條不折不扣的數字捷徑。雖然人們隨手打開的小視頻(諸如抖音、微信視頻等)很短,但其中的每一分鐘,都需要計算數百個FFT。