想象一个热闹的火锅店:朋友坐在对面,锅底咕嘟咕嘟地沸腾,碗筷叮当作响,邻桌划拳声一浪高过一浪。朋友想告诉你一个重要消息,可每个字都被淹没在喧嚣里。你只好前倾身体、竖起耳朵,努力从杂音中“捡”出他的话。人类天生擅长这种“在噪声里听人说话”的本领,机器却常常一头雾水——这正是语音增强中“降噪”要解决的问题:让机器学会从带噪的语音里,分离出我们真正想听的说话声。 做这件事有几条路,恰好对应人类听声的几种策略:有人先“记住”噪声长什么样,再从混合物里把它扣掉(谱减法);有人像老练的听者,根据声音强弱随时调整注意力(维纳滤波);有人凭借多年经验猜测“这句大概在说什么”(统计模型法);还有人干脆培训一位身经百战的服务员,让他一眼认出朋友的声音(深度学习方法)。这篇文章就用这场火锅店的相遇作比喻,从基础概念讲到经典算法,再到评价指标与工程落地,带你完整走一遍“降噪”的旅程。
降噪是语音增强的必修课:掌握谱减法、维纳滤波、统计模型与深度学习这几条路线后,你就能独立搭建通话降噪、音箱远场识别等真实系统的信号处理链路,这也是语音算法工程师最核心的面试与工作技能之一。
可视化演示
展示语音信号降噪过程:含噪语音波形与纯净语音波形的对比,以及频域降噪中噪声估计与谱减法的处理效果。
本节配有交互动效(进入视口后自动加载,约 3KB)。
时域波形对比 含噪语音:噪声叠加在语音信号上 降噪输出:滤除噪声保留语音成分 SNR = 10·log₁₀(P_signal / P_noise) dB 语音降噪通过估计噪声谱并从含噪信号中减去,提升信噪比
降噪基础概念
走进火锅店,你首先得想清楚一件事:什么才是你想听的声音?朋友的话语是“目标语音”,剩下的一切——空调嗡嗡声、锅底沸腾声、邻桌划拳声、碗筷碰撞声——统统是噪声。往细了分,噪声还能分成三类:稳定的稳态噪声(比如空调声,基本恒定)、突发的瞬态噪声(比如盘子落地,一瞬而过)、以及起起伏伏的非平稳噪声(比如嘈杂的人声,时高时低)。不同类型噪声给降噪算法带来的挑战也完全不同。
定义了噪声,降噪的目标也随之清晰:尽量保留目标语音,同时尽量抑制其他声音。注意,这不是简单地把音量调小,而是“分离”——把朋友的声音从混合物里提纯出来。要衡量分离的难度和效果,最常用的标尺就是信噪比(SNR)。
信噪比的定义是语音平均功率与噪声平均功率之比,取对数后乘以 10,单位是分贝(dB)。功率是能量的度量:语音功率远大于噪声功率时,SNR 为正,说明“说话声盖过噪声”;反之 SNR 为负,说明噪声压过了人声。公式如下:
回到火锅店:信噪比高,就像朋友嗓门大、店里又安静,你几乎不费劲就能听清;信噪比低,就像朋友压低声音、店内人声沸腾,你得动用全部“降噪手段”。理解了这把标尺,后面所有算法的目标都可以归结为一句话——把这个数字往高了抬。
- P_s(语音功率)对一帧语音信号 s(n) 做平方再取平均,衡量“朋友声音”的平均能量。
- P_n(噪声功率)同样方式衡量噪声 d(n) 的平均能量,即“锅底沸腾加上邻桌喧哗”的底噪强度。
- 比值 P_s / P_n语音相对噪声强多少倍;大于 1 表示语音占优,小于 1 表示噪声压过人声。
- log10 与乘以 10把跨度极大的比值压缩到“分贝”刻度,每 10 dB 对应 10 倍功率差距,便于阅读和对比。
谱减法原理
对付火锅店相对恒定的背景噪音,人有个朴素的办法:先记住噪声长什么样。趁朋友还没开口,你默默感受几秒店里的“平均喧闹声”;等朋友开口后,你心里自动把这个“底噪”从耳朵收到的声音里扣掉,剩下的基本就是他的话。谱减法(Spectral Subtraction)就是这么朴素而有效。
它的核心思想在频域展开:把带噪语音的幅度谱(“混合物”)减去估计出的噪声幅度谱(“底噪照片”),再保留原来的相位信息,还原成时域信号。因为人耳对相位不敏感,通常只动幅度、不碰相位,这让实现变得非常简单。
但直接做减法会带来一个著名副作用——“音乐噪声”(musical noise):由于噪声谱是随机起伏的,减完之后残留的部分会在某些频点上冒出尖锐的随机峰,听感像一阵阵叮叮咚咚的电子音乐。改进思路是“过减”(over-subtraction)加“频谱下限”(spectral floor):多加一点减法让残留更干净,同时设一个下限防止出现负值和尖峰:
火锅店里,过减因子就像你“多扣一点底噪”的执念——扣得狠,朋友的话清楚些,但扣过头会把他的一两个词也抹掉;频谱下限则像你安慰自己“至少别把声音彻底听没了”,保留一点底线。谱减法胜在简单高效,是许多实时降噪系统的起点。
- |Y(f)|²(带噪功率谱)对带噪语音 y(n) 做 DFT 后取幅度平方,表示混合物在每个频率上的能量分布,即“你耳朵收到的全部声音”。
- |N̂(f)|²(噪声功率谱估计)用静音段或语音端点检测估计出的噪声“照片”,即“朋友没说话时店里底噪的形态”。
- α(过减因子)α > 1 时多减一点,更激进地抑制残留的噪声能量。
- max(·, β|Y(f)|²)(频谱下限)不允许结果低于带噪谱的一定比例,避免出现负功率和由此产生的音乐噪声尖峰。
维纳滤波方法
火锅店里真正厉害的听者不会一味“扣底噪”,他会根据当下的声音强弱动态调节注意力:朋友声音洪亮时,耳朵全开,把每个字都收进来;朋友声音微弱时,反而不敢轻举妄动,因为强行放大很可能把噪声一起放大。这种“看菜下饭”的听觉策略,正是维纳滤波(Wiener Filter)的思路。
维纳滤波从“最优线性估计”出发:在均方误差最小的意义下,设计一个随频率变化的增益 H(f),把带噪语音乘上这个增益,得到对干净语音的最优估计。关键变量是每个频点上的信噪比状况——语音强,则该频点几乎全放行;噪声强,则该频点被压下去。
设第 k 个频点的先验信噪比为 ξ_k(语音功率与噪声功率之比),维纳增益为:
由于 ξ_k ≥ 0,增益始终落在 0 到 1 之间。实际工程中常用“决策导向”(decision-directed)方法递归平滑地估计 ξ_k:把上一帧的增益乘后验信噪比与当前帧的后验信噪比做加权混合,平滑系数通常取 0.98,以此抑制增益的剧烈跳变。
维纳滤波就像火锅店里那个“懂分寸”的听者:他从不会把耳朵盲目开到最大,而是始终根据朋友声音与环境噪声的比例来调节专注度。因为每一步都有数学上的最优性保证,维纳滤波成为经典降噪中性能与复杂度最平衡的一档。
- ξ_k(先验信噪比)第 k 个频点上“语音功率 ÷ 噪声功率”的估计值,是决定增益的主导输入。
- ξ_k/(1+ξ_k)(增益公式)把 ξ_k 代入分式,得到 0 到 1 之间的实数增益,作为该频点的“放行比例”。
- ξ_k → ∞(语音主导)增益趋于 1,该频点几乎原样保留——朋友声音洪亮时,耳朵全开。
- ξ_k → 0(噪声主导)增益趋于 0,该频点被大幅压制——噪声盖过语音时,不敢盲目放大。
统计模型法
再厉害的听者也有没法直接判断的时刻:朋友的声音被噪声完全盖住,听不清到底说了什么。这时老道的火锅店熟客会“猜”——根据多年的听声经验,他大致知道哪种音节通常长什么样。统计模型法(Statistical Model Based Methods)把这套“经验推断”用数学写了出来:假设语音和噪声的频谱系数服从某些概率分布,然后基于观测,用贝叶斯公式算出“最可能的干净语音”。
在众多统计模型中,把带噪语音的 DFT 系数建模成复高斯分布、再求最小均方误差估计的做法最经典,即 MMSE-STSA(Minimum Mean-Square Error Short-Time Spectral Amplitude),直接对短时谱幅度做 MMSE 估计。
设第 k 个频点的后验信噪比为 γ_k = |Y_k|² / λ_n(k),中间量 v_k = (ξ_k/(1+ξ_k))·γ_k,则 MMSE-STSA 的增益为:
统计模型法就像那位“会猜”的老顾客:当朋友的声音听不清时,他不慌不忙,用过往经验(分布假设)和当下线索(先验/后验信噪比)做一次贝叶斯推理,给出最合理的猜测。相比谱减法,它更少产生音乐噪声、对非平稳噪声也更鲁棒,代价是计算量更大。
- γ_k(后验信噪比)用当前帧观测直接算出的信噪比,即“带噪功率 ÷ 噪声功率”。
- v_k(中间量)由先验与后验信噪比结合而成的复合参数,模型用它综合“经验”与“观测”两类证据。
- I_0、I_1(修正贝塞尔函数)来自对复高斯分布求条件期望时的积分结果,是 MMSE 推导的“副产品”,用来描述随机相位下的最优增益形状。
- exp(−v_k/2)(指数抑制项)在噪声主导时平滑控制增益的衰减速度,让估计结果不过度放大噪声。
- 增益乘带噪幅度最终把增益乘到带噪幅度 |Y_k| 上,得到干净语音幅度的 MMSE 估计,再配合带噪相位还原时域。
深度学习方法
前面几种方法都像是“普通食客”的听声策略,依赖手工设计的假设。现在的换代方案来了:干脆请一位“身经百战的服务员”——他见过成千上万种火锅店的喧闹,也听过无数朋友的悄悄话,只要扫一眼波形,他就能告诉你“这一部分是锅底声,那一部分是人声”。这位服务员就是深度学习模型。
深度学习降噪的核心是把“降噪”看成监督学习问题:准备大量配对的“带噪语音-干净语音”样本,让神经网络学会从带噪时频特征(如对数梅尔谱)回归出干净表示,这一路叫“映射式”(mapping);更常用的是让网络预测一个“掩蔽”(mask),用掩蔽乘到带噪谱上实现增强,这一路叫“掩蔽式”(masking)。
掩蔽式方法里最经典的训练目标是理想比值掩蔽(IRM),定义是每个时频点上语音能量占总能量的比例:
模型训练时用干净语音和噪声算出 IRM 作为标签,推理时把预测的掩蔽乘到带噪幅度谱上,还原增强语音。如今端到端系统甚至直接从波形学波形,连 STFT 都不用显式设计。
火锅店里的“服务员”神经网络确实经验丰富,在信噪比很低、甚至噪声类型从未见过的场景下,往往比前面所有“普通食客”表现都好。代价是他需要大量“培训”(数据)和更强“体力”(算力)。因此,很多产品会把这位服务员和前面朴素的算法搭配使用,各取所长。
- S(t,f)、N(t,f)干净语音与噪声在时频点 (t,f) 上的幅度谱,即“朋友的声音”和“店里的噪声”各自的频谱照片。
- 能量比语音能量除以语音加噪声的总能量,结果在 0 到 1 之间,直观表示“这个时频点有多少成分属于朋友在说话”。
- β(可调指数)对掩蔽形状做压缩或拉伸,常用 β = 1 或 0.5,影响训练难度与最终听觉效果。
- 训练与推理网络预测的是掩蔽本身,推理时再乘回带噪谱,实现“端到端可微”的增强链路。
性能评价指标
火锅店好不好,不能只凭“我感觉还行”来打分,得有明明白白的指标:味道(语音质量)、能不能听清同伴说话(可懂度)、上菜速度(实时性)。降噪算法的好坏也一样,需要一套客观与主观结合的评价体系。
主观评价以 MOS(Mean Opinion Score)为代表,请人打分(1 到 5 分),最真实但费时费力。客观评价里的两个标杆是 PESQ 和 STOI:PESQ(Perceptual Evaluation of Speech Quality)衡量语音质量,得分约 −0.5 到 4.5;STOI(Short-Time Objective Intelligibility)衡量可懂度,得分 0 到 1,回答“人在嘈杂中能听懂几个词”。两者都需要拿增强后的语音与干净参考语音比对。
STOI 的做法是:把干净语音和处理后的语音都做时频分解,逐帧比较短时包络的“形状相似度”(相关系数),最后对所有帧取平均:
此外还有 RTF(Real-Time Factor)= 处理时间 ÷ 语音时长,衡量算法能不能“跟上说话速度”。
火锅店评分体系类比到降噪:MOS 像美食家的主观点评,PESQ 像机器对“味道”的自动化打分,STOI 像统计“你到底听懂了朋友几句话”,RTF 则看菜端上来够不够快。没有单一指标能说清全部,工程上通常是指标配合主观听测一起看。
- 时频分解把干净与处理后的信号分帧、加窗、分解到频带,模拟耳蜗对声音的听觉滤波。
- 短时包络相关系数 ρ_l每一帧把包络序列看作向量,计算干净与处理向量的皮尔逊相关系数;越接近 1,形状越一致、越容易听懂。
- 平均对所有帧的相关系数取平均,得到 0 到 1 之间的总体可懂度分数。
工程优化策略
理论再漂亮,进了真正的火锅店也会碰钉子:店里的噪声不是恒定的,空调可能突然关掉,邻桌可能换了一拨更吵闹的人;手机芯片的算力也就那么点,服务员不能想多久就想多久。工程化降噪,就是在这些现实约束下“戴着镣铐跳舞”。
第一个工程问题是“噪声跟踪”:噪声会变,必须持续更新噪声谱估计。常见做法是用语音活动检测(VAD)区分“有语音段”和“纯噪声段”,只在纯噪声段更新噪声估计;没有 VAD 时,还可以用“最小值统计”等盲估计方法,跟踪一段时间内每个频点功率的最小值作为噪声底。
无论哪种跟踪,本质都是对噪声功率 λ̂_n 做递归平滑更新:
另一个工程重点是抑制音乐噪声:过减因子、频谱下限、增益平滑(把帧间增益变化限制在缓慢范围)三件套;参数调优则要平衡“噪声抑制”与“语音失真”这对天生的矛盾。
把视角拉回火锅店:好的降噪工程师就像随机应变的大堂经理——不断刷新对“底噪”的印象(噪声跟踪),安抚音乐噪声这种“新来的怪声”(音乐噪声抑制),拿捏嗓门放大的分寸(参数调优),还在服务速度上压线达标(实时性)。工程化的本质,就是在理想算法与真实约束之间找到那个“刚刚好”的平衡点。
- λ̂_n(t−1,f)(上一帧噪声功率)历史累积下来的噪声估计,像“火锅店底噪的长期记忆”。
- |Y(t,f)|²(当前帧观测)新采到的信号功率,包含语音与噪声的最新信息,是更新的“新证据”。
- α(平滑系数)α 大则快速跟随新观测(对噪声突变敏感但波动大),α 小则平滑稳定(跟不上突变),工程上需要折中。
- 递推式新估计 = 旧估计保留 (1−α) + 新观测采纳 α,是最经典的指数平滑形式。
AI 应用场景
实时通话降噪(手机与视频会议)
阶段:语音前端处理 / 音频信号增强
解决的问题:地铁、街头、咖啡厅里背景噪声严重干扰通话,且用户对延迟极其敏感(超过 20ms 就能察觉),云端大模型根本来不及。传统方案需要在低算力下完成:用谱减法做粗降噪,再用轻量神经网络掩蔽做精修,保证实时因子 RTF < 1。
具体案例:某视频会议软件在移动端集成“回声消除 + 降噪”流水线:先做过减谱减法快速压掉稳态噪声,再用 3 层卷积网络预测 IRM 掩蔽精修,上线后主观 MOS 提升约 0.8 分,嘈杂咖啡馆里的语音可懂度大幅改善。
智能语音助手远场识别
阶段:语音前端信号处理 → 语音识别(ASR)上游
解决的问题:智能音箱放在客厅,电视声、人声、厨房噪音混在一起,直接送识别引擎会导致唤醒率和识别率骤降。远场降噪加麦克风阵列波束形成,可以先把目标方向的语音增强出来,再交给识别引擎。
具体案例:某智能音箱采用 6 麦环形阵列,先做波束形成初步定向,再用统计模型法(MMSE-STSA)做后置降噪,最终唤醒率从 82% 提升到 96%,误唤醒率还下降了 40%。
助听器与医疗听力辅助
阶段:嵌入式实时音频增强
解决的问题:助听器用户最怕火锅店、餐厅这类“鸡尾酒会”场景——人多声杂,助听器把噪声也一起放大了。受限于纽扣电池功耗和 DSP 芯片算力,算法必须极轻量且可靠。
具体案例:某助听器厂商把“维纳滤波 + 语音存在概率”封装成低功耗固件,在餐厅场景下用户主观满意度提升 35%,电池续航仍保持一周以上,验证了经典方法在极端资源约束下的生命力。
Python 演示
import numpy as np def generate_signal(duration=2.0, sr=16000, f0=220): # 生成模拟语音: 基频加前三次谐波, 并做起伏包络 t = np.linspace(0, duration, int(sr * duration), endpoint=False) sig = (np.sin(2 * np.pi * f0 * t) + 0.5 * np.sin(2 * np.pi * 2 * f0 * t) + 0.3 * np.sin(2 * np.pi * 3 * f0 * t)) env = np.minimum(1.0, t * 2) * np.minimum(1.0, (duration - t) * 2) return sig * env def add_noise(sig, noise_std=0.3): noise = noise_std * np.random.randn(len(sig)) return sig + noise, noise def stft(x, win_len=512, hop=128): # 分帧加窗后做FFT, 返回时间-频率复数矩阵 frames = [] for start in range(0, len(x) - win_len, hop): frame = x[start:start + win_len] * np.hanning(win_len) frames.append(np.fft.rfft(frame)) return np.array(frames) def istft(spec, win_len=512, hop=128): # 重叠相加逆变换, 还原时域信号 n_frames = len(spec) out_len = (n_frames - 1) * hop + win_len out = np.zeros(out_len) win = np.hanning(win_len) for i, frame_spec in enumerate(spec): frame = np.fft.irfft(frame_spec, win_len) * win start = i * hop out[start:start + win_len] += frame return out def estimate_noise(spec, num_frames=3): # 用最前几帧(近似纯噪声)估计噪声幅度谱 return np.mean(np.abs(spec[:num_frames]), axis=0) def spectral_subtraction(spec, noise_mag, alpha=2.0, beta=0.01): # 过减谱减法: 幅度减去alpha倍噪声, 并用beta下限兜底 mag = np.abs(spec) phase = np.angle(spec) est = np.maximum(mag - alpha * noise_mag, beta * mag) return est * np.exp(1j * phase) def snr_db(clean, noise): return 10 * np.log10(np.mean(clean ** 2) / np.mean(noise ** 2)) def main(): sr = 16000 clean, _ = generate_signal(sr=sr) noisy, noise = add_noise(clean, 0.3) spec = stft(noisy) noise_mag = estimate_noise(spec) enhanced = istft(spectral_subtraction(spec, noise_mag)) n = len(enhanced) residual = enhanced - clean[:n] print("输入SNR: %.2f dB" % snr_db(clean[:n], noise[:n])) print("输出SNR: %.2f dB" % snr_db(clean[:n], residual)) if __name__ == "__main__": main()
spec = stft(noisy)把带噪语音分帧、加窗、做 FFT,转到频域,相当于拍下火锅店“声音混合物”的照片。noise_mag = estimate_noise(spec)取最前面几帧近似纯噪声,估计出“底噪照片”的幅度谱。est = np.maximum(mag - alpha * noise_mag, beta * mag)核心减法:带噪幅度减掉 alpha 倍的噪声幅度,并用 beta 下限兜底,对应正文中的过减与频谱下限。return est * np.exp(1j * phase)只改幅度、保留带噪相位,这是谱减法的经典操作。enhanced = istft(spectral_subtraction(spec, noise_mag))逆变换把频域结果还原成时域语音,像“把扣除底噪后的声音放回耳朵里”。print("输入SNR: %.2f dB" % snr_db(clean[:n], noise[:n]))打印降噪前信噪比,和输出对比即可看出提升。
常见误区
误区把噪声谱一减,朋友的声音不就原封不动回来了吗?初学者常以为估计出的噪声“照片”是精确的,减完就等于无损还原。
正解噪声谱只是统计估计,本身存在随机误差;减去它必然留下“减法残渣”,还会带来音乐噪声。降噪的本质是“增强”而不是“还原”——把目标语音从混合物里强调出来,连深度学习也无法逐位还原,只会逼近“最像”的干净语音。
为何常见:算法名字里的“减”字很误导人,让人误以为这是确定的精确运算,而没意识到噪声估计本身充满了不确定性。
误区把噪声压到零,语音不就更清楚了吗?于是把过减因子拉满、增益下限调低,追求极致的信噪比数字。
正解抑制噪声和保留语音是一对矛盾:过度降噪会把目标语音一起“误伤”,造成语音失真,听感发闷、可懂度反而下降。工程上用过减因子、频谱下限、增益上限来约束力度,追求的是“噪声够低且语音不失真”的综合最优。
为何常见:直觉上“噪声少=好”,却忽略了目标语音与噪声在频谱上必然重叠,无法被完全分开。
误区谱减法和维纳滤波太老,直接上深度模型不就完事了?传统方法都是过去式。
正解深度学习性能上限高,但依赖大量配对数据、算力和内存;传统方法计算轻、可解释、延迟低,在嵌入式设备和实时链路上依然立得住。主流产品常用“传统前端 + DNN 后处理”的组合,两者互补而非互斥。
为何常见:行业宣传常突出“新方法胜过旧方法”,让人忽略了算力成本、部署约束和真实产品形态。
误区PESQ 提了 0.5、STOI 提了 0.1,这算法肯定完美了,不用再听。
正解客观指标与人的主观体验并不完全一致:有些算法把残留噪声压制得很干净,但语音细节也被抹平,PESQ 未必高;另一些算法把语音留得很完整,却残留恼人的噪声,指标不错但听感刺耳。可靠做法是指标加主观听测(双盲 MOS)一起评估。
为何常见:指标是数字,直观方便对比,人们容易把“数字高”等同于“效果好”,忽略了指标建模的是统计意义上的听觉感知,而非真实人耳。
面试题
Q1. 语音增强中的“噪声”通常指什么?
- A.干扰目标语音的无关声音信号← 正确答案
- B.只有持续不变的稳态噪声
- C.音量较小的背景音乐伴奏
- D.说话人自带的口音语速
答案:A。噪声是相对于“目标语音”定义的,任何干扰目标语音提取的无关声音都算噪声,包括稳态、瞬态和非平稳三类。B 把噪声窄化为稳态,C 把背景音乐排除,D 把口音语速误当噪声,都不符合定义。
Q2. 信噪比 SNR 的计算方式是什么?
- A.噪声功率与语音功率之比取对数再乘十
- B.语音功率与噪声功率之比取对数再乘十← 正确答案
- C.语音幅度与噪声幅度直接相减
- D.噪声功率加上语音功率的平均值
答案:B。SNR 定义为语音功率除以噪声功率,取对数后乘以 10,单位为分贝。A 把分子分母倒置了,C 说的是幅度减法而不是功率比值,D 是求和不是求比,均错误。
Q3. 谱减法中最常见的副作用是什么?
- A.语音变成无法识别的电子音效
- B.残留随机尖峰形成音乐噪声← 正确答案
- C.噪声被完全放大掩盖语音
- D.语音噪声互相抵消成静音
答案:B。谱减法用估计的噪声谱去扣减,噪声谱的随机起伏会留下随机残余尖峰,听感像叮叮咚咚的电子音乐,即“音乐噪声”。A 描述过重,C 与减法作用相反,D 不会发生在功率谱相减中。
Q4. 维纳滤波增益 H(ξ)=ξ/(1+ξ),当先验信噪比 ξ 很大时增益趋近于?
- A.数值 0(完全压制该频点)
- B.数值 1(几乎原样保留该频点)← 正确答案
- C.数值 ξ(随语音强度线性放大)
- D.数值 1/ξ(随噪声强度反向衰减)
答案:B。维纳增益在 ξ 趋于无穷时,分子分母同量级增长,极限为 1,表示语音主导时该频点几乎全放行。ξ 趋于 0 时才趋近 0(A 说反了),C、D 不符合分式结构。
Q5. 决策导向(decision-directed)方法主要用于估计哪种量?
- A.当前帧的先验信噪比← 正确答案
- B.当前帧的后验信噪比
- C.当前帧的噪声功率谱
- D.当前帧的语音存在概率
答案:A。决策导向方法用上一帧增益乘后验信噪比与当前帧后验信噪比做加权混合,递归平滑地估计先验信噪比,目的是让增益不剧烈跳变。后验 SNR 由当前帧直接算出,不需要决策导向估计,C、D 也不是它的直接输出。
Q6. MMSE-STSA 方法对语音和噪声的 DFT 系数做什么假设?
- A.均匀分布与泊松分布
- B.复高斯分布假设← 正确答案
- C.指数分布与瑞利分布
- D.离散概率分布假设
答案:B。经典 MMSE-STSA 假设语音和噪声的 DFT 系数都是零均值复高斯分布,在这个假设下推导出含修正贝塞尔函数的最优增益。A、C、D 都不是该方法的理论前提。
Q7. 深度学习降噪中的 IRM 目标表示什么?
- A.语音能量占该时频点总能量的比例← 正确答案
- B.噪声能量占该时频点总能量的比例
- C.该时频点是否存在语音的二值标签
- D.该时频点增益的归一化频率响应
答案:A。IRM(理想比值掩蔽)定义为 |S|²/(|S|²+|N|²),即语音能量在语音加噪声总能量中的占比,取值 0 到 1。B 把分子换成噪声,C 是二值掩蔽(IBM)而非比值掩蔽,D 描述的是滤波器响应而非掩蔽目标。
Q8. 以下哪些属于经典且常用的降噪技术路线?
- A.谱减法与维纳滤波← 正确答案
- B.统计模型的 MMSE 估计← 正确答案
- C.深度学习掩蔽式增强← 正确答案
- D.语音数据的无损压缩编码
答案:ABC。谱减法、维纳滤波、MMSE 统计模型和深度学习掩蔽都是主流降噪路线。无损压缩编码属于数据压缩,目的不是分离语音与噪声,因此不选 D。
Q9. 关于 PESQ 与 STOI,下列说法正确的有?
- A.PESQ 侧重衡量语音质量← 正确答案
- B.STOI 侧重衡量语音可懂度← 正确答案
- C.二者都是主观听测方法
- D.二者都需要干净参考信号← 正确答案
答案:ABD。PESQ 衡量语音质量,STOI 衡量可懂度,两者都是把处理结果与干净参考比对后由算法算出的客观指标,不是请人来打分的主观听测,所以 C 错,A、B、D 正确。
Q10. 决策导向中先验 SNR 采用 α≈0.98 的递归平滑,主要目的是什么?
- A.平滑帧间增益抖动减少音乐噪声← 正确答案
- B.提高突发噪声的响应速度
- C.增强高频细节提升清晰度
- D.减小延迟满足实时性要求
答案:A。决策导向用很大的平滑系数把当前帧增益拉向历史趋势,避免增益逐帧剧烈跳动——增益抖动正是音乐噪声的来源之一,所以主要目的是减少音乐噪声。α≈0.98 恰恰会降低对突变的响应速度,B 说反了;C、D 与平滑目的无关。