# 傅立葉轉換 (FFT) 白話文與頻譜分析實戰

# 傅立葉轉換 (FFT) 白話文與頻譜分析實戰

## 1. 白話解析：果汁機理論 🍓🍌
想像你面前有一杯打好的「綜合果汁」（這就是**時域訊號**，所有東西都混在一起了）。
你喝了一口，覺得很好喝，但你不知道裡面到底加了什麼。

**傅立葉轉換 (FFT)** 就像是一台「逆向果汁機」。你把果汁倒進去，它會瞬間幫你分離出：
* 3 顆草莓 🍓
* 1 根香蕉 🍌
* 0.5 顆蘋果 🍎

這份「食譜」就是**頻譜圖 (Spectrum)**！
在頻譜圖上，**X 軸是水果種類 (頻率 Hz)**，**Y 軸是水果的數量 (振幅 Amplitude)**。透過 FFT，不管雜訊藏得再深，都會在頻譜圖上變成一根特別突出的長條，讓你一眼就看穿它！

---

## 2. MATLAB 頻譜分析標準 S.O.P. (超級重要 ⚠️)

在 MATLAB 中使用 `fft()` 函數非常簡單，**但初學者 100% 會卡在「如何把 FFT 的結果轉成人類看得懂的頻譜圖」**。

因為 `fft()` 算出來的結果是包含虛數的「雙邊對稱頻譜」，我們必須經過**取絕對值、正規化、切一半**這三個神聖步驟，才能畫出正確的圖。請直接把下面這段當成你的萬用模板！

```matlab
% 1. 建立測試訊號 (我們延續前面濾波器的例子)
fs = 1000;             % 取樣頻率 1000 Hz (一秒鐘抓 1000 個點)
t = 0 : 1/fs : 1-1/fs; % 建立 1 秒的時間軸
L = length(t);         % 訊號總長度 (總共有幾個點)

% 混合訊號：振幅為 2 的 5Hz 正弦波 + 振幅為 0.5 的 100Hz 雜訊
sig_raw = 2 * sin(2 * pi * 5 * t) + 0.5 * sin(2 * pi * 100 * t);

% --- 開始進入 FFT 照妖鏡流程 ---

% 2. 執行快速傅立葉轉換
Y = fft(sig_raw);

% 3. 正規化與單邊頻譜轉換 (魔法步驟 🪄)
% (A) 取絕對值，並除以總長度 L 來還原真實振幅
P2 = abs(Y / L);       

% (B) 因為頻譜是左右對稱的，我們只需要看正頻率 (前半段)
P1 = P2(1 : L/2+1);    

% (C) 把被切掉的後半段能量補回前半段 (除了直流成分也就是第 1 個點以外，其餘乘 2)
P1(2:end-1) = 2 * P1(2:end-1); 

% 4. 建立對應的頻率 X 軸 (從 0 Hz 到 奈奎斯特頻率 fs/2)
f = fs * (0:(L/2)) / L;

% 5. 畫出頻譜圖
figure;

% 上半部：人類看不懂的時域圖
subplot(2,1,1);
plot(t, sig_raw);
title('時域圖 (Time Domain) - 完全看不出裡面有什麼');
xlabel('時間 (秒)');
ylabel('振幅');
grid on;

% 下半部：一目瞭然的頻域圖
subplot(2,1,2);
plot(f, P1, 'LineWidth', 2, 'Color', 'r');
title('頻域圖 (Frequency Domain) - 照妖鏡現形！');
xlabel('頻率 (Hz)');
ylabel('振幅 (Amplitude)');
xlim([0 150]); % 為了看清楚，我們只顯示 0 到 150 Hz 的區間
grid on;
```

---

## 3. 圖表解讀與實戰意義

當你執行上面這段程式碼後，看著下半部的紅線圖，你會發現兩件非常神奇的事情：
1. **精準定位：** 在 X 軸的 **5 Hz** 和 **100 Hz** 的地方，直直地插著兩根像電線桿一樣的線。這就代表 FFT 成功抓出了這兩個隱藏的頻率！
2. **還原振幅：** 你去看這兩根電線桿的高度 (Y 軸)，5 Hz 的高度剛好是 **2**，100 Hz 的高度剛好是 **0.5**。這完美對應了我們當初建立訊號時設定的倍數！

**工程應用：** 實務上，如果你測量一台馬達的震動，然後把訊號丟進這個 FFT 模板。如果你發現在 60 Hz 的地方有一根超高的長條，你立刻就能跟老闆報告：「老闆，我們的系統被台灣的市電 (60Hz) 干擾了！」；然後你就可以回去翻前面的筆記，用一個 **60Hz 的帶阻濾波器 (Band-stop Filter)** 把它精準幹掉！