頻譜差減法

頻譜差減法（spectral subtraction）是一種常見的語音增強與雜訊抑制方法，主要用於降低受加性雜訊污染之語音或音訊訊號中的背景雜訊。其基本概念是在頻域中估計雜訊頻譜，並從受雜訊污染的訊號頻譜中扣除該雜訊估計，以恢復乾淨訊號的幅度頻譜或功率頻譜。頻譜差減法因計算量低、結構簡單，常被用於語音通訊、語音辨識前處理、助聽器、即時音訊處理與數位訊號處理教學中。

頻譜差減法屬於頻譜幅度估計（spectral amplitude estimation）的一種基本方法。此類方法通常假設語音復原的主要目標是估計乾淨訊號的短時間幅度頻譜，而相位失真對聽覺的影響相對較小。因此，實作上常將估計出的乾淨幅度頻譜與原本受雜訊污染訊號的相位結合，再經由反離散傅立葉轉換回到時域。

## 基本模型

假設觀測到的離散時間訊號 $y(m)$ 是乾淨訊號 $x(m)$ 與加性雜訊 $n(m)$ 的和：

$$y(m)=x(m)+n(m)$$

其中 $m$ 為離散時間索引。通常假設訊號與雜訊由不同來源產生，因此可近似視為不相關。

為了在頻域中處理訊號，輸入訊號會先被切分為長度為 $N$ 的短時間訊框，並對每個訊框執行離散傅立葉轉換。頻域中的 noisy signal model 可表示為：

$$Y(k)=X(k)+N(k),\quad k=0,1,\ldots,N-1$$

其中 $Y(k)$、$X(k)$ 與 $N(k)$ 分別表示受雜訊污染訊號、乾淨訊號與雜訊在第 $k$ 個頻率 bin（frequency bin）的短時間頻譜。若取樣頻率為 $F_s$，則第 $k$ 個頻率 bin 對應的頻率為：

$$f_k=\frac{kF_s}{N}$$

由於頻譜通常為複數，可將其表示為幅度與相位的形式：

$$Y_k e^{j\theta_Y(k)}=X_k e^{j\theta_X(k)}+N_k e^{j\theta_N(k)}$$

其中 $Y_k=|Y(k)|$、$X_k=|X(k)|$、$N_k=|N(k)|$ 分別為頻譜幅度，$\theta_Y(k)$、$\theta_X(k)$ 與 $\theta_N(k)$ 則為對應的相位。

## 頻譜向量解釋

在複數頻域中，受雜訊污染訊號的頻譜向量是乾淨訊號頻譜向量與雜訊頻譜向量的向量和。其平方幅度可寫為：

$$Y_k^2=X_k^2+N_k^2+2X_kN_k\cos\theta_k$$

其中 $\theta_k$ 是乾淨訊號與雜訊頻譜向量之間的夾角。若假設兩者同相，則有：

$$Y_k\approx X_k+N_k$$

此時可得到幅度頻譜差減的形式。若假設兩者近似正交，則有：

$$Y_k^2\approx X_k^2+N_k^2$$

此時可得到功率頻譜差減的形式。因此，幅度頻譜差減與功率頻譜差減可視為對頻譜向量相位關係採用不同近似假設後得到的兩種方法。

## 頻譜差減的一般形式

頻譜差減法的一般形式可表示為：

$$\hat{X}_k^b=Y_k^b-\alpha(k)N_k^b$$

其中 $\hat{X}_k$ 是乾淨訊號幅度頻譜的估計值，$Y_k$ 是受雜訊污染訊號的幅度頻譜，$N_k$ 是雜訊幅度頻譜的估計值，$\alpha(k)$ 是相減係數，$b$ 決定頻譜差減所在的頻譜域。

當 $b=1$ 時，稱為幅度頻譜差減：

$$\hat{X}_k=Y_k-\alpha(k)N_k$$

當 $b=2$ 時，稱為功率頻譜差減：

$$\hat{X}_k^2=Y_k^2-\alpha(k)N_k^2$$

