G711编码原理

来源:互联网 发布:什么淘宝炒作 编辑:程序博客网 时间:2024/06/07 12:03

    在正常的语音通话中,信号幅值的分布并不均匀,小信号出现的概率往往大于大信号出现的概率。G.711正是利用语音信号的这种特性采用非均匀量化编码。在量化的时候可以让量化区间在小信号的时候取较小,在大信号的时候取较大,这样就能有效提高量化的信噪比

     首先将输入信号的幅度归一化便于分析,然后将信号分成不均匀的8个段落,每个段落长度基本以2倍的递增。每一段又再分成16份,每一份都代表一个量化级别。这可以看出G711对小信号的量化级别达到1/2048。因为人耳对小信号的敏感度远远高于大信号,这样量化更符合语音通信。

      G711编码分a率和u率,将16bit(实际是13bit,存储为16)的数据压缩为8bit,压缩比为2。项目中采用的是a率,又称13折线法。之前说过将输入信号分八段,只考虑的是正极性信号,而将负极性信号一起考虑时,接近原点的四段基本上斜率是一致的,看成一段,加起来刚好是13条折线。


    相关的G711算法源码网上都很多,因为G711的专利早已过期,因此属于共享资源了。在这只说下我理解的编码代码思路:

 程序解析,首先判断正负极性,为正最高位为1,为负则最高位为0;根据输入信号再判断段落号,最后求段内量化值,组成一个8bit的数输出。

原创粉丝点击