基于频谱减法的音频降噪:工作原理

光谱减法 是数字音频降噪和语音增强中常用的经典技术之一。.

基本思路很简单:估计噪声谱,然后将其从带噪声信号的频谱中减去。.

尽管现代音频系统越来越多地采用自适应滤波、麦克风阵列和基于人工智能的语音增强技术,但频谱减法依然很重要,因为它相对简单、计算效率高且易于理解。.

它还为理解更高级的降噪系统奠定了坚实的基础。.

在本文中,我们将解释频谱减法的工作原理、如何利用FFT和STFT实现该方法,以及为什么它会产生 音乐噪音, ,以及工程师如何在实际音频系统中提升其性能。.

什么是光谱减法?

频谱减法是一种频域音频降噪技术。.

其基本假设是,麦克风拾取的是所需声音与不需要的噪声的混合信号:

y(t) = x(t) + n(t)

其中:

  • y(t) = 观测到的噪声信号
  • x(t) = 目标信号
  • n(t) = 噪声

目标是估计 x(t)y(t).

与直接从波形中去除噪声不同,频谱减法将音频转换到频域。.

一般的处理流程如下:

音频有杂音

构图

分窗

FFT / STFT

噪声谱估计

光谱减法

频谱增益/下限

逆FFT

重叠加法

增强音频

当背景噪声的频谱特性相对稳定时,这种方法特别有用。.

为什么要使用频域?

许多音频信号在不同的频率下包含不同类型的信息。.

例如

  • 低频能量可能来自暖通空调系统或发动机;;
  • 窄带峰可能源自电气或机械源;;
  • 言语中包含不断变化的谐波和共振峰结构;;
  • 高频成分可能包含辅音信息和环境噪声。.

在时域波形中,这些分量并不容易分离。.

频域为分析和调整各个频率区域提供了更有效的表示方式。.

这就是为什么 FFT 和 STFT 是许多传统音频降噪算法的基础。.

对于语音等非平稳信号,STFT 特别有用,因为它使系统能够分析频谱 逐帧.

光谱减法是如何工作的?

一个实用的光谱减法系统通常包括以下几个步骤。.

步骤 1:采集带有噪音的音频

麦克风捕捉到:

目标信号 + 背景噪声

例如

音箱 + 空调 + 电脑风扇

麦克风输出的信号带有噪声:

y(t)

步骤 2:将信号划分为帧

连续的音频流被划分为多个短的、相互重叠的帧。.

例如,一个语音处理系统可能会采用大约20–32毫秒范围内的帧时长。.

每个帧都会单独进行处理。.

这一点很重要,因为语音和噪声的统计特征会随时间变化。.

步骤 3:应用窗口函数

每个帧都应用了一个类似于汉恩窗口的窗口。.

其目的是减少因分析信号的有限段而引起的频谱泄漏。.

带窗口的框架可以表示为:

yₘ[n] = y[n + mH]w[n]

其中:

  • m = 帧索引
  • H = 啤酒花用量
  • w[n] = 窗口函数

第 4 步:计算 FFT

FFT 将时域帧转换为频域表示。.

对于每个频率区间:

Yₘ[k] = FFT{yₘ[n]}

然后,系统可以计算其幅值或功率谱。.

例如

|Yₘ[k]|

或者:

|Yₘ[k]|²

第 5 步:估算噪声谱

这是光谱减法中最关键的部分之一。.

该算法需要一个背景噪声频谱的估计值。.

如果噪声相对稳定,系统可以在没有语音的时段对其进行估计。.

例如

麦克风信号

语音活动检测

识别非语音帧

估计噪声谱

一种简单的方法是计算几个仅含噪声帧的功率谱的平均值。.

估计的噪声功率可表示为:

P̂n[k]

该估计值的质量对最终的降噪性能有着显著影响。.

如果噪声估计值过低,则会残留噪声。.

如果数值过高,可能会导致目标语音中的部分内容被删除。.

第 6 步:减去估计的噪声

一个简化的功率谱频谱减法方程为:

P̂x[k] = max(Py[k] − αP̂n[k], βPmin)

其中:

  • P̂x[k] = 估计的纯信号功率
  • Py[k] = 噪声信号功率
  • P̂n[k] = 估计噪声功率
  • α = 噪声过度减去因子
  • β = 谱底系数
  • Pmin = 参考能级或底能级项