若 $\alpha(k)=1$，表示扣除估計出的平均雜訊；若 $\alpha(k)>1$，則稱為過度相減（over-subtraction）。過度相減常用於低訊雜比環境，以提高雜訊抑制程度，但過大的相減係數可能造成語音失真或音樂性雜訊（musical noise）。

## 演演算法步驟

典型的頻譜差減法可依照下列步驟實作：

- 輸入 noisy speech：取得受雜訊污染的語音或音訊訊號 $y(m)$。
- 分幀處理：將輸入訊號切成長度為 $N$ 的短時間訊框。由於語音是非平穩訊號，分幀可使每個短時間區段近似平穩。
- 加窗：對每個訊框乘上窗函數 $w(m)$，例如 Hann window 或 Hamming window，以降低訊框邊界不連續造成的頻譜洩漏。
- $$y_w(m)=w(m)y(m)$$
- 轉換到頻域：對加窗後的訊框執行 DFT 或 FFT，得到短時間頻譜 $Y(k)$。
- 估計雜訊頻譜：使用非語音區段、語音活動偵測器，或 minimum statistics 等方法估計雜訊頻譜 $N_k$ 或 $\hat{N}(\omega)$。
- 執行頻譜差減：根據幅度頻譜或功率頻譜形式，從 noisy spectrum 中扣除雜訊估計。例如：
- $\hat{X}_k=Y_k-\alpha(k)N_k$ 或 $\hat{X}_k^2=Y_k^2-\alpha(k)N_k^2$
- 負值修正與頻譜下限：若差減後出現負的幅度或功率估計，需將其映射為非負值。常見方法是設定 spectral floor。
- $$g(\omega)=\max\left(\lambda,1-\alpha\frac{|\hat{N}(\omega)|}{|X(\omega)|}\right)$$
- 其中 $\lambda$ 是頻譜下限。
- 結合 noisy phase：將估計出的乾淨幅度頻譜與 noisy speech 的相位結合。
- $$\hat{X}(k)=\hat{X}_k e^{j\theta_Y(k)}$$
- 反轉換回時域：對 $\hat{X}(k)$ 執行 IDFT 或 IFFT，得到復原後的時域訊框。
- 重疊相加：將連續處理後的訊框以 overlap-add 方法合成，得到最終增強後的語音訊號。

## 雜訊頻譜估計

頻譜差減法的效果高度依賴雜訊頻譜估計的準確性。若系統可以偵測出只有雜訊而沒有語音的區段，則可利用這些區段估計平均雜訊頻譜：

$$N_k^b=\frac{1}{M}\sum_{i=0}^{M-1}N_{k,i}^b$$

其中 $M$ 是雜訊訊框數量，$N_{k,i}$ 是第 $i$ 個雜訊訊框在第 $k$ 個頻率 bin 的頻譜幅度。

另一種方法是使用一階遞迴低通濾波器更新雜訊估計：

$$\bar{N}*{k,i}^b=a\bar{N}*{k,i-1}^b+(1-a)N_{k,i}^b$$

其中 $a$ 是平滑係數，通常接近 1。較大的 $a$ 可降低雜訊估計的變動，但會降低對非平穩雜訊的追蹤能力。

除了利用非語音區段估計雜訊頻譜外，也可使用 minimum statistics 方法。此方法會在一段時間內追蹤每個頻率 bin 的最小頻譜幅度，並利用語音自然停頓時能量較低的特性估計背景雜訊。由於 minimum statistics 通常會低估平均雜訊能量，因此實作時常需搭配補償係數。

## 頻譜下限

頻譜差減後可能產生負的幅度或功率估計，但幅度與功率應為非負值。因此實作上需加入後處理。最簡單的方法是將負值截斷為零，但這可能造成不自然的窄頻殘留雜訊。另一種方法是設定頻譜下限（spectral floor），避免頻率 bin 被完全消除。

若用頻域增益函數表示頻譜差減，則處理後頻譜可寫為：

$$Y(\omega)=X(\omega)g(\omega)$$

加入頻譜下限後，增益函數可寫為：

