g729源码分析-2-共振锋感知加权

2024-03-16 00:58

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

不同于g723固定系数的共振峰感知加权
g729的共振峰感知加权是自适应的.


perc_var 这个函数来对共振峰感加权进行估值


我们先看itu的文档 3.3节 的式30,
这是一个判断语音频谱是否平坦的一个条件.
因为人类语音的频谱有个特点,越高频的共振峰的能量会越弱.
而共振峰感知加权要注意这个现象,如果频谱倾斜了(高频共振峰能量弱),要加强加权系数


根据莱文森德宾递推公式:
k1=-R(1)/R(0)
k2 = (1-R(2)/R(0)) / (1-k1^2)


从itu的文档看出,对数面积比,实际上是反k1 与 k2扩展到 负无穷到正无穷上了


也就是对数面积比趋向于负无穷的时候,此时对应的 R(1)/R(0)是接近于 1的, 正无穷时 R(1)/R(0)是-1
即对数面积比系数越小,可以估计出高频分量越低, 对数面积比系数越大,高频分量就越高.


当条件1满足时,我们其实可以计算出 k1差不多为 -55/56 即 R(1)/R(0) = 55/56 即高频分量低
R(2)/R(0)其实对应着次高频分量,再来看k2,R(2)/R(0)大概可以由k2的取值推断出 R(2)/R(0)也是一个非常接近1的值,
即,次高频分量还是低的.(此时k2大约为3/5,由于分母极小,所以分子也不可能太大,推断于R(2)/R(0)是接近于1的值)


结合前一帧是平的,由于高频分量都低了,就可以推断出当前帧应该是倾斜了


同理可以推断于条件2是一个相反的过程,由倾斜,而高频分量高了,认为当前帧的频谱是平坦的
注:人类语音能量集中在前两个共振峰,后面的共振峰能量会依次降低,共振峰对听觉心理的影响最大,
所以感知加权要加强共振峰的强度与带宽
引入的感知加权.
我们可以因式分解成:


          1
 -----------------------------------------------------------------------
 (z^-1 + r*cos(b1) + i*r*sin(b1)) ... (z^-1 + r*cos(b10) + i*r*sin(b10))
我们将 z=(z/a)  0<a<1代入,看其中的一个因子
             1
  ------------------------------------
  ((z/a)^-1 + r*cos(b1) + i*r*sin(b1))
  
可化为
            1/a
 ------------------------------------------
   (z^-1 + (r/a)*cos(b1) + i*(r/a)*sin(b1))
将 z = e^jw代入,则整个分式的绝对值(对应频域的振幅)
             1/a
 ----------------------------
  1+(r/a)^2+ 2*(r/a)cos(w+b1)
我们画一下这个函数的图,观察a变化,引起的幅度变化,自然能得出a越小,共振峰带宽扩展,共振峰加强的结论,b1则表示共振峰的位置
对比723,729引入了感知加权自适应机制,即,两个共振峰的位置如果太接近了,带宽扩展有可能导致两个共振峰出现重合了
也就是最近的两个共振峰越接近,则带宽扩展的加权越低(即a越大)


以上就是分析出来的共振峰加权系数取值的一些推导依据,代码就相应简单了,基本上照本宣科
最终求得两个共振峰感知加权系数


得到加权系数后,对信号进行滤波,比较简单,不详述了
//lsc 处理两个子帧,分别对它们进行感知加权滤波
  Weight_Az(&A_t[0], gamma1[0], M, Ap1);
  Weight_Az(&A_t[0], gamma2[0], M, Ap2);
  Residu(Ap1, &speech[0], &wsp[0], L_SUBFR);//lsc 对应加权滤波器分子的滤波
  Syn_filt(Ap2, &wsp[0], &wsp[0], L_SUBFR, mem_w, 1);//对应加权滤波器分母的滤波


  Weight_Az(&A_t[MP1], gamma1[1], M, Ap1);
  Weight_Az(&A_t[MP1], gamma2[1], M, Ap2);
  Residu(Ap1, &speech[L_SUBFR], &wsp[L_SUBFR], L_SUBFR);//lsc 对应分子的

  Syn_filt(Ap2, &wsp[L_SUBFR], &wsp[L_SUBFR], L_SUBFR, mem_w, 1);//lsc 对应分子的

这篇关于g729源码分析-2-共振锋感知加权的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

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

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

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