具体实现方式因具体实现而异。.

关键概念是:

估算噪声的贡献,并降低噪声占主导地位的频率分量。.

什么是“减法超额”?

当噪声估计不准确时,仅对噪声估计值进行一次减法可能无法提供足够的抑制效果。.

因此,工程师可以引入一个 超减因子.

如果:

α = 1

该算法执行的是近似直接减法。.

如果:

α > 1

该算法能去除更多的估计噪声。.

这可以增强噪声抑制效果,但过度的低频减法也会损害语音质量。.

例如,如果语音和噪声在某个特定频率上严重重叠,该算法就无法完美地区分它们。.

因此,如果将α值调得过高,可能会去除有用的语音能量。.

这是频谱减法中的一项基本权衡:

更强的噪声抑制可能会导致更大的语音失真。.

什么是光谱下限?

减法运算后,某些频率区间可能会变为零,甚至在数学上呈现负值。.

负幂在物理上没有意义,因此该算法需要一个下界。.

频谱下限可防止增益变得过小。.

从概念上讲:

估计频谱 < 最小阈值

替换为允许的最低水平

这有助于防止过度衰减,并减少令人不悦的处理伪影。.

确切的底限值是一个重要的调优参数。.

幅度谱减法与功率谱减法的比较

谱减法有几种表达形式。.

一个系统可能基于以下内容运行:

  • 振幅谱
  • 功率谱
  • 振幅谱
  • 复杂谱

例如,基于模数的表达式可写为:

|X̂[k]| = max(|Y[k]| − α|N̂[k]|, Gmin)

而功率谱方法则使用幅度平方。.

实现时应明确定义要估计和减去的谱量是哪一个。.

这一区别很重要,因为参数的解释以及由此产生的增益特性可能会有所不同。.

为什么频谱减法会产生音乐噪声?

谱减法最著名的局限性之一是 音乐噪音.

音乐噪声由人工产生的、听起来像音高的残余成分构成,这些成分可能在进行激进的频谱处理后出现。.

它听起来可能像这样:

  • 小哨子
  • 随机音调
  • 金属文物
  • 快速变化的音色成分

为什么会这样?

设想一个包含许多频率bin的噪声频谱。.

对于某一帧,算法可能会判断某个特定频段主要由噪声主导,并对其进行强力抑制。.

在下一帧中,由于噪声估计值和信号会略有波动,因此该频段可能不会被那么强烈地抑制。.

由此产生的图案会随时间变化。.

经过逆变换后,这些被分离出的时频分量可能会成为可被感知到的音调伪影。.

这就是为什么仅仅提高降噪系数并不一定能获得更好的音质的原因之一。.

如何减少音乐中的噪音?

可以采用几种技术来降低音乐中的噪声。.

1. 谱平滑

与其单独处理每个频率bin,不如对相邻的频率bin进行平滑处理。.

这可以减少增益谱中的快速波动。.

2. 时间平滑

应用于每个频率分区的增益也可以在连续帧之间进行平滑处理。.

这可以减少光谱衰减的突变。.

3. Gain Flooring

保持最低增益可以防止个别频率分量被完全消除。.

这可以减少不自然的光谱缺口。.

4. 更稳定的噪声估计

更好的噪声估算器可以减少估计噪声谱中的波动。.

这可以显著提高光谱减法的稳定性。.

5. 语音活动检测

一个可靠的VAD有助于识别无语音区域,以便进行噪声估计。.

不恰当的VAD决策可能会使噪声模型中混入语音,导致算法抑制部分有用信号。.

6. 后处理

光谱减法可以与其他滤波阶段结合使用。.

例如

STFT → 谱减法 → 后处理滤波 → ISTFT

这使得系统能够在初始降噪阶段之后对结果进行优化。.

针对平稳与非平稳噪声的谱差分法

当背景噪声相对稳定时,光谱减法通常能最自然地发挥作用。.

更合适的例子

  • 风扇噪音
  • 空调噪音
  • 一些机械背景噪音
  • 相对稳定的宽带噪声

更具挑战性的例子

  • 键盘点击声
  • 间歇性冲击
  • 交通状况的变化
  • 竞选演讲
  • 突如其来的环境声

原因很简单:

如果噪声谱的变化速度超过了算法进行估计的能力,噪声模型就会变得不准确。.

这就是现代系统往往将谱方法与自适应方法或基于人工智能的方法相结合的原因之一。.

