音频信号中同时包含以下两种信息: 时间和频率. 理解这些信息是如何表示的,是现代音频工程的基础,从 MEMS 麦克风系统 以及从语音增强到降噪、波束成形和基于人工智能的音频处理。.
分析音频信号的两个最重要的工具是 快速傅立叶变换 (FFT) 和 短时傅立叶变换 (STFT).
FFT 提供了一种高效的方法来分析数字信号的频率成分,而 STFT 则将这一概念进一步扩展,以显示频率成分随时间的变化情况。.
本指南阐述了DFT、FFT和STFT之间的区别、它们的工作原理,以及它们为何在实际的音频信号处理系统中得到广泛应用。.
在音频处理中,傅里叶变换是什么?
时域中的音频波形展示了声压或麦克风输出随时间的变化情况。.
例如,麦克风录音可以表示为:
x(t)
其中 t 代表时间。.
然而,时域波形并不能直接告诉我们其中包含哪些频率。.
傅里叶变换提供了一种另一种表示形式:
时域 → 频域
与其问:
该信号随时间如何变化?
我们可以问:
该信号中包含哪些频率分量?
这一点特别有用,因为语音、音乐、机械噪声和环境噪声的许多特征在频域中更容易识别。.
例如
- 低频噪声可能表现为低于某一频率的强能量;;
- 风扇噪声可能包含相对稳定的频谱分量;;
- 言语中包含具有特征性的谐波和共振峰结构;;
- 谐波干扰在频谱中可能表现为窄峰。.
这些频域信息构成了许多音频处理算法的基础。.
DFT:频域分析的基础
SISTC的 离散傅里叶变换(DFT) 将有限序列的离散采样点转换为其频率分量的表示形式。.
对于一组 N 个样本,其离散傅里叶变换(DFT)为:
X[k] = Σ x[n]e^(-j2πkn/N)
其中:
- x[n] 是输入信号
- X[k] 是复频域表示
- N 是样本数
- n 是时域采样索引
- k 是频率区间索引
输出结果同时包含幅值和相位信息。.
震级可按以下公式计算:
|X[k]|
相位表示为:
∠X[k]
在实际的音频系统中,工程师经常分析幅度频谱,因为它能直观地显示信号能量集中在哪些位置。.
什么是FFT?
SISTC的 快速傅立叶变换 (FFT) 它与离散傅里叶变换(DFT)并非不同的数学变换。.
相反,FFT 指的是一组能够更高效地计算 DFT 的算法。.
直接DFT实现的计算复杂度大致与以下表达式成正比:
O(N²)
通过FFT算法,可将其简化为大致如下形式:
O(N log N)
对于常见的FFT结构。.
在处理大量音频采样时,或者在必须实时连续重复进行FFT计算时,这种差异就显得尤为重要。.
例如,音频DSP可能会对每个传入帧计算FFT。.
借助高效的FFT实现,可以切实地执行以下操作:
- 频谱分析
- 噪声估计
- 均衡
- 过滤
- 语音增强
- 声学测量
- 特征提取
- 与波束成形相关的处理
- AI预处理
为什么FFT在音频处理中如此重要?
FFT之所以被广泛应用,是因为许多音频处理问题在频域中更容易解决或理解。.
一个简化的处理流程可以是:
麦克风 → ADC → 音频帧 → FFT → 频谱分析 → 处理 → IFFT → 输出
根据具体应用情况,频域处理阶段可能执行以下操作:
- 噪声抑制
- 频谱滤波
- 增益调节
- 频域掩蔽
- 信号测量
- 特征提取
例如,一个简单的降噪系统可以估计背景噪声的频谱,并降低以噪声为主的频率分量的增益。.
该概念被应用于谱减法和维纳滤波等经典算法中。.
FFT 频率分辨率
使用FFT时最重要的概念之一是 频率分辨率.
对于采样率为 Fs 以及 FFT 尺寸为 N, ,频率区间间隔为:
Δf = Fs / N
例如,假设:
- 采样率 = 16 kHz
- FFT 大小 = 512
然后:
Δf = 16000 / 512 = 31.25 Hz
因此,每个FFT频段对应的频率间隔约为31.25 Hz。.
增大FFT的尺寸可以提高频率分辨率。.
例如
| 采样率 | FFT 大小 | 频率分辨率 |
|---|---|---|
| 16 kHz | 256 | 62.5 赫兹 |
| 16 kHz | 512 | 31.25 赫兹 |
| 16 kHz | 1024 | 15.625 Hz |
| 48 千赫 | 1024 | 46.875 赫兹 |
| 48 千赫 | 2048 | 23.4375 赫兹 |
然而,更大的FFT并不一定就更好。.
更大的FFT也意味着更长的分析窗口,这会影响时间分辨率和处理延迟。.
这带来了一个重要的工程权衡:
频率分辨率、时间分辨率与延迟
FFT 大小与音频处理延迟
在实时音频系统中,FFT大小的选择不仅影响频率分辨率。.
对于采样率 Fs 以及框架长度 N, 一帧所代表的时长约为:
T = N / Fs
例如,当采样率为 16 kHz 时:
- 256 个采样点 = 16 毫秒
- 512 个采样点 = 32 毫秒
- 1024 个采样点 = 64 毫秒
更大的帧能提供更多的频率信息,但也会增加被分析的时间跨度。.
这可能会增加算法延迟,具体取决于整体处理架构。.
对于语音通信、会议、交互式音频和嵌入式系统而言,延迟的重要性可能不亚于频谱分辨率。.
因此,应根据实际应用情况选择FFT的大小,而不是简单地将N值最大化。.
什么是STFT?
SISTC的 短时傅立叶变换 (STFT) 对音频信号的短片段应用傅里叶分析。.
这一点很重要,因为实际中的音频信号通常是 非平稳.
例如,言语是在不断变化的。.
对整段录音进行一次FFT分析,虽然可以告诉我们录音中出现了哪些频率,但无法精确地告诉我们 当……时 这些频率出现。.
短时傅里叶变换(STFT)通过将信号划分为多个短的、通常相互重叠的帧来解决这个问题。.
基本流程如下:
音频信号
↓
帧分割
↓
分窗
↓
每帧的FFT
↓
时频表示
STFT的简化方程为:
STFT{x}(m, k) = Σ x[n]w[n − mH]e^(-j2πkn/N)
其中:
- x[n] 是音频信号
- w[n] 是分析窗口
- m 表示帧的位置
- H 是啤酒花用量
- k 表示频率区
- N 是FFT的大小
该结果包含关于两者的信息 时间和频率.
为什么短时傅里叶变换(STFT)更适合处理语音和环境音频
请听一段简短的语音录音。.
在某些时刻,说话者可能会发出一声带有强烈谐波能量的元音。.
几毫秒后,说话者可能会发出一声包含更宽广高频能量的辅音。.
与此同时,背景风扇或空调系统可能会产生相对稳定的低频或单音成分。.
单次FFT无法清晰地显示这种演变过程。.
STFT 生成一种时频表示,通常以 谱图.
频谱图可以显示:
- 横轴 → 时间
- 纵轴 → 频率
- 强度 → 信号幅度或功率
这使得短时傅里叶变换(STFT)在以下方面特别有用:
- 语音分析
- 语音增强
- 噪声分析
- 语音活动检测
- 音频分类
- 声学事件检测
- 音乐分析
- 机器聆听
- 人工智能音频处理
分窗:为何有必要
在对每个STFT帧进行FFT处理之前,工程师通常会应用一个窗函数。.
常见的窗口包括:
- 汉恩窗
- 汉明窗
- 布莱克曼窗
- 长方形窗户
分窗法的目的是为了减少 频谱泄漏 由对信号的一个有限区段进行分析而引起。.
如果不进行分窗处理,一个未能与FFT频段完全对齐的频率分量,其能量可能会分散到相邻的频段中。.
窗口的选择会影响:
- 主瓣宽度
- 旁瓣电平
- 振幅精度
- 频率辨别
汉恩窗在实际音频应用中被广泛使用,因为它在频谱泄漏与频率分辨率之间实现了良好的平衡。.
关于频谱泄漏的解释
假设一个正弦信号的频率与FFT频窗并不完全对应。.
一个理想的期望可能是:
一个频率 → 一个FFT峰值
实际上,能量会扩散到相邻的频率区间中。.
这被称为 频谱泄漏.
分窗法可以减少这种泄漏,尽管没有任何一种分窗方法能完全消除所有权衡。.
正因如此,在解释FFT结果时,不应忽略以下因素:
- 采样率
- FFT大小
- 窗户类型
- 窗口长度
- 信号频率
- 重叠
这些参数都会影响最终得到的光谱。.
STFT中的重叠和跳跃长度
STFT帧通常是重叠的。.
例如,某个系统可能会使用:
- 20–32 毫秒的帧长
- 50% 重叠
- 75% 重叠
SISTC的 跳跃幅度 决定分析窗口在相邻帧之间移动的距离。.
如果:
N = 帧长
以及:
H = 跳跃步长
那么重叠比为:
重叠率 = 1 − H/N
例如,如果:
- N = 512
- H = 128
然后:
重叠 = 75%
更高的重叠度能带来更频繁的更新和更平滑的时频跟踪,但也会增加FFT运算的次数,从而提高计算需求。.
短时傅里叶变换与降噪
STFT 在以下方面尤为重要: 音频降噪 因为它将该问题转化为一系列时频处理操作。.
一个典型的基于STFT的降噪系统如下所示:
音频有杂音
↓
构图
↓
分窗
↓
FFT
↓
噪声估计
↓
增益计算 / 频谱掩膜
↓
频域处理
↓
逆FFT
↓
重叠加法
↓
增强音频
许多传统的语音增强系统都采用了这种架构。.
例如,通过频谱减法可以估计噪声谱,并削弱与背景噪声相关的频率分量。.
维纳滤波器可以根据估计的信号功率和噪声功率计算出频率依赖性增益。.
STFT 和 光谱减法
频谱减法很好地说明了为什么短时傅里叶变换(STFT)很有用。.
假设:
Y(f) = X(f) + N(f)
其中:
- X(f) = 期望信号
- N(f) = 噪声
- Y(f) = 观测信号
如果系统能够估计噪声谱,它就可以尝试恢复目标信号。.
在一种简化的功率谱实现中:
P̂x(f) = max[Py(f) − αPn(f), Pmin(f)]
其中:
- Py(f) = 噪声信号的功率谱
- Pn(f) = 估计的噪声功率谱
- α = 超减因子
- Pmin(f) = 光谱下限
由于语音和噪声的特性会随时间变化,因此该操作通常按帧进行。.
正因如此,STFT才显得极其有用。.
短时傅里叶变换(STFT)与基于人工智能的语音增强
STFT 还被广泛用作基于人工智能的音频处理中的特征表示。.
神经网络可以接收:
带噪声的波形
→ STFT
→ 振幅/复频谱
→ 神经网络
→ 增强频谱
→ ISTFT
→ 增强型波形
根据模型的不同,网络可能会估计:
- 干净的幅度谱
- 理想比例面具
- 复杂谱
- 噪声谱
- 时频掩模
这种方法在语音增强和音频去噪的研究与工程领域中很常见。.
然而,现代神经网络也可以直接对波形进行处理,因此并非所有人工智能音频系统都必须使用短时傅里叶变换(STFT)。.
选择取决于模型架构、计算需求、延迟以及目标应用。.
FFT 与 STFT:有什么区别?
最简单的区分是:
FFT 可高效地分析频率成分。STFT 则用于分析频率成分随时间的变化情况。.
| 特点 | FFT | STFT |
|---|---|---|
| 主要目的 | 频谱分析 | 时频分析 |
| 时间信息 | 仅限一次FFT | 在各个帧中得以保留 |
| 加工 | 一个信号段 | 多个重叠的片段 |
| 典型输出 | 频谱 | 谱图 / 时频矩阵 |
| 计算负荷 | 单次变换的下限 | 更高,因为执行了多次FFT |
| 常见应用 | 频谱分析、滤波 | 语音、降噪、瞬态分析 |
| 关键参数 | FFT大小、采样率 | FFT 尺寸、窗函数、步长、重叠 |
因此,将STFT视为一个 一种对信号的短段反复应用傅里叶分析的框架, ,而不是将其视为一种完全无关的变换。.
FFT 与 STFT:应该选择哪一种?
答案取决于具体应用场景。.
在以下情况下请使用 FFT:
- 频谱测量
- 谐波分析
- 频率响应分析
- 稳态信号分析
- 光谱监测
- 简单的频域处理
在以下情况下请使用 STFT:
- 语音分析
- 变化噪声分析
- 瞬态检测
- 时频可视化
- 语音增强
- 谱噪声抑制
- 持续变化的音频分析
对于大多数实际应用中的语音和环境音频系统而言,由于声学信号会随时间变化,因此短时傅里叶变换(STFT)通常能提供更多信息。.
实例:分析麦克风信号
假设有一个MEMS麦克风,正在录制某人在房间内说话的声音,而背景中空调系统正在运行。.
麦克风捕捉到:
语音 + 暖通空调噪声 + 室内噪声 + 麦克风/电子噪声
从原始波形中,可能无法立即分辨出哪些成分属于语音,哪些属于背景噪声。.
FFT 可以揭示整体的频率分布。.
短时傅里叶变换(STFT)还能进一步说明:
- 当那个人在说话的时候
- 哪些频段包含语音能量
- 暖通空调系统的噪音是否相对稳定
- 出现瞬态噪声的地方
- 语音与静默之间频谱的变化情况
这些信息随后可用于下游处理,例如:
- 噪声估计
- 语音活动检测
- 频谱滤波
- 波束成形
- 语音增强
- 基于人工智能的降噪
麦克风阵列系统中的FFT和STFT
当涉及多个麦克风时,FFT和STFT就显得更加有用。.
一个麦克风阵列可能包含多个同步工作的MEMS麦克风。.
每个通道都会生成一个音频流:
麦克风 1 → x₁(t)
Mic 2 → x₂(t)
Mic 3 → x₃(t)
Mic 4 → x₄(t)
等等。.
这些信号可以转换到频域并进行联合处理。.
这使得以下技术成为可能:
- 频域波束成形
- 空间滤波
- 到达方向估计
- 多通道降噪
- 后处理
- 声源分离
麦克风通道之间的相对相位和振幅信息变得至关重要。.
这就是其中一个原因,为什么 精确的同步和一致的麦克风特性 在麦克风阵列设计中起着重要作用。.
FFT、STFT 和波束成形
在频域波束成形系统中,处理链可简化为:
多个 MEMS 麦克风
↓
同步音频通道
↓
STFT
↓
空间滤波/波束成形
↓
后处理
↓
逆短时傅里叶变换
↓
增强音频
该系统可利用各麦克风之间声音到达时间和相位的差异,从而突出目标方向并抑制不需要的空间分量。.
这将FFT/STFT与实际的麦克风阵列技术直接联系起来。.
为实时音频选择FFT参数
并不存在通用的FFT配置。.
工程师通常会综合考虑多个参数。.
采样率
更高的采样率可提供更宽的可用频率范围,但会增加数据和处理要求。.
常见的语音/音频处理速率包括:
- 16 kHz
- 24 千赫
- 32 kHz
- 44.1 kHz
- 48 千赫
合适的速率取决于具体应用和目标频率范围。.
FFT 大小
更大的FFT尺寸可提供更精细的频率间隔:
Δf = Fs/N
但会增加分析窗口的长度和计算工作量。.
帧长
帧长度决定了每次分析的音频数据量。.
较短的帧能提供更高的时间分辨率。.
帧长越长,频率分辨率就越高。.
啤酒花用量
跳跃大小越小,处理更新就越频繁。.
这虽然可以提高时间跟踪精度,但会增加计算负担。.
窗函数
该窗口会影响频谱泄漏和频率分辨能力。.
汉恩窗是一个常见的起点,但最佳选择取决于测量或处理的目标。.
一种适用于语音处理的实用STFT配置
作为工程设计的起点,一个语音处理系统可能会采用:
- 采样率: 16 kHz
- 帧长: 20–32 毫秒
- FFT 大小: 512
- 窗口: 汉恩
- 重叠: 50–75%
这些只是示例,并非通用的规范。.
应根据以下内容对最佳参数进行验证:
- 目标延迟
- 语音质量
- 噪声特性
- 处理器性能
- 内存要求
- 算法设计
对于嵌入式系统,参数选择应始终结合完整的处理链进行评估。.
FFT 和 STFT 的常见错误
错误 1:认为更大的 FFT 总是更好的
更大的FFT可以提高频点间距,但可能会降低时间分辨率并增加延迟。.
错误 2:忽略窗口化
直接对有限信号段应用FFT可能会产生显著的频谱泄漏。.
错误 3:将 FFT 尺寸与频率分辨率混为一谈
频率分辨率取决于采样率和FFT大小:
Δf = Fs/N
在保持 N 不变的情况下提高采样率,实际上会增大频段间距。.
错误4:忽视阶段
幅值谱虽然有用,但相位信息也可能很重要,特别是在以下情况下:
- 多麦克风处理
- 波束成形
- 信号重建
- 复杂光谱增强
错误 5:将 STFT 视为零延迟操作
实时STFT处理会引入基于帧的缓冲和处理延迟。.
系统的总延迟取决于:
- 帧长
- 跳跃幅度
- 缓冲
- FFT/IFFT 处理
- 算法预读
- 硬件/软件实现
Python 示例:音频信号的 FFT
利用 NumPy 和 SciPy 等 Python 库,可以实现一个简单的 FFT 工作流。.
import numpy as np
from scipy.io import wavfile
fs, audio = wavfile.read("audio.wav")
# 如果录音是立体声,则使用单声道
if audio.ndim > 1:
audio = audio[:, 0]
N = len(audio)
spectrum = np.fft.rfft(audio)
frequencies = np.fft.rfftfreq(N, d=1/fs)
magnitude = np.abs(spectrum)
print("采样率:", fs)
print("采样数:", N)
print("频率分辨率:", fs / N)本示例计算一段音频录音的单边FFT频谱。.
在实时音频处理中,工程师通常会对较短的帧进行处理,而不是对整个录音进行一次FFT计算。.
Python 示例:STFT
SciPy 提供了一种 STFT 实现,可用于时频分析。.
import numpy as np
from scipy.io import wavfile
from scipy.signal import stft
fs, audio = wavfile.read("audio.wav")
if audio.ndim > 1:
audio = audio[:, 0]
frequencies, times, Zxx = stft(
audio,
fs=fs,
window="hann",
nperseg=512,
noverlap=256
)
magnitude = np.abs(Zxx)
print("频率bin数:", len(frequencies))
print("时间帧数:", len(times))生成的矩阵包含复数STFT表示。.
其幅度可以通过声谱图直观地呈现出来,以便观察音频频谱随时间的变化情况。.
SciPy 的信号处理文档提供了有关 STFT 及相关信号处理函数的更多实现细节。.
从FFT和STFT到现代音频智能
FFT 和 STFT 不仅仅是一些学术上的信号处理概念。.
它们仍然是实用音频系统中的重要组成部分。.
一个现代的音频处理管道可能如下所示:
↓
模拟/数字前端
↓
音频采样
↓
构图
↓
FFT / STFT
↓
噪声估计
↓
波束成形
↓
DSP降噪
↓
AI语音增强
↓
语音识别 / 通信 / 音频输出
该架构说明了一个重要观点:
优质的音频智能始于优质的信号表示。.
麦克风提供声学信息,而DSP和AI算法则决定如何对这些信息进行分析和增强。.
结论
FFT 和 STFT 是数字音频信号处理中的基本工具。.
FFT 提供了一种高效的方法来计算采样信号的频域表示。它被广泛应用于频谱分析、滤波、特征提取和实时数字信号处理(DSP)。.
短时傅里叶变换(STFT)通过分析信号中短暂且相互重叠的片段,进一步扩展了这一方法,从而能够观察频率成分随时间的变化情况。.
对于语音、环境声音和降噪而言,这种时频表示法尤为重要。.
在实际的麦克风系统中,FFT 和 STFT 可以作为更大处理架构的一部分,该架构涉及 噪声估计、频谱滤波、波束成形、麦克风阵列以及基于人工智能的语音增强.
关键的工程挑战并不只是选择最大的FFT或最复杂的算法,而是要选择合适的组合,即 采样率、帧长、FFT大小、窗函数、重叠、延迟和处理架构 用于目标应用程序。.
对于从事MEMS麦克风和多麦克风系统开发的工程师而言,了解FFT和STFT是设计更高效的音频采集和降噪系统的重要基础。.
常见问题
在音频处理中,FFT 是什么?
FFT 是一种用于计算离散傅里叶变换的高效算法。它将采样后的音频从时域转换为频域表示。.
在音频处理中,STFT是什么?
短时傅里叶变换(STFT)将傅里叶分析应用于音频信号中较短且通常相互重叠的片段。它提供了关于频率成分随时间变化的信息。.
FFT 和 STFT 有什么区别?
FFT 提供信号片段的频率信息,而 STFT 则对短片段反复进行傅里叶分析,从而生成时频表示。.
为什么在语音处理中使用短时傅里叶变换(STFT)?
语音是非平稳的,其频率成分会持续变化。短时傅里叶变换(STFT)能够捕捉这些变化,因此对语音增强、降噪和语音分析非常有用。.
更大的FFT尺寸能否提高音质?
不一定。较大的FFT可以改善频率bin间距,但可能会增加处理时间、计算需求和延迟。合适的FFT大小取决于具体应用。.
什么是FFT频率分辨率?
FFT频率bin间距约为:
Δf = Fs/N
其中 Fs 是采样率,N 是 FFT 尺寸。.
STFT应该使用哪种窗函数?
汉窗(Hann window)是进行一般音频分析和处理时的常见选择,但最佳窗函数的选择取决于具体的应用和测量要求。.
短时傅里叶变换(STFT)对人工智能降噪来说是必要的吗?
不。许多人工智能模型使用短时傅里叶变换(STFT)特征或时频表示,但一些现代模型会直接处理原始音频波形。具体采用哪种架构取决于模型和应用场景。.
FFT 和 STFT 能否应用于麦克风阵列?
是的。FFT 和 STFT 在多麦克风处理中得到广泛应用,包括频域波束成形、空间滤波、降噪以及声源分析。.