MATLAB - 逆傅立葉變換



MATLAB 中的逆傅立葉變換是一個函式,它接收訊號的頻域表示,並將其轉換回時域表示。它是傅立葉變換的反向過程,傅立葉變換將時域訊號轉換為其頻域表示。

在 MATLAB 中,逆傅立葉變換使用 `ifft` 函式(對於一維訊號)和 `ifft2` 函式(對於二維訊號)計算。逆傅立葉變換的結果是代表原始時域訊號的訊號。

逆傅立葉變換在訊號處理、影像處理和通訊中非常有用,它用於分析和處理頻域中的訊號。它允許對頻域中表示的訊號執行諸如濾波、壓縮和調製之類的操作。

使用 `ifft()` 進行逆傅立葉變換

MATLAB 中的 `ifft()` 函式計算序列的逆離散傅立葉變換 (IDFT)。它接收表示頻域訊號的一維或二維陣列(例如,使用 `fft()` 函式獲得),並返回相應的時域訊號。

逆離散傅立葉變換是離散傅立葉變換 (DFT) 的逆過程。它將訊號的頻域表示轉換回時域表示。這在需要在頻域中分析或處理訊號,然後將其轉換回時域以進行進一步處理或解釋的應用中非常有用。

語法

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

語法解釋

X = ifft(Y) 使用快速演算法計算 Y 的逆傅立葉變換。結果 X 與 Y 大小相同。

  • 如果 Y 是向量,`ifft(Y)` 返回向量的逆變換。
  • 如果 Y 是矩陣,`ifft(Y)` 返回矩陣每一列的逆變換。
  • 如果 Y 是多維陣列,`ifft(Y)` 將沿第一個非單一維度上的值視為向量,並返回每個向量的逆變換。

X = ifft(Y,n) - 計算 Y 的逆傅立葉變換,但在執行變換之前,用零填充 Y 以使其長度為 n。

X = ifft(Y,n,dim) - 沿指定的維度 dim 計算 Y 的逆傅立葉變換,用零填充以沿該維度使長度為 n。例如,如果 Y 是矩陣,`ifft(Y,n,2)` 計算每一行的 n 點逆變換。

X = ifft(___,symflag) - 允許您指定 Y 的對稱性以及任何之前的輸入引數組合。例如,`ifft(Y,'symmetric')` 將 Y 視為共軛對稱。

MATLAB 中逆傅立葉變換的示例

讓我們看看上面提到的每種語法的示例。

示例 1:使用 `ifft(Y)` 計算逆傅立葉變換

我們的程式碼如下:

% Generate a signal
t = linspace(0, 1, 1000); % Time vector
f = 5; % Frequency of the signal
signal = sin(2*pi*f*t);

% Compute the Fourier Transform
Y = fft(signal);

% Compute the Inverse Fourier Transform
X = ifft(Y);

% Plot the original and reconstructed signals
subplot(2,1,1);
plot(t, signal);
title('Original Signal');
xlabel('Time');
ylabel('Amplitude');

subplot(2,1,2);
plot(t, real(X)); % Display real part of X
title('Reconstructed Signal');
xlabel('Time');
ylabel('Amplitude');

在這個例子中:

  • 我們首先生成一個正弦訊號 signal。
  • 然後我們使用 `fft()` 計算訊號的傅立葉變換,結果為 Y。
  • 接下來,我們使用 `ifft(Y)` 計算逆傅立葉變換,理想情況下應該重建原始訊號。
  • 最後,我們繪製原始訊號和重建訊號以進行比較。

程式碼執行後,我們得到以下輸出:

示例 2:計算具有零填充的逆傅立葉變換

我們的程式碼如下:

% Generate a signal
t = linspace(0, 1, 1000); % Time vector
f = 5; % Frequency of the signal
signal = sin(2*pi*f*t);

% Compute the Fourier Transform
Y = fft(signal);

% Compute the Inverse Fourier Transform with zero padding
n = 2000; % Length to pad
X = ifft(Y, n);

% Plot the original and padded signals
subplot(2,1,1);
plot(t, signal);
title('Original Signal');
xlabel('Time');
ylabel('Amplitude');

subplot(2,1,2);
t_padded = linspace(0, 1, n); % Time vector for padded signal
plot(t_padded, real(X)); % Display real part of X
title('Padded Signal');
xlabel('Time');
ylabel('Amplitude');

此示例類似於前一個示例,但增加了零填充。

  • 在計算訊號的傅立葉變換之後,我們使用 `ifft(Y, n)` 計算具有零填充到長度 n 的逆傅立葉變換。
  • 零填充可用於提高訊號頻域表示的解析度。

執行後的輸出為:

示例 3

沿特定維度計算具有零填充的逆傅立葉變換

我們的程式碼是:

% Create a 2D matrix
A = magic(4); % Magic square matrix
disp('Original Matrix:');
disp(A);