谱减法与非平稳噪声

这并不意味着在噪声变化的情况下就无法使用谱减法。.

该算法可以持续更新其噪声估计值。.

可能的方法包括:

  • 最小统计量估计
  • 递归噪声估计
  • 基于VAD的估计
  • 自适应平滑
  • 噪声跟踪

目标是制作:

N̂(k, t)

跟踪不断变化的噪声频谱,同时避免意外地跟踪目标语音。.

这导致了一个根本性的工程权衡:

快速适应

vs.

言语保存

如果噪声估计器的自适应速度过慢,则变化的噪声仍会存在。.

如果它适应得太快,可能会将语音误判为噪音。.

实时音频系统中的频谱减法

一个实用的实时实现可以表示为:

麦克风
    ↓
音频输入
    ↓
帧缓冲器
    ↓
窗函数处理
    ↓
FFT
    ↓
噪声估计
    ↓
频谱减法
    ↓
增益平滑
    ↓
IFFT
    ↓
重叠加法
    ↓
增强音频

对于每个传入的帧,该过程都会不断重复。.

因此,在实施过程中必须考虑以下方面:

  • 帧尺寸
  • FFT大小
  • 跳跃幅度
  • 窗口函数
  • 噪声估计方法
  • 平滑处理
  • 光谱下限
  • 处理延迟
  • CPU/DSP 负载

这就是为什么一个在离线实验中表现良好的算法,在部署到嵌入式产品时可能会遇到问题。.

示例:办公室环境中的语音频谱减法

设想一款在办公室中使用的会议麦克风。.

目标说话者正在说话,此时:

  • 空调正在运行;;
  • 计算机正在运行;;
  • 人们正在四处走动;;
  • 偶尔会听到键盘发出的声音。.

该系统可能执行以下操作:

麦克风

STFT

噪声估计

光谱减法

增益平滑

ISTFT

在无语音期间,系统会估计背景频谱。.

在语音处理过程中,它会将观测到的频谱与估计的噪声频谱进行比较,并衰减噪声占主导地位的频率区域。.

这样可以获得更干净的信号,适用于:

  • 语音通信
  • 语音识别
  • 转录
  • 会议
  • 音频录音

然而,如果另一个人开始说话,系统可能难以判断该语音是目标语音还是干扰。.

在这种情况下,多麦克风处理或基于人工智能的语音增强技术可以提供额外的信息。.

Spectral Subtraction vs 维纳滤波

这两种方法都在频域中进行,均可采用噪声谱估计,但其基本方法有所不同。.

特点光谱减法维纳滤波
基本原理估计并扣除噪声估计最佳频率依赖增益
实施情况相对简单更多统计建模
计算需求通常较低低至中等
噪声估计重要重要
语音失真通过激进的减法可以增加取决于信号与噪声的估计值
音乐噪音已知的限制一般而言,不同文物的特征各不相同
嵌入式实现实用实用
主要优势简约平滑统计估计

这两种方法都没有哪一种是放之四海皆准的最佳方案。.

正确的选择取决于:

  • 噪声特性
  • 处理器资源
  • 延迟要求
  • 语音质量要求
  • 可用的参考信息

谱减法与AI降噪的对比

基于人工智能的现代降噪技术能够从训练数据中学习语音与噪声之间的复杂关系。.

两者的区别可归纳如下:

因子光谱减法AI降噪
需要训练数据没有通常是的
噪声模型显式/统计从数据中获得的启示
计算复杂度中至高
适应性取决于噪声估计器这取决于模型和训练数据
可解释性较低
嵌入式部署相对简单需要进行模型优化
在复杂噪声条件下的性能有限可能更强
开发工作流算法调优数据集 + 模型 + 优化

这并不意味着经典的DSP已经过时。.

在许多实际产品中,DSP仍可用于以下方面:

  • 预处理
  • 过滤
  • 回声消除
  • 增益控制
  • 噪声估计
  • 空间处理

随后,人工智能可以进一步优化。.

因此,混合架构能够兼顾这两种方法的优势。.

光谱减法能否应用于MEMS麦克风?

是的。.

频谱减法是对音频信号的数字表示形式进行处理,因此既可与数字MEMS麦克风配合使用,也可与模拟MEMS麦克风系统配合使用,随后进行相应的模数转换。.

一个简化的系统可以是:

MEMS 麦克风

