频谱差减法

频谱差减法（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，无法完全恢复干净语音。
- 相较于维纳滤波或统计式语音增强方法，使用的先验资讯较少。

## 应用

频谱差减法可应用于：

- 语音通讯中的背景噪声抑制。
- 语音辨识前处理。
- 助听器与辅助听觉装置。
- 移动电话与耳机的语音增强。
- 录音后制与音讯修复。
- 即时数字信号处理系统。
- 数字信号处理课程中的频域滤波实作。