g729源码分析-6-固定码本搜索

2024-03-16 00:58

本文主要是介绍g729源码分析-6-固定码本搜索,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

g729自适应激励部分在基音周期中分析了.


g729固定码本搜索和g723极其类似,相应的算法可以参考g723的算法.
但作为编码的一个重要环节,又不得不提一下.
考虑到笔者那已经少得可怜的脑细胞,就一笔带过吧.


首先有这么一行:
    gain_pit = G_pitch(xn, y1, g_coeff, L_SUBFR);


gain_pit 其实是自适应码本增益的一个估值(自适应码本的增益会在后继章节接着讲)
利用这个估值,得到固定码本的搜索目标信号


这个估值的计算公式是这样的:
              39
              Σ  x[n]y[n]
             n=0
gain_pit = ------------------
              39
              Σ  x[n]y[n]
             n=0
        
x[n]序列,就是代码中的目标语音信号xn
y[n]序列,就是代码中的y1数组,它是h1与综合滤波器卷积形成的


G_pitch 不但完成了这个估值计算,还计算了一些后继增益量化时会用到的一些项
保存在g_coeff,这些会在后继章节分析(大体也是求偏导之类的)


有了这个估值 gain_pit,就可以从目标语音信号xn中扣除自适应激励成份,
而得到固定码本的目标向量,
代码片段如下:
    /* xn2[i]   = xn[i] - y1[i] * gain_pit  */
//lsc 扣除自适应激励,搜索固定码本
    for (i = 0; i < L_SUBFR; i++)
    {
      L_temp = L_mult(y1[i], gain_pit);
      L_temp = L_shl(L_temp, 1);               /* gain_pit in Q14 */
      xn2[i] = sub(xn[i], extract_h(L_temp));
    }
很简单,就是做一个卷积,然后从xn中扣除
目标向量保存在xn2数组里头.


然后是一个看不懂的函数名 ACELP_Codebook
这个函数就是在做固定码本搜索了(g729没有可选项,不做多脉冲激励搜索)
这个函数和g723的ACELP_LBC_code函数算法是一模一样的.
为了节约网络流量,以及csdn的存储空间,以及笔者那少量可怜的脑细胞,不分析了.


有兴趣的读者可以参考笔者之前写g723关于这部分算法的文章:
http://blog.csdn.net/lsccsl/article/details/6842514




接下去的内容稍微做一个前赡介绍,
g729接下来就是做激励编码(自适应激励与固定码本激励),用的方法如前所述.
能量误差最小,求偏导.

这篇关于g729源码分析-6-固定码本搜索的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/813828

相关文章

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle

MySQL更新某个字段拼接固定字符串的实现

《MySQL更新某个字段拼接固定字符串的实现》在MySQL中,我们经常需要对数据库中的某个字段进行更新操作,本文就来介绍一下MySQL更新某个字段拼接固定字符串的实现,感兴趣的可以了解一下... 目录1. 查看字段当前值2. 更新字段拼接固定字符串3. 验证更新结果mysql更新某个字段拼接固定字符串 -

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序