实时音频编解码之五 噪声整形

Posted shichaog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实时音频编解码之五 噪声整形相关的知识,希望对你有一定的参考价值。

本文谢绝任何形式转载,谢谢。

1.4.5 噪声整形
因压缩比特率而带来的量化误差会导致规律的噪声产生,即使量化带来的噪声能量上远小于语音信号,但是由于人的听觉系统对规律性的噪声非常敏感,因而非常影响听觉体验,噪声整形的目的是增加量化后解码信号的信噪比,其目的是使得噪声变得随机(类似白噪声,不再是谐波噪声)而听起来更为舒适。噪声整形通过改变噪声谱形状,使得噪声功率在不太理想的频带中处于较低水平,在理想的频带中可以处于较高水平。


噪声整形是对量化误差能量谱的滤波技术,通常是去掉人耳敏感的频率,人耳对频率的敏感度见下图,或者完全分离信号和噪声带;

抖动是噪声整形的一种常用方法,通常对量化或者进一步量化的信号加抖动以将原始信号和量化噪声去相关,以减少谐波失真;
如果使用抖动,其最终频谱取决于它是添加在噪声整形器的反馈回路内部还是外部;
y [ n ] = x [ n ] + b e [ n − 1 ] + d i t h e r y[n]=x[n]+be[n-1]+dither y[n]=x[n]+be[n1]+dither
对16比特正弦信号加抖动之后的时域采样点构成的波形如下图,

其对应的频域如下图:

可以看到加抖动之后,谐波噪声被抖动带来的噪声极大的弱化了,48kHz采样750Hz信号,并且量化到4bit,无dither,无noise shaping,这一处理引入以采样点为64的周期性收入误差,在基频谐波上有超过40-dB的噪声

增加dither,无noise shaping,基频谐波上无40-dB的噪声,但整体噪声变大了

增加dither,增加noise shaping,在4kHz人耳较为敏感的频率处,噪声低于-80dB

其实现算法如下:


h o u t [ k ] = H . f i l t e r ( l a s t e r r o r ) h_out[k] = H.filter(last_error) hout[k]=H.filter(lasterror)
w a n t e d [ k ] = s [ k ] − h o u t [ k ] wanted[k] = s[k] - h_out[k] wanted[k]=s[k]hout[k]
l a s t e r r o r = q u a n t i z e d [ k ] − w a n t e d [ k ] last_error = quantized[k] - wanted[k] lasterror=quantized[k]wanted[k]

Opus编码器的噪声整形方法远比这个要复杂,但是通过这个简单的例子,可以知道噪声整形解决的问题以及其解决问题的思路。

以上是关于实时音频编解码之五 噪声整形的主要内容,如果未能解决你的问题,请参考以下文章

实时音频编解码之十三 Opus编码-SILK编码-噪声整形分析

实时音频编解码之十五 Opus编码-CELT编码

实时音频编解码之十五 Opus编码-CELT编码

实时音频编解码之四 LPC和LSF

实时音频编解码之十二Opus编码-SILK编码-基频估计

实时音频编解码之十二Opus编码-SILK编码-基频估计