ADC / 数字麦克风接口

STFT

噪声估计

光谱减法

语音增强

输入信号的质量依然很重要。.

降噪算法无法完全恢复已经丢失的信息,原因在于:

  • 麦克风过载
  • 信噪比不足
  • 声学隔离效果差
  • 过度的混响
  • ADC性能不佳
  • 机械振动
  • 严重的声学干扰

因此,在考虑DSP的同时,还应综合考虑麦克风的选择和声学设计。.

麦克风阵列系统中的频谱减法

当有多个麦克风可用时,频谱减法就变得更有趣了。.

麦克风阵列提供 空间信息 除了STFT提供的时频信息之外。.

例如

多个 MEMS 麦克风

同步频道

STFT

波束成形

频谱降噪

语音增强

这使得系统能够利用两种不同类型的信息:

光谱信息

能量在频率上位于何处?

空间信息

声音是从哪里传来的?

将这两个维度结合起来,其效果可能比仅依靠单通道光谱减法更为显著。.

这尤其适用于:

SISTC 的麦克风阵列解决方案同样将多通道麦克风采集与数字信号处理及降噪功能相结合。例如,基于 GY6228AEC 的阵列技术文档中描述了同步多通道数字麦克风输入,以及包括噪声抑制和阵列信号处理在内的各项功能。.

光谱减法的实用参数

并不存在一套通用的参数。.

然而,对于语音应用,工程师通常会从如下配置开始:

参数示例起点
采样率16 kHz
帧时长20–32 毫秒
FFT大小512
窗口汉恩
重叠50–75%
噪声估计VAD辅助型/自适应型
减法超限取决于具体应用
光谱下限取决于具体应用
增益平滑推荐

这些是 起点,而非通用规范.

最佳配置取决于:

  • 目标语音带宽
  • 噪声特性
  • 处理器性能
  • 可接受的延迟
  • 期望的抑制水平
  • 语音质量要求

一个简单的 Python 实现

可以通过STFT处理实现一个基本的频谱差分实验。.

以下示例旨在说明核心概念,而非提供一个可用于实际生产环境的降噪算法。.

import numpy as np
from scipy.io import wavfile
from scipy.signal import stft, istft

fs, audio = wavfile.read("noisy_audio.wav")

if audio.ndim > 1:
    audio = audio[:, 0]

audio = audio.astype(np.float32)

# 短时傅里叶变换 (STFT)
f, t, Zxx = stft(
    audio,
    fs=fs,
    window="hann",
    nperseg=512,
    noverlap=256
)

magnitude = np.abs(Zxx)
phase = np.angle(Zxx)

# 示例:从前 0.5 秒的数据中估计噪声
noise_frames = t < 0.5

noise_power = np.mean(
    magnitude[:, noise_frames] ** 2,
    axis=1,
    keepdims=True
)

signal_power = magnitude ** 2

# 超减法因子
alpha = 1.0

# 频谱减法
clean_power = np.maximum(
    signal_power - alpha * noise_power,
    0.01 * signal_power
)

clean_magnitude = np.sqrt(clean_power)

# 恢复相位
Z_clean = clean_magnitude * np.exp(1j * phase)

# 逆短时傅里叶变换
_, enhanced = istft(
    Z_clean,
    fs=fs,
    window="hann",
    nperseg=512,
    noverlap=256
)

wavfile.write(
    "enhanced_audio.wav",
    fs,
    enhanced.astype(np.float32)
)

本例假设前0.5秒包含一个具有代表性的纯噪声片段。.

在实际产品中,这种假设往往不切实际。.

因此,生产系统需要一种更稳健的噪声估计策略。.

基本光谱减法的局限性

谱减法之所以具有吸引力,在于其简单性,但应考虑其存在的若干局限性。.

1. 对噪声估计的依赖性

如果噪声估计不准确,抑制性能就会下降。.

2. 音乐噪音

独立的时间-频率衰减可能会产生人造的音调失真。.

3. 语音失真

通过强力减法,可以去除与背景噪声重叠的语音成分。.

4. 变化的噪音

变化迅速的噪声很难准确追踪。.

5. 混响

频谱减法主要基于加性噪声的假设而设计。混响是一个不同的声学问题,可能需要额外的处理。.

6. 竞选演讲

另一个扬声器不仅仅是一个静止的背景噪音。.

