`
touchinsert
  • 浏览: 1315937 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

g723源码详细分析(三) lsp量化

 
阅读更多

4 lsp系数量化

现在来分析这个

10 lsp系数已经计算出来了,由于lsp的性质,可以将它们分成若干段,分别量化

它们将会被分成 3,3,4这三个分矢量

每个矢量都会有一个256的码本表(大概是这么多的,可以直接计算一下那个数组的大小)

Lsp_Qnt 这个函数,执行lsp量化的过程,会形成一个lsp三个分矢量在码本表里的下标索引

首先我们看到每个lsp系数被进行了加权

权值就是与相邻lsp距离大的那个值的倒数,也就是说,一个lsp系数如果位置有点"偏",那么

它在量化中的比重就小了

代码片段,这里就不列出计算距离的那一部分了

/* Invert the differences */ //lsc权值是距离的倒数

//lsc 为什么选用0x20,这是因为div_s要求被除数一定要小于除数,而0x20是一定满足这个条件的,这导致本应用0x80表示

1,最后的结果是扩大2^13次方

Tmp0 = (Word16) 0x0020 ;

for ( i = 0 ; i < LpcOrder ; i ++ ) {

if ( Wvect[i] > Tmp0 )

Wvect[i] = div_s( Tmp0, Wvect[i] ) ;

else

Wvect[i] = MAX_16 ;

}

注意取倒数的Tmp0 =0x0020,这个值选得是有依据的,保证itu的除法不出错

然后对权值进行归一化

去除直流分量,这是由于itu采用的是定点数,所以目标向量的值不宜过大,去除直流分量后,从

直流分量的定义,可以看出来,大概会在+-20之间

*/ //去除直流分量 lsp参数尽量减小,使码本里的值不会太大,减少计算的bit位(这可以从码本里的值看出来)

for ( i = 0 ; i < LpcOrder ; i ++ ) {

CurrLsp[i] = sub( CurrLsp[i], LspDcTable[i] ) ;

PrevLsp[i] = sub( PrevLsp[i], LspDcTable[i] ) ;

}

这里考虑到lsp的相关性,还应扣减之前lsp的值的12/32,进一步减小目标向量值的大小

*/ // 12/32将以前的lsp进行衰减,量化差值

for ( i = 0 ; i < LpcOrder ; i ++ ) {

Tmp0 = mult_r( PrevLsp[i], (Word16) LspPrd0 ) ;

CurrLsp[i] = sub( CurrLsp[i], Tmp0 ) ;

}

LspPrd0 就是12/32,即它是扩大了32767倍的这是由于mult_r缩小计算后的值,所以预先扩大12/32

在码本表里搜索,采用的方式是欧式距离最短的那个码本向量的下标,做为量化的结果(当然,要乘上权值后搜索),

代码片段

/*

g723里的公式,经过推演实际上为 (E - Eb)^2 * W E即为去除直流分量的,并且做了预测差值的项,即标准中的 en

(3.4) ,于是在 Lsp_Svq里量化时,直接计算 Eb为码本里的值

只需要计算 w(2 Eb * E - Eb^2)的最大值即可,因为 E^2是固定的,从这里看出w的扩大倍数,对计算结果无影响

*/

return Lsp_Svq( CurrLsp, Wvect ) ;

Lsp_Svq 这个就是搜索欧式距离最小的那个码本向量 search vector quat(呵呵,看函数名应该是这个意思)

注意,并没有完整地计算欧式距离,因为E^2是固定的,只需要计算w(2 Eb * E - Eb^2)最大即可,

推导

w(E^2 - 2 Eb * E + Eb^2),本应计算此式的最小值,因为E^2不变,所以只需计算w(2 Eb * E - Eb^2)最大

代码片段较为简单,此处不列举了

至此,完成了声道参数的编码过程.接下来,就是要对激励进行编码了(也就是逆滤波后的残差信号)

待续....

林绍川

2011.5.15 于杭州

分享到:
评论

相关推荐

    语音编码中LSP量化文章

    文件“Multi Switched Split Vector Quantizer.pdf”可能详细介绍了多切换分段矢量量化技术。这种技术通过动态地选择最佳的子码书,根据输入信号的不同部分,来进一步优化量化效果。这样可以适应语音的动态变化,...

    E工具箱 通用函数_LSP_源码_通用_

    5. **源码阅读与分析**:如何阅读和理解Lisp源码,识别函数定义、调用和参数处理。学习如何调试和修改现有代码以适应特定需求。 6. **LSP扩展开发**:如果打算使用这些通用函数来构建自己的LSP服务器,需要掌握如何...

    贱人工具箱源码汇总.lsp

    贱人工具箱源码汇总

    快速建块.lsp 源码

    快速建块 源码 快速建块 源码 快速建块 源码 快速建块 源码 快速建块 源码 快速建块 源码 快速建块 源码

    lisp源码_GetFilesV1-6.lsp_lisp插件源码_lisp插件源码_lisp源码_分享收集的lisp源码_

    自行研究学习。分享个早期搜集学习的lisp源码

    lsp分析方法

    标题中的“lsp分析方法”指的是“Local Synchronization Pattern(局部同步模式)”分析方法,这是一种在生物节律研究中广泛应用的技术。生物节律是指生物体内存在的自然周期性变化,如24小时的昼夜节律、月度的潮汐...

    G.723.1语音编码器的实现与应用

    ### G.723.1语音编码器的实现与应用 #### 一、引言 随着互联网技术在全球范围内的快速发展,特别是Internet和Intranet(企业内部互联网)的普及,分组语音技术(Packet Speech Switching)变得越来越重要。为了...

    某CAD结构插件源代码 LSP源代码

    本文将深入探讨“某CAD结构插件”的源代码,特别是LSP(AutoLISP)源代码,这是一种广泛用于AutoCAD中的编程语言。 LSP(AutoLISP)是基于LISP语言的一个方言,专为AutoCAD设计,使得用户能够创建自定义命令、脚本...

    边长注记LSP源码.lsp

    CAD边长标注插件

    视口比例.lsp 源码

    创建与更改视口比例-源码! 创建与更改视口比例-源码! 创建与更改视口比例-源码! 创建与更改视口比例-源码!

    LSP分层服务提供程序

    源码的分析和理解对于学习LSP的工作原理以及如何定制自己的LSP服务至关重要。 2. **LSP安装程序源码**:LSP服务的安装通常需要注册DLL到系统中,并将服务设置为网络堆栈的一部分。这个安装程序源码会展示如何正确地...

    天正建筑源码20110714

    天正建筑源码20110714 lisp文件,源码公开, 天正建筑源码20110714 lisp文件,源码公开, 天正建筑源码20110714 lisp文件,源码公开, 天正建筑源码20110714 lisp文件,源码公开, 天正建筑源码20110714 lisp文件,...

    非常好用(旋转复制)CAD插件重要的是lsp源码

    非常好用(旋转复制)CAD插件重要的是lsp源码,用过的都说非常好。不信你就下载来用。

    LSP实现挟持网络

    LSP实现挟持网络 lsp 网络挟持 浏览器挟持

    zbbz.LSP.txt

    本文将对一个名为“zbbz.LSP.txt”的LISP程序进行深入分析,该程序旨在实现一键坐标标注功能,不仅支持不同版本的CAD软件,而且不受操作系统版本限制。通过快捷键`zbbz`即可快速启动,帮助用户轻松完成坐标标注任务...

    lsp集合学习专用lsp集合学习专用

    lsp集合学习专用lsp集合学习专用lsp集合学习专用

    cad经典LSP文件

    cad经典LSP文件,各种应用实例 如果您使用 AutoCAD,下面的内容对您一定有帮助。在某些方面能大大提高 您的工作效率。下面的程序均以源程序方式给出,您可以使用、参考、修改它。 bg.lsp --- 表格自动生成 asc.lsp -...

    Lsp最好的入门示例.rar_LSP WSPStartup_Lsp最好的入门示例_lsp 拦截_lsp文件范本_lsp编程

    LSP(Language Server Protocol)是一种通信协议,它允许开发工具与语言服务器进行交互,以提供丰富的代码智能感知功能,如自动补全、错误检查、跳转定义等。这个压缩包"**Lsp最好的入门示例.rar**"显然是为了帮助...

    KomodiaLSP_LSP_winlsp_源码.zip

    最后,考虑到Komodia是一家专注于网络监控和安全的公司,这个LSP源码很可能包含了一些安全相关的功能,比如数据包的深度检测(Deep Packet Inspection, DPI)、流量分析或者恶意软件检测等。这些功能的实现通常需要...

Global site tag (gtag.js) - Google Analytics