% Compute the Fourier Transform along the columns
Y = fft(A, [], 2);

% Compute the Inverse Fourier Transform along the columns with zero padding
n = 8; % Length to pad
X = ifft(Y, n, 2);

% Display the original and padded matrices
disp('Original Matrix after IFFT along columns with zero padding:');
disp(X);

在這個例子中:

  • 我們從一個 4x4 的幻方矩陣 A 開始。
  • 然後我們使用 `fft(A, [], 2)` 計算 A 沿列的傅立葉變換,結果為 Y。
  • 接下來,我們使用 `ifft(Y, n, 2)` 計算沿列具有零填充到長度 n 的逆傅立葉變換。
  • 結果 X 是一個 4x8 的矩陣,其中每一行都是原始矩陣 A 中對應行的 n 點逆變換。

執行後的輸出如下:

>> % Create a 2D matrix
A = magic(4); % Magic square matrix
disp('Original Matrix:');
disp(A);

% Compute the Fourier Transform along the columns
Y = fft(A, [], 2);

% Compute the Inverse Fourier Transform along the columns with zero padding
n = 8; % Length to pad
X = ifft(Y, n, 2);

% Display the original and padded matrices
disp('Original Matrix after IFFT along columns with zero padding:');
disp(X);

Original Matrix:
   16    2    3   13
    5   11   10    8
    9    7    6   12
    4   14   15    1
Original Matrix after IFFT along columns with zero padding:
 Columns 1 through 4:

   8.0000 +      0i   4.2500 + 4.7426i   1.0000 +      0i   4.2500 - 0.1464i
   2.5000 +      0i   4.2500 - 1.9142i   5.5000 +      0i   4.2500 + 0.1464i
   4.5000 +      0i   4.2500 + 0.9142i   3.5000 +      0i   4.2500 + 0.1464i
   2.0000 +      0i   4.2500 - 3.7426i   7.0000 +      0i   4.2500 - 0.1464i

 Columns 5 through 8:

   1.5000 +      0i   4.2500 - 3.7426i   6.5000 +      0i   4.2500 - 0.8536i
   5.0000 +      0i   4.2500 + 0.9142i   4.0000 +      0i   4.2500 + 0.8536i
   3.0000 +      0i   4.2500 - 1.9142i   6.0000 +      0i   4.2500 + 0.8536i
   7.5000 +      0i   4.2500 + 4.7426i   0.5000 +      0i   4.2500 - 0.8536i

>> 

示例 4:計算具有指定對稱性的逆傅立葉變換

我們的程式碼如下:

% Create a complex signal
t = linspace(0, 1, 1000); % Time vector
f = 5; % Frequency of the signal
signal = exp(1i*2*pi*f*t); % Complex exponential signal

% Compute the Fourier Transform
Y = fft(signal);

% Compute the Inverse Fourier Transform with symmetric treatment
X = ifft(Y, 'symmetric');

% Plot the real part of the original and reconstructed signals
subplot(2,1,1);
plot(t, real(signal));
title('Original Signal (Real Part)');
xlabel('Time');
ylabel('Amplitude');

subplot(2,1,2);
plot(t, real(X)); % Display real part of X
title('Reconstructed Signal (Real Part)');
xlabel('Time');
ylabel('Amplitude');
  • 在這個例子中,我們使用帶有 'symmetric' 標誌的 `ifft` 函式來指定輸入訊號的對稱性。
  • 我們首先建立一個復指數訊號 signal 並計算其傅立葉變換。
  • 透過使用 `ifft(Y, 'symmetric')`,我們計算具有對稱處理的逆傅立葉變換,這假設輸入訊號是共軛對稱的。
  • 繪製原始訊號和重建訊號的實部以進行比較。

執行後我們得到的輸出如下:

使用 `ifft2()` 進行二維逆傅立葉變換

使用 `ifft2()` 進行二維逆傅立葉變換是一個 MATLAB 函式,它計算二維矩陣的逆傅立葉變換。它是二維傅立葉變換的逆運算,將影像的頻域表示轉換回空間域。

此函式在影像處理中特別有用,用於影像重建、濾波和恢復等任務。它接收表示頻域影像的二維矩陣,並返回相應的空間域影像。

語法

X = ifft2(Y)
X = ifft2(Y,m,n)
X = ifft2(___,symflag)

語法解釋

X = ifft2(Y) - 使用快速演算法計算矩陣 Y 的二維逆傅立葉變換。如果 Y 是多維陣列,`ifft2` 將計算高於 2 的每個維度的二維逆變換。輸出 X 與 Y 大小相同。

X = ifft2(Y,m,n) − 透過截斷或用零填充 Y 來將其大小調整為 m×n 矩陣,然後再計算逆變換。輸出 X 也是 m×n 的。如果 Y 是多維陣列,則 ifft2 會重塑 Y 的前兩個維度以匹配 m 和 n。

X = ifft2(___,symflag) − 除了任何之前的輸入引數組合之外,還可以指定 Y 的對稱性。例如,ifft2(Y,'symmetric') 將 Y 視為共軛對稱。

讓我們根據上面提到的語法,來看幾個例子。

示例 1:計算二維逆傅立葉變換

我們的程式碼如下:

% Compute the 2D Fourier Transform
Y = fft2(A);

% Compute the Inverse Fourier Transform
X = ifft2(Y);

% Display the original and reconstructed matrices
disp('Original Matrix:');
disp(A);

disp('Reconstructed Matrix:');
disp(X);
  • 此示例演示如何使用 ifft2() 計算矩陣 Y 的二維逆傅立葉變換。
  • 我們從一個簡單的 3×3 矩陣 A 開始。
  • 然後,我們使用 fft2() 計算 A 的二維傅立葉變換,結果為 Y。
  • 最後,我們使用 ifft2(Y) 計算逆傅立葉變換,理想情況下應該重建原始矩陣 A。
  • 顯示原始矩陣和重建矩陣以進行比較。

執行後,我們得到:

Original Matrix:
     1     2     3
     4     5     6
     7     8     9

Reconstructed Matrix:
     1     2     3
     4     5     6
     7     8     9

示例 2:調整二維逆傅立葉變換的大小

我們的程式碼如下:

% Create a simple 3x3 matrix
A = [1 2 3; 4 5 6; 7 8 9];

% Compute the 2D Fourier Transform
Y = fft2(A);

% Adjust the size and compute the Inverse Fourier Transform
m = 4; % Desired number of rows
n = 5; % Desired number of columns
X = ifft2(Y, m, n);

% Display the original and adjusted-size matrices
disp('Original Matrix:');
disp(A);

disp('Adjusted-size Matrix:');
disp(X);
  • 此示例說明如何使用 ifft2(Y,m,n) 在計算逆變換之前調整二維矩陣 Y 的大小。
  • 我們從一個簡單的 3×3 矩陣 A 開始。
  • 我們使用 fft2() 計算 A 的二維傅立葉變換,結果為 Y。
  • 然後,我們使用 ifft2(Y, m, n) 將 Y 的大小調整為 4×5 矩陣(透過用零填充),並計算逆傅立葉變換,結果為 X。
  • 顯示原始矩陣和調整大小後的矩陣以進行比較。

執行後,我們得到以下輸出:

Original Matrix:
   1   2   3
   4   5   6
   7   8   9
Adjusted-size Matrix:
 Columns 1 through 4:

   0.4500 +      0i   0.9653 - 0.2010i   0.8126 - 0.0635i   1.2124 - 0.2270i
   2.0853 - 0.2853i   2.6006 - 0.4863i   2.4479 - 0.3488i   2.8477 - 0.5123i
   1.8000 - 0.7794i   2.3153 - 0.9804i   2.1626 - 0.8429i   2.5624 - 1.0064i
   2.8647 + 1.0647i   3.3800 + 0.8637i   3.2273 + 1.0012i   3.6271 + 0.8377i

 Column 5:

   1.0597 + 0.4915i
   2.6950 + 0.2062i
   2.4097 - 0.2879i
   3.4744 + 1.5562i

示例 3:指定二維逆傅立葉變換的對稱性

我們的程式碼如下:

% Create a 2D matrix with complex values
A = [1+2i, 3-1i, 5+4i; -2+1i, 6-3i, 8+7i; 9-2i, 4+5i, -1-6i];

% Compute the 2D Fourier Transform
Y = fft2(A);

% Compute the Inverse Fourier Transform with symmetric treatment
X = ifft2(Y, 'symmetric');

% Display the original and reconstructed matrices
disp('Original Matrix:');
disp(A);

disp('Reconstructed Matrix:');
disp(X);
  • 此示例演示如何使用 ifft2(___,symflag) 在計算逆變換之前指定輸入矩陣 Y 的對稱性。
  • 我們從一個包含複數值的 3×3 矩陣 A 開始。
  • 我們使用 fft2() 計算 A 的二維傅立葉變換,結果為 Y。
  • 透過使用 ifft2(Y, 'symmetric'),我們計算 Y 的逆傅立葉變換,並進行對稱處理,假設 Y 是共軛對稱的。
  • 顯示原始矩陣和重建矩陣以進行比較。

執行後,我們得到的輸出是:

Original Matrix:
   1.0000 + 2.0000i   3.0000 - 1.0000i   5.0000 + 4.0000i
  -2.0000 + 1.0000i   6.0000 - 3.0000i   8.0000 + 7.0000i
   9.0000 - 2.0000i   4.0000 + 5.0000i  -1.0000 - 6.0000i

Reconstructed Matrix:
   -0.3472    5.6943    8.2717
   -9.3131    7.9245    8.7698
   15.3509    1.6906   -5.0415
廣告
© . All rights reserved.