要分离两个语音源,通常需要进行空间处理、源分离或使用训练模型,而不仅仅是简单的频谱减法。.

工程师何时应使用谱减法?

在以下情况下,光谱减法可能是一个实用的选择:

  • 计算资源是有限的;;
  • 低功耗很重要;;
  • 背景噪声相对稳定;;
  • 最好采用透明的算法;;
  • 确定性处理是可取的;;
  • 需要迅速实施;;
  • 该系统可以容忍一些残留的伪影。.

在以下情况下,它作为唯一的降噪方法可能不太合适:

  • 噪声变化迅速;;
  • 有多位发言人;;
  • 存在强烈的回响;;
  • 目标声音非常微弱;;
  • 需要极其自然的语音质量。.

在这种情况下,工程师可以考虑将频谱处理与以下方法结合使用:

  • 麦克风阵列
  • 波束成形
  • 自适应滤波
  • 声学回声消除
  • AI语音增强
  • 源分离

频谱减法在现代音频系统中的作用

重要的是,不要将光谱减法视为一种过时的技术。.

如今,它的最大价值或许在于作为更广泛的信号处理架构中的一个组成部分。.

例如

MEMS 麦克风

声学前端

STFT

噪声估计

波束成形

频谱降噪

AI语音增强

语音识别

混合系统可以在效率高且结果可预测的情况下使用经典的DSP,而在复杂的声学模式需要基于学习得到的表示时,则使用人工智能。.

这种架构对于现代智能麦克风系统尤为重要。.

常见问题

什么是光谱减法?

频谱减法是一种频域降噪方法,它通过估计噪声频谱,并将其从含噪声的音频频谱中减去。.

光谱减法是如何工作的?

音频被划分为短帧,通过FFT或STFT进行变换,经分析以估算背景噪声,随后在重建音频之前,对与估算噪声相关的频率分量进行衰减。.

什么是光谱减法公式?

功率谱的简化表达式为:

P̂x[k] = max(Py[k] − αP̂n[k], βPmin)

具体公式因实现方式而异。.

在频谱减法中,什么是音乐噪声?

音乐噪声是一种人造的音调或哨声般的干扰现象,当个别时频分量在频率和时间上被不一致地抑制时,可能会产生这种现象。.

如何减少音乐中的噪音?

常见的方法包括频谱平滑、时间平滑、增益下限限制、改进的噪声估计、VAD辅助处理以及后滤波。.

频谱减法对语音有效吗?

是的。当背景噪声相对稳定且能够可靠地估计噪声频谱时,这种方法对语音识别是有效的。.

谱减法对非平稳噪声有效吗?

可以,但性能在很大程度上取决于噪声估计器跟踪变化的速度和准确性。.

频谱减法是否可用于 MEMS 麦克风?

是的。它可以处理来自数字MEMS麦克风的数字音频,或来自模拟MEMS麦克风的数字化信号。.

频谱减法能否取代麦克风阵列?

不。谱减法主要利用时频信息。麦克风阵列则提供空间信息,可用于波束成形和定向噪声抑制。.

AI降噪比频谱减法更好吗?

它们采用不同的方法。频谱减法计算效率高且易于解释,而人工智能模型能够学习更复杂的噪声和语音特征,但通常需要训练数据和更多的计算资源。.

结论

谱减法是数字处理领域中的基础算法之一 音频降噪.

其概念很简单:

估计噪声谱,并在频域中从含噪声信号中将其剔除。.

然而,要有效实施,仅靠减法运算本身远远不够。.

噪声估计、FFT/STFT 参数、频谱下限、平滑处理、VAD、延迟以及语音保留都会影响最终结果。.

最大的挑战是在以下方面找到适当的平衡:

噪音抑制

语音质量

对于背景噪声相对稳定且资源受限的系统,频谱减法仍然很有用。.

对于复杂的环境,它还可以作为更大系统中的一部分,该系统整合了 麦克风阵列, 波束成形、自适应滤波以及基于人工智能的语音增强.

对于从事现代麦克风和声学系统开发的工程师而言,理解频谱减法是掌握更先进降噪技术的重要基础。.

滚动至顶部
SILICON SOURCE
隐私概述

本网站使用 Cookie,以便为您提供最佳的用户体验。Cookie 信息存储在您的浏览器中,其功能包括在您再次访问我们的网站时识别您的身份,以及帮助我们的团队了解您认为网站的哪些部分最有趣、最有用。.