G.711 a-law 及 u-law 简要算法过程

尊重原创,请勿转载 !   作者:图林根の烤肠

最近课上在讲a-law以及u-law的压缩算法,查了下wiki,英文版的资料算是比较全的了,国内的那xx百科相比之下简直就是是渣渣。

其中a-law的公式如下

g1

 u-lau公式如下图:
 g2
其中的u-law给出u值为255,a-law中的A赋值为87,6
由于课上老师只是介绍了u-law,在此简要说明一下算法。
公式中的x是输入信号取值为0到1,需要把x信号归一化,此处为除以A(最大波峰值),y为输出信号,具体算法可根据应为wiki给出的公式如上面所示,其中sgn(x)表示输入信号的符号(正值为1,负值为-1),matlab可用sign函数代替,然后进行采样量化,比如8bit线性采样,最后通过下图逆运算得到关于x的函数,从而算出通过u-law编码的文件。

g3

个人文章,不保证全部正确性,欢迎提出各类意见!
至于有人不禁要问,为什么这么折腾来回算一下,其实是因为,此算法同样适用于非均匀分布函数,一般的线性采样只能用于均匀分布信号,并且snr(信噪比)不会有太大的变化
参考资料:
Digital Signal Processing 2/ Advanced Digital Signal Processing Lecture 3
Gerald Schuller, TU Ilmenau
补充:最近复习看了篇文章,明白了一些,稍微补充一点知识
一般来说语音信号是符合拉普拉斯分布的,当我们使用线性量化的时候则会造成一些不必要的量化等级的浪费(这里还得请高人解答,不知道为什么),于是我们就把信号先进行放大,使其的pdf分布发生改变,使pdf变得更加的均匀,然后再进行量化反转,从而得到最终的信号。如下图所示:
左上角第一幅为原信号,右上角为companding后的信号
左下角为原信号的峰值分布(Amplitude Values),右下为扩展后的峰值分布,由此可以看出,小信号(峰值小)的变化要显著高于大信号的变化,从而使信号整体的pdf分布更加的均匀起来
g4
这样做的好处有两点:
1. 提高的信噪比snr,如下图所示
2. 降低了设备的需求,因为只是进行的一步简单的公式计算
g5
蓝色表示的是直接量化后得到的信噪比snr,红点为通过companding(信号扩展压缩)后然后得到的snr,明显可知要好于未经过扩展的原信号
但是a-lau和u-lau却不适合pdf变化非常剧烈的信号,这时候则需要其它更加优秀的算法,比如说Lloyds-Max和LBG算法。
参考资料:

Non-uniform Quantization : Companding , μ-Law and A-Law ;

Aravindan Joseph Benjamin

Digital Signal Processing Research Laboratory Ilmenau University of Technology
P. O. Box 100565, D-98684 Ilmenau, Germany Email: aravindan-joseph.benjamin(at)tu-ilmenau.de