$$g(\omega)=\max\left(\lambda,1-\alpha\frac{|\hat{N}(\omega)|}{|X(\omega)|}\right)$$

其中 $\lambda$ 是頻譜下限，$\alpha$ 是雜訊相減係數。頻譜下限可以保留少量寬頻殘留成分，以遮蔽部分不自然的窄頻尖峰，進而減少音樂性雜訊。

## 音樂性雜訊

音樂性雜訊（musical noise）是頻譜差減法常見的處理失真。由於雜訊頻譜具有隨機變動，頻譜差減後可能留下短暫且孤立的窄頻峰值。這些峰值在聽覺上可能呈現類似金屬聲或音調的人工雜訊，因此稱為音樂性雜訊。

音樂性雜訊通常與以下因素有關：

- 雜訊估計不準確。
- 相減係數過大。
- 頻譜估計出現負值後被非線性修正。
- 短時間頻譜中殘留孤立尖峰。
- 低訊雜比環境中語音與雜訊難以分離。

降低音樂性雜訊的常見方法包括設定頻譜下限、對頻譜幅度進行時間平滑、使用殘留雜訊後處理，以及根據局部訊雜比調整相減係數。

## 與維納濾波的關係

以功率頻譜差減為例，可將頻譜差減表示為一個作用於 noisy spectrum 的濾波器：

$$\hat{X}_k^2=Y_k^2-N_k^2=H_kY_k^2$$

其中頻譜差減濾波器的頻率響應為：

$$H_k=1-\frac{N_k^2}{Y_k^2}=\frac{Y_k^2-N_k^2}{Y_k^2}$$

此濾波器可視為與訊雜比相關的衰減器。當某個頻率 bin 的雜訊比例較高時，$H_k$ 變小，該頻率成分會被較強地抑制；當訊雜比較高時，$H_k$ 接近 1，該頻率成分會被保留。

維納濾波器的頻率響應可寫為：

$$W_k=\frac{E[Y_k^2]-E[N_k^2]}{E[Y_k^2]}$$

頻譜差減濾波器與維納濾波器形式相似，但兩者使用的資訊不同。維納濾波器使用訊號與雜訊的期望功率頻譜，而頻譜差減通常使用單次觀測的 noisy spectrum 與時間平均的雜訊頻譜。因此，頻譜差減可視為在缺乏完整訊號統計資訊時，對維納濾波的一種簡化替代方法。

## 即時實作考量

在即時語音增強系統中，輸入訊號無法等整段語音結束後才處理，因此必須採用 frame-based processing。常見設計會將語音切成固定長度訊框，例如 256 samples，並使用 FFT 將每個訊框轉換到頻域。若訊框長度為 2 的次方，可使用 radix-2 FFT，將計算複雜度由直接 DFT 的 $O(N^2)$ 降低為 $O(N\log N)$。

為了避免加窗後無法直接恢復原始時域訊號，連續訊框通常會互相重疊，再透過 overlap-add 方法重建輸出訊號。若輸入訊號為實數，其頻域頻譜具有共軛對稱性，因此實作時可只處理約一半的頻率 bin，以降低計算量。

## 優點與限制

### 優點

- 原理簡單，容易理解與實作。
- 計算成本低，適合即時處理。
- 可直接結合 FFT、窗函數與 overlap-add 架構。
- 不需要大量訓練資料。
- 適合做為語音增強方法的基準。

### 限制

- 效果高度依賴雜訊頻譜估計。
- 在低訊雜比環境下容易造成語音失真。
- 可能產生音樂性雜訊。
- 對快速變化的非平穩雜訊較不穩健。
- 通常保留 noisy phase，無法完全恢復乾淨語音。
- 相較於維納濾波或統計式語音增強方法，使用的先驗資訊較少。

## 應用

頻譜差減法可應用於：

- 語音通訊中的背景雜訊抑制。
- 語音辨識前處理。
- 助聽器與輔助聽覺裝置。
- 行動電話與耳機的語音增強。
- 錄音後製與音訊修復。
- 即時數位訊號處理系統。
- 數位訊號處理課程中的頻域濾波實作。