MATLAB 快速傅立葉逆變換

Ammar Ali 2022年7月18日
MATLAB 快速傅立葉逆變換

本教程將討論使用 MATLAB 的 ifft() 函式查詢快速傅立葉逆變換。

MATLAB 快速傅立葉逆變換

我們可以使用 Matlab 的 ifft() 函式來找到向量、矩陣或多維陣列的快速傅立葉逆變換。ifft() 函式有四種語法,如下所示。

Out = ifft(X)
Out = ifft(X,n)
Out = ifft(X,n,dim)
Out = ifft(___,symflag)

第一種語法將使用快速傅立葉變換演算法返回輸入 X 的快速傅立葉逆變換。ifft() 函式檢查輸入 X 中存在的共軛對稱向量;如果向量是共軛對稱的,則輸出將是快速且真實的。

一個向量是共軛對稱的,如果它的反對角交換矩陣和它的複共軛的乘積等於原始向量。在時域訊號的情況下,其快速傅立葉變換包含半正頻譜和半負頻譜。

輸入 X 可以是向量、矩陣或多維陣列。如果輸入是向量,第一種語法將返回包含向量的快速傅立葉逆變換的向量,並且輸出向量將與輸入向量具有相同的長度。

如果輸入是矩陣,則語法將返回包含矩陣列的快速傅立葉逆變換的矩陣,輸出矩陣的大小將是輸入矩陣。如果輸入是多維陣列,則該函式將沿第一維返回值的快速傅立葉逆變換,將它們視為向量。

第二種語法用於新增我們想要在其上找到快速傅立葉逆變換的點作為第二個引數 n。如果我們不新增點,該函式將使用元素索引作為點。

如果引數 n 為零,則函式的輸出將是一個空矩陣。如果引數長度 n 小於輸入向量或矩陣的長度,ifft() 函式將忽略剩餘值。

如果引數長度 n 大於向量或矩陣的長度,則函式將在輸入值之間新增零,從而提高函式的效能。引數長度 n 通常是小素數或 2 的冪的乘積。

第三種語法用於將維度設定為第三個引數 dim,用於在矩陣和多維陣列的情況下找到快速傅立葉逆變換。例如,在矩陣輸入的情況下,函式會找到每一列的快速傅立葉逆變換,但如果我們將 2 作為第三個引數新增,函式將返回每一行的快速傅立葉逆變換。

第四個引數用於將輸入的對稱性設定為對稱或非對稱。如果輸入不完全對稱,我們可以使用此引數將其設定為對稱,以便函式將輸入視為對稱。

例如,讓我們建立一個向量並使用 fft() 函式找到它的快速傅立葉變換,然後我們將使用 ifft() 函式找到快速傅立葉逆變換。請參閱下面的程式碼。

clc
clear

n = [1 6 2]
fourier = fft(n)
inverse_fourier = ifft(fourier)

輸出:

n =

     1     6     2


fourier =

   9.0000 + 0.0000i  -3.0000 - 3.4641i  -3.0000 + 3.4641i


inverse_fourier =

    1.0000    6.0000    2.0000

在上面的程式碼中,我們使用了一個包含三個元素的向量來查詢傅立葉和傅立葉逆變換,以檢查 ifft() 函式的結果。我們可以在輸出中看到輸入向量 nifft() 函式的輸出是相同的,這意味著該函式執行良好。

我們可以在輸出中看到輸入向量 n 的傅立葉變換包含幅度和相位,這兩者都用於重建原始訊號。如果我們取出傅立葉變換的一部分,例如幅度或相位,我們將無法重建原始訊號。

在使用 ifft() 函式重建原始訊號之前,我們必須確保訊號包含幅度和相位。我們還必須確保訊號不會偏離其原始位置。

例如,我們可以使用 fftshift() 函式來找到傅立葉變換並將零頻率分量移動到頻譜的中心。如果我們使用 ifft() 函式來找到它的傅立葉逆變換,我們將無法正確地重建原始單曲。

在這種情況下,我們可以使用 ifftshift() 函式代替 ifft() 函式,ifftshift() 函式將找到傅立葉逆變換並將訊號移回其原始位置。

如果我們使用上面顯示的第二種語法設定點,輸出也會改變。例如,在點長度大於輸入向量長度的情況下,重構訊號將包含比原始向量或矩陣元素更多的元素。

如果我們改變 ifft() 函式的維度,輸出也會改變,它可能與原始向量或矩陣不匹配。例如,讓我們重複上面的示例並更改用於對輸入向量進行傅立葉逆變換的點數。

請參閱下面的程式碼。

clc
clear

n = [1 6 2]
fourier = fft(n)
inverse_fourier = ifft(fourier,4)

輸出:

n =

     1     6     2


fourier =

   9.0000 + 0.0000i  -3.0000 - 3.4641i  -3.0000 + 3.4641i


inverse_fourier =

   0.7500 + 0.0000i   3.8660 - 1.6160i   2.2500 + 1.7321i   2.1340 - 0.1160i

我們可以看到 ifft() 函式的輸出與輸入向量 n 不匹配,因為我們將點數更改為 4,預設為 3。檢查此連結以獲取有關 ifft() 函式的更多詳細資訊。

作者: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook