- Matlab 教程
- MATLAB - 首頁
- MATLAB - 概述
- MATLAB - 特性
- MATLAB - 環境設定
- MATLAB - 編輯器
- MATLAB - 線上版
- MATLAB - 工作區
- MATLAB - 語法
- MATLAB - 變數
- MATLAB - 命令
- MATLAB - 資料型別
- MATLAB - 運算子
- MATLAB - 日期和時間
- MATLAB - 數字
- MATLAB - 隨機數
- MATLAB - 字串和字元
- MATLAB - 文字格式化
- MATLAB - 時間表
- MATLAB - M 檔案
- MATLAB - 冒號表示法
- MATLAB - 資料匯入
- MATLAB - 資料匯出
- MATLAB - 資料歸一化
- MATLAB - 預定義變數
- MATLAB - 決策
- MATLAB - 決策語句
- MATLAB - if-end 語句
- MATLAB - if-else 語句
- MATLAB - if-elseif-else 語句
- MATLAB - 巢狀 if 語句
- MATLAB - switch 語句
- MATLAB - 巢狀 switch
- MATLAB - 迴圈
- MATLAB - 迴圈
- MATLAB - for 迴圈
- MATLAB - while 迴圈
- MATLAB - 巢狀迴圈
- MATLAB - break 語句
- MATLAB - continue 語句
- MATLAB - end 語句
- MATLAB - 陣列
- MATLAB - 陣列
- MATLAB - 向量
- MATLAB - 轉置運算子
- MATLAB - 陣列索引
- MATLAB - 多維陣列
- MATLAB - 相容陣列
- MATLAB - 分類陣列
- MATLAB - 元胞陣列
- MATLAB - 矩陣
- MATLAB - 稀疏矩陣
- MATLAB - 表格
- MATLAB - 結構體
- MATLAB - 陣列乘法
- MATLAB - 陣列除法
- MATLAB - 陣列函式
- MATLAB - 函式
- MATLAB - 函式
- MATLAB - 函式引數
- MATLAB - 匿名函式
- MATLAB - 巢狀函式
- MATLAB - return 語句
- MATLAB - 無返回值函式
- MATLAB - 區域性函式
- MATLAB - 全域性變數
- MATLAB - 函式控制代碼
- MATLAB - 濾波器函式
- MATLAB - 階乘
- MATLAB - 私有函式
- MATLAB - 子函式
- MATLAB - 遞迴函式
- MATLAB - 函式優先順序
- MATLAB - map 函式
- MATLAB - mean 函式
- MATLAB - end 函式
- MATLAB - 錯誤處理
- MATLAB - 錯誤處理
- MATLAB - try...catch 語句
- MATLAB - 除錯
- MATLAB - 繪圖
- MATLAB - 繪圖
- MATLAB - 繪製陣列
- MATLAB - 繪製向量
- MATLAB - 條形圖
- MATLAB - 直方圖
- MATLAB - 圖形
- MATLAB - 二維線圖
- MATLAB - 三維圖
- MATLAB - 圖表格式化
- MATLAB - 對數座標圖
- MATLAB - 繪製誤差條
- MATLAB - 繪製三維等高線圖
- MATLAB - 極座標圖
- MATLAB - 散點圖
- MATLAB - 繪製表示式或函式
- MATLAB - 繪製矩形
- MATLAB - 繪製頻譜圖
- MATLAB - 繪製網格曲面
- MATLAB - 繪製正弦波
- MATLAB - 插值
- MATLAB - 插值
- MATLAB - 線性插值
- MATLAB - 二維陣列插值
- MATLAB - 三維陣列插值
- MATLAB - 多項式
- MATLAB - 多項式
- MATLAB - 多項式加法
- MATLAB - 多項式乘法
- MATLAB - 多項式除法
- MATLAB - 多項式的導數
- MATLAB - 變換
- MATLAB - 變換函式
- MATLAB - 拉普拉斯變換
- MATLAB - 拉普拉斯濾波器
- MATLAB - 高斯-拉普拉斯濾波器
- MATLAB - 逆傅立葉變換
- MATLAB - 傅立葉變換
- MATLAB - 快速傅立葉變換
- MATLAB - 二維逆餘弦變換
- MATLAB - 向座標軸新增圖例
- MATLAB - 面向物件
- MATLAB - 面向物件程式設計
- MATLAB - 類和物件
- MATLAB - 函式過載
- MATLAB - 運算子過載
- MATLAB - 使用者自定義類
- MATLAB - 複製物件
- MATLAB - 代數
- MATLAB - 線性代數
- MATLAB - 高斯消元法
- MATLAB - 高斯-約當消元法
- MATLAB - 簡化行階梯形
- MATLAB - 特徵值和特徵向量
- MATLAB - 積分
- MATLAB - 積分
- MATLAB - 二重積分
- MATLAB - 梯形法則
- MATLAB - 辛普森法則
- MATLAB - 其他
- MATLAB - 微積分
- MATLAB - 微分
- MATLAB - 矩陣的逆
- MATLAB - GNU Octave
- MATLAB - Simulink
- MATLAB - 有用資源
- MATLAB - 快速指南
- MATLAB - 有用資源
- MATLAB - 討論
MATLAB - 快速傅立葉變換
快速傅立葉變換 (FFT) 是一種廣泛應用於訊號處理和其他領域的數學演算法,用於高效計算離散傅立葉變換 (DFT) 及其逆變換。DFT 將訊號從其原始域(通常是時間或空間)轉換為頻域表示。
快速傅立葉變換相對於標準 DFT 的主要優勢在於其速度。標準 DFT 演算法的計算複雜度為 O(N^2),其中 N 是訊號中的樣本數,而 FFT 將其降低到 O(N log N),對於大型資料集而言速度快得多。
使用 Matlab 中的 fft() 函式進行快速傅立葉變換
MATLAB 中的 fft() 函式用於計算訊號的快速傅立葉變換 (FFT)。它以表示時域訊號的向量作為輸入,並返回表示頻域訊號的向量。
語法
Y = fft(X) Y = fft(X,n) Y = fft(X,n,dim)
語法解釋
Y = fft(X) − MATLAB 中的函式計算訊號的傅立葉變換。如果提供向量,則計算該向量的變換。如果提供矩陣,則計算矩陣每一列的變換。對於多維陣列,它將沿第一個非單一維度上的值視為向量,並計算每個向量的變換。
Y = fft(X,n) − MATLAB 中的 fft() 函式可以計算特定長度的傅立葉變換,稱為 n 點 DFT。
如果提供的向量 X 短於 n,則會在 X 的末尾新增零,使其長度為 n。如果 X 長於 n,則會截斷多餘的值。
如果 X 是矩陣,則它將每一列視為向量進行處理。
對於多維陣列,它將第一個非單一維度視為向量。
Y = fft(X,n,dim) − MATLAB 中的 fft() 函式可以沿矩陣或多維陣列的特定維度計算傅立葉變換。例如,如果您有一個矩陣 X 並使用 fft(X,n,2),它將計算矩陣每一行的 n 點傅立葉變換。
讓我們來看一些上面解釋的語法的示例。
示例 1:視覺化簡單輸入訊號的傅立葉變換
我們的程式碼如下所示:
x = [0, 1, 0, -1];
Y = fft(x);
% Plotting
figure;
subplot(2,1,1);
stem(x);
title('Input Signal');
xlabel('Time');
ylabel('Amplitude');
subplot(2,1,2);
stem(abs(Y));
title('Magnitude of Fourier Transform');
xlabel('Frequency');
ylabel('Magnitude');
在這個示例中,我們有一個簡單的輸入訊號 x,由向量 [0, 1, 0, -1] 表示。
fft(x) 函式使用快速傅立葉變換 (FFT) 演算法計算輸入訊號 x 的離散傅立葉變換 (DFT)。結果儲存在變數 Y 中。
計算傅立葉變換後,我們建立一個圖形來繪製輸入訊號及其傅立葉變換以進行視覺化。
在第一個子圖 (subplot(2,1,1)) 中,我們使用 stem() 函式繪製時域中的輸入訊號 x。x 軸表示時間,y 軸表示訊號的幅度。
在第二個子圖 (subplot(2,1,2)) 中,我們使用 abs() 函式計算傅立葉變換 Y 的幅度,因為傅立葉變換可能具有複數值。然後我們使用 stem() 繪製傅立葉變換的幅度。這裡,x 軸表示頻率,y 軸表示傅立葉係數的幅度。
執行後的輸出如下所示:
示例 2:使用矩陣進行快速傅立葉變換
我們的程式碼如下:
X = [1, 2, 3; 4, 5, 6; 7, 8, 9];
Y = fft(X);
% Plotting
figure;
subplot(2,1,1);
stem(X(:));
title('Input Matrix (Vectorized)');
xlabel('Index');
ylabel('Value');
subplot(2,1,2);
stem(abs(Y(:)));
title('Magnitude of Fourier Transform (Vectorized)');
xlabel('Frequency Index');
ylabel('Magnitude');
在這個示例中,第一個子圖顯示輸入矩陣 X(向量化),其中矩陣元素沿 x 軸,其值在 y 軸上。第二個子圖顯示矩陣(向量化)的傅立葉變換 Y 的幅度,其中頻率索引在 x 軸上,傅立葉係數的幅度在 y 軸上。
執行後的輸出如下所示:
示例 3:使用語法 Y = fft(x,n) 進行快速傅立葉變換
我們的程式碼如下所示:
x = [0, 1, 0, -1];
n = 8; % Desired length of the Fourier transform
Y = fft(x, n);
% Plotting
figure;
subplot(2,1,1);
stem(x);
title('Input Signal');
xlabel('Time');
ylabel('Amplitude');
subplot(2,1,2);
stem(abs(Y));
title('Magnitude of Fourier Transform (n-point DFT)');
xlabel('Frequency');
ylabel('Magnitude');
在這個示例中,我們有一個向量 x 代表我們的輸入訊號。我們想使用語法 Y = fft(x, n) 計算 x 的 8 點離散傅立葉變換 (DFT)。
由於 x 的長度為 4,短於 n (8),MATLAB 會在 x 的末尾新增零,使其長度為 8,然後再計算傅立葉變換。
計算傅立葉變換後,我們建立一個圖形來繪製輸入訊號及其傅立葉變換以進行視覺化。
在第一個子圖 (subplot(2,1,1)) 中,我們使用 stem() 函式繪製時域中的輸入訊號 x。x 軸表示時間,y 軸表示訊號的幅度。
在第二個子圖 (subplot(2,1,2)) 中,我們使用 abs() 函式計算傅立葉變換 Y 的幅度,因為傅立葉變換可能具有複數值。然後我們使用 stem() 繪製傅立葉變換的幅度。這裡,x 軸表示頻率,y 軸表示傅立葉係數的幅度。
執行後的輸出如下所示:
示例 4:矩陣每一行的傅立葉變換
我們的程式碼如下所示:
X = [1, 2, 3; 4, 5, 6];
% Compute the 4-point Fourier transform of each row
n = 4; % Desired length of the Fourier transform
Y = fft(X, n, 2);
% Display the result
disp('Matrix X:');
disp(X);
disp('Fourier Transform of Each Row (n-point DFT):');
disp(Y);
在這個程式碼中,我們首先定義一個有兩行的矩陣 X,其中每一行代表不同的訊號。然後我們使用 fft(X, n, 2) 計算 X 每一行的 4 點傅立葉變換,其中 n 是傅立葉變換的所需長度。最後,我們顯示原始矩陣 X 和每一行的傅立葉變換。
程式碼執行後的輸出如下所示:
X = [1, 2, 3; 4, 5, 6];
% Compute the 4-point Fourier transform of each row
n = 4; % Desired length of the Fourier transform
Y = fft(X, n, 2);
% Display the result
disp('Matrix X:');
disp(X);
disp('Fourier Transform of Each Row (n-point DFT):');
disp(Y);
Matrix X:
1 2 3
4 5 6
Fourier Transform of Each Row (n-point DFT):
6.0000 + 0.0000i -2.0000 - 2.0000i 2.0000 + 0.0000i -2.0000 + 2.0000i
15.0000 + 0.0000i -2.0000 - 5.0000i 5.0000 + 0.0000i -2.0000 + 5.0000i