一段会议室录音,空调声和投影仪风扇声铺在底层。你把降噪强度拉高,底噪确实干净了,可发言人的声音也跟着发闷,句尾的轻声字直接没了,整句听起来像被掐掉了两端。
换一款号称用深度学习的工具,底噪是留下了,人声却在某些字上「一闪一闪」地发虚,像时有时无。同样是「降噪把人声削了」,两个工具的坏法却完全不同——这不是调参没调好,而是两套算法在根本判断上就走岔了。
底层原理:谱减法与掩码估计
谱减法(Spectral Subtraction)是经典路线。它先找一段只有噪声的片段(比如录音开头的空白),算出噪声在每条频率上的功率谱,然后在全程里把这条噪声谱减掉。它的判决是「逐频率的能量相减」,一句话写出来就是:|S(ω)| = |X(ω)| − |N(ω)|。
掩码估计(mask estimation)是近十年主流的路线,深度学习模型走的正是这条。它不直接减能量,而是在时频平面上给每一格算一个 0 到 1 之间的掩码值,表示这一格有多大比例归人声;掩码乘以原信号,就得到估计的人声。它的判决是「逐格的归属比例」。
两条路线解的是同一个问题,但一个做减法、一个做乘法,一个在频率轴上判断、一个在时频格上判断。这个底层差异,直接导出下面三个具体分歧。
三个分歧
分歧一:噪声是一整条谱,还是一格格概率
谱减法的前提是「噪声平稳」——它的功率谱在整段里基本不变,一条谱就能代表全程。空调、风扇、电流这类稳态噪声确实如此,所以谱减法处理得干净利落。但真实噪声常常不平稳:翻页声、椅子挪动、远处的说话声,功率谱每一秒都不同。拿一条固定的谱去减变化中的噪声,减多了削人声、减少了留残响,两头不讨好。
掩码估计不依赖「一条谱」,它逐格重新判断,理论上能跟上非平稳噪声。代价是它需要训练数据见过类似噪声;遇到训练分布之外的噪声(比如某种没见过的乐器串音),它会按「最像什么」硬分,同样误伤。
底层分歧在于:谱减法假设噪声是一个可以整体描述的「对象」,掩码估计把噪声看成每一格待表决的「概率」。前者简洁但不灵活,后者灵活但依赖先验。
分歧二:边界是硬切,还是 0.5 附近的摇摆
这是听感差异最大的一处。
谱减法在能量相减后,界线附近的频率会出现「这次减成负的、下次减成正的」抖动;减成负值再截断为零,就留下随机分布的短促音调——行话叫音乐噪声(musical noise),听起来像一串水滴声,比原噪声还烦人。
掩码估计输出的是连续值,本该更平滑。但在人声和噪声能量接近的过渡频段,模型没把握,掩码值会在 0.5 上下反复横跳:这一帧判 0.6(留),下一帧判 0.4(压),再下一帧又跳回来。映射到听感上,就是某些音节「一闪一闪」地发虚、时有时无——这正是深度降噪有时带「电子味」的来源。它和音乐噪声是两种不同的听感,根源却是同一个:边界判定不稳。
缓解手段是让掩码输出更平滑,或对连续多帧做判决平均。代价是会牺牲一点瞬态响应,快速变化的辅音可能被抹平。
分歧三:幅度和相位,到底丢了谁
两代方法有一个共同的短板:都只处理幅度谱,相位直接沿用原始带噪信号的相位。
这不是偷懒,是无奈。人耳对相位不敏感,工程上默认「相位估计不准,不如直接用原始的」。但相位并不是完全无关:当幅度被大幅改动之后,原有的相位和新幅度拼在一起,会形成一个两边都不像的短时信号,重建回来就有细微的时域失真,表现就是人声「发虚、发飘」,少了该有的实体感——尤其在被人为压过的频段上。
掩码估计在这点上也没好到哪去:掩码越接近 0.5,对幅度的改动越「半吊子」,相位与幅度越不匹配,发虚越明显。所以你会观察到,被压得最狠的那些频段,往往正是听感最「空」的地方。
落地方案:音频降噪对症下药
把上面的分歧落到操作上,路径其实很清楚。
第一步,判断噪声类型:稳态还是非平稳。稳态噪声用一次谱减式处理就够;非平稳的,沿时间轴分段处理比在频率轴上一刀切更有效,最好一段一段调。
第二步,分档来,别一把梭。先用小压制量跑一遍,听人声是否完好,不行再加一档。如果素材需要保留语音细节,网页版音频处理工具把本地文件拖进去处理即可。
第三步,A/B 验证。导出前后各听一遍并做增益对齐,重点核对轻声字和齿音。这一遍能拦住绝大多数「压过头」。
浏览器里直接打开就能用,不用注册、不用装软件,处理完的文件 24 小时后自动删除。
收尾
降噪的每一次调整,本质上都是在「留噪声」和「削人声」之间挪一条界线。搞清楚你用的算法在哪一处判断,比反复试着拉强度更能对症。看清分歧落在哪里,就知道该往哪个方向调。