shichaog
这个作者很懒,什么都没留下…
展开
-
语音方向总结-给新人
一张图总结下语音方向、算法、以及开源工程,给需要找工作以及想深入研究方向同学一张思维图。原创 2022-08-12 13:22:35 · 1079 阅读 · 0 评论 -
WebRTC模块化设计思想之编解码
编码器的种类很多,有Opus,G711,Isac,PcmA,G722等,这些都是第三方的库或者开源软件,为了和第三方的隔离,只需第三方提供的接口文件以及相应的库就行,并不需要编译第三方库源码,类似上面的方法,封装一层;由上可以看出,只要AudioCodingModule定义好,则TwoWayCommunication这个类所属的模块开发者就可以开发编译调试自己的模块,而不必关心AudioCodingModuleImpl是否实现了对应的方法,只在双方联调的时候才需要对方正确实现该接口类中的方法。...原创 2022-08-12 19:15:00 · 757 阅读 · 0 评论 -
实时音频编解码之十九 基于AI的语音编码(LPCNet)
本文谢绝任何形式转载,谢谢。自2012年Opus编码器推出以来经过近10年,2020年的新冠大流行使得实时音视频会议和虚拟增强会议需求进一步增加,Opus是这类场景中非常优秀的音频编码器,但AI技术可以进一步提升音视频效果。SatinSatin是微软于2021年2月官宣的一款基于AI的语音编码器,其目标是替代Silk编码器,Silk是Skype使用的语音编码器,Opus中LPC部分也是基于Silk编码器,Satin的特性如下:从6kbps开始可以支持超带宽语音从17kbps开始可以支持全带宽语音原创 2022-05-15 12:26:10 · 1537 阅读 · 0 评论 -
实时音频编解码之十八 Opus解码 CELT解码
本文谢绝任何形式转载,谢谢。5.3 CELT解码Opus的CELT层使用窗长重叠为5ms~22.5ms的改进离散余弦变换 (Modified Discrete Cosine Transform,MDCT)算法,MDCT谱被按照人耳听觉灵敏度划分的Bark子带分解,通常CELT层有21个子带,在Hybird模式,前17个子带(到8kHz)由SILK层编解码,各频带包含的MDCT频点数量是不同的,最少就一个频点,最多176个频点,如表5-19所示。每个频带增益(能量)和频谱形状是分开编码的,这种独立编码频带原创 2022-05-15 11:40:52 · 1204 阅读 · 0 评论 -
实时音频编解码之十七 Opus解码 SILK解码
本文谢绝任何形式转载,谢谢。5.2 Silk解码流程解码器线性预测层主要使用长短时预测合成滤波器对激励信号滤波实现,线性预测层内部的工作带宽为NB、MB以及WB,对于SWB以及FB的混合编码工作模式,线性预测层依然工作于WB带宽下,经过区间解码之后解码出区间编码的符号,根据这些符号解析得到SILK/CELT编码若干参数,对于语音帧,SILK编码的内容包括参数和激励,索引指是参数矢量化后码本的索引,码本的索引最终会映射为编码参数,如LTP,LSF参数等,SILK解码的流程如下,通过区间解码器解码之后获取信原创 2022-05-15 10:21:32 · 2924 阅读 · 0 评论 -
实时音频编解码之十五 Opus编码-CELT编码
本文谢绝任何形式转载,谢谢。4.3.1 基频预滤波对预加重之后信号预滤波,其和解码器的后滤波相反,基频周期搜索应根据以下标准优化:1.连续性,对于连续帧,基频周期通常不会突变;2.避免基频倍数,当使用的周期是实际周期的倍数时,后滤波器失去了大部分降低噪声的能力。4.3.2 带宽和归一化最小帧长为2.5ms,其他为2.5ms倍数,这些帧信号经过MDCT后输出分为多个频带,这些频带和耳朵的听觉灵敏度相匹配,编码器计算各个频带的,各频带能量使用为量化能量的均方根归一化,能量的计算和归一化分别实现于om原创 2022-05-15 09:06:38 · 1093 阅读 · 1 评论 -
实时音频编解码之十四 Opus编码-SILK编码-长时预测
本文谢绝任何形式转载,谢谢。4.1.12 线性预测系数计算线性预测分为语音和非语音两种情况,该模块的输入是pitch估计模块白化之后的信号,对于语音帧,白化后的信号依然含有较强的pitch特征,因而为了在相同的比特率下获得更高的编码质量需对信号进一步白化,这里的进一步白化的输入并不是zpitch估计模块白化之后的信号,这是为了和解码端的过程一致(解码端过程是激励经过量化的LTP滤波,再经过量化的LPC滤波得到编码信号),所以这里先使用量化的LTP系数白化信号,再使用量化的LPC系数白化信号,这样保持编码原创 2022-05-15 08:59:09 · 839 阅读 · 0 评论 -
实时音频编解码之十三 Opus编码-SILK编码-噪声整形分析
本文谢绝任何形式转载,谢谢。4.1.11 噪声整形分析噪声整形的目的和原理性介绍见1.4.5小节,噪声整形是对量化误差能量谱的滤波技术,通常是去掉人耳敏感的频率,或者完全分离信号和噪声带;噪声整形量化利用了人耳的听觉特点,通常采用编码器最小化感知加权听觉误差以及解码器后滤波的方法抑制重构信号中相对于语音信号较高的量化噪声,Opus编码器通对输入和重构信号使用不同的权重滤波的方法将这两个部分都放在了编码侧,如下图所示,将这两部分放在编码侧并没有简单化解码侧,这使得编码侧可以使用任意简单或复杂感知模型同步或原创 2022-05-14 10:31:42 · 1884 阅读 · 0 评论 -
实时音频编解码之十二Opus编码-SILK编码-基频估计
本文谢绝任何形式转载,谢谢。4.1.9 silk_encode_frame_FLP在调用该API函数之前,其原始数据会存放在&psEnc->state_Fxx[ 0 ].sCmn.inputBuf指向的地址中,4.1.6小节中silk_memcpy函数拷贝short类型输入,该函数调用若干核心函数完成声道参数和激励信号的编码压缩,调用层次结构清晰,后文若干小节依次分析核心函数。//encode_frame_FLP.c 84 opus_int silk_encode_frame_FLP(原创 2022-05-14 10:18:04 · 1969 阅读 · 0 评论 -
实时音频编解码之十一Opus编码
本文谢绝任何形式转载,谢谢。第四章 Opus编码Opus是较为成熟的开源商用语音编解码器,其编码质量高且无版权使用费,因WebRTC标准中规定要支持该音频编码器,所以当今各大浏览器都支持Opus编码器。Opus有很多突出的优点,如延迟低、编码范围宽、输出比特率可控等。Opus常用于实时通信和实时流媒体等程序中,通常伴随视频流,由于人耳对声音更为敏感,所以常以音频流RTP时间戳为基准同步视频流,音视频同步并不再本书范畴。Opus编码比特率范围从窄带的6kbps到高品质立体声的510kbps,Opus使用原创 2022-05-14 09:40:02 · 8160 阅读 · 2 评论 -
实时音频编解码之十 CELT编码器
本文谢绝任何形式转载,谢谢。第三章 CELT编码器CELT基于音频信号谱包络是声音感知的最重要部分,CELT通过显式编码一组近似于听觉系统临界频带的频带的能量来保持这一包络。Bark子带就是人耳对不同频率成份听觉灵敏度(基于心理声学)的一种子带划分方法。相对于LPC编码,CELT编码的延迟短,编码带宽宽,因而CELT编码器常用于音乐网络场景。CELT基于MDCT频域编码方法,其编码语音的时频信息,这种编码方法对于长时稳态类型信号(如各类乐器声)非常适用。音频信号通常是短时平稳的,因而常采用分段加窗方原创 2022-05-14 09:29:40 · 783 阅读 · 0 评论 -
实时音频编解码之九 CELP编码
本文谢绝任何形式转载,谢谢。第二章CELP(code-excited linear prediction)LP编码方法是基于声道滤波模型的建模,激励源是声门或噪声,其有两个限制,其一输入激励信号为白噪声,其二严格区分语音和非语音段,只对语音段使用LPC算法,CELP是基于人发声的源-激励模型,和基于LP的编码相比在这两个方面都有改进,构建激励信号码本使激励信号不再是白噪声,使用长短时估计方法而不再严格区分语音/非语音,长时预测滤波器是针对基频而言的,它只是一个具有长延迟的线性预测器CELP是主流语音编码原创 2022-05-14 09:17:38 · 1712 阅读 · 1 评论 -
实时音频编解码之八 频带扩展
本文谢绝任何形式转载,谢谢。1.4.8 频带扩展在线性预测应用中,由于极点过于靠近单位圆,合成滤波器可能处于临界稳定的状态,在定点实现中这一问题更加严重,定点的量化和计算中的精度损失可能使得临界稳定的滤波器变得不稳定(极点位于单位圆外),这会导致合成的信号偶尔有杂音。可以通过调节LPC系数改善滤波器稳定性:anewi=γiai;i=1,2,⋯ ,Ma_{new_i}=\gamma^ia_i;i=1,2,\cdots,Manewi=γiai;i=1,2,⋯,M其中0<γ<10<原创 2022-05-14 08:51:11 · 572 阅读 · 0 评论 -
实时音频编解码之七 预加重
本文谢绝任何形式转载,谢谢。1.4.7 预加重由于频率高的语音成份比频率低的成份经唇辐射以及空气传播衰减多,因而高频幅度相对较低,这增加了整个频带语音的动态范围,这就需要LP分析使用高精度以保留高频成份信息。更严重的是,当高频成份的特征过小时,相关矩阵可能是奇异的而导致无法求解,这通过使用预加重方法解决。H(z)=1−αz−1H(z)=1-\alpha z^{-1}H(z)=1−αz−1上述高通滤波的作用是提升高频段成份,其时域表达式为:y[n]=x[n]−αx[n−1]y[n]=x[n]-\al原创 2022-05-14 08:47:39 · 469 阅读 · 0 评论 -
实时音频编解码之六 LTP长时预测
本文谢绝任何形式转载,谢谢。1.4.6 LTPLPC方法的压缩率比较高,但是音质不高,只用LPC方法的编解码语音具有“机器音”的特征,这是由于LPC系数阶数通常取10~20点,这一长度包含了共振峰信息但并不足以囊括所有的基频周期,且LPC对语音和非语音两者的混合处理的并不好,更高的LPC阶数可以减小解码端预测误差提高语言质量,但是编码端需要更多的算力和编码比特位,LTP目的是获取语音信号采样点之间的基音周期关系,LTP预测的输入为ex[n]e_x[n]ex[n]输出为e[n]e[n]e[n],长短时预原创 2022-05-14 08:45:54 · 806 阅读 · 0 评论 -
实时音频编解码之五 噪声整形
本文谢绝任何形式转载,谢谢。1.4.5 噪声整形因压缩比特率而带来的量化误差会导致规律的噪声产生,即使量化带来的噪声能量上远小于语音信号,但是由于人的听觉系统对规律性的噪声非常敏感,因而非常影响听觉体验,噪声整形的目的是增加量化后解码信号的信噪比,其目的是使得噪声变得随机(类似白噪声,不再是谐波噪声)而听起来更为舒适。噪声整形通过改变噪声谱形状,使得噪声功率在不太理想的频带中处于较低水平,在理想的频带中可以处于较高水平。噪声整形是对量化误差能量谱的滤波技术,通常是去掉人耳敏感的频率,人耳对频率的敏原创 2022-05-14 08:36:36 · 1627 阅读 · 0 评论 -
实时音频编解码之四 LPC和LSF
本文谢绝任何形式转载,谢谢。1.5.1 基频语音信号的基频(pitch)通常用F0F0F0或F0F_0F0表示,基频是物理意义上的概念,人耳听到的基频称为基音,基音反应的是人耳对基频的感知。对于低比特率的编码器,基频的准确性对于合成的语音质量是至关重要的,基频反映的是准静态语音信号的周期性,这一周期性和声带的震动频率相关,基频是声带短时平均震动次数,由于基频是由人的器官发声形成而不是器件的震动产生,因此存在显著的变动,工程上将周期变动和幅度的变用抖动(jitter)和振幅微扰(shimmer)表示原创 2022-05-14 08:22:57 · 1597 阅读 · 0 评论 -
实时音频编解码之三 多速率信号处理
本文谢绝任何形式转载,谢谢。1.4 语音信号处理1.4.1 多速率信号处理多速率信号处理 多速率数字信号处理和滤波器组在通讯和语音处理方面有诸多的应用,在编码器和语音增强算法里经常可以看到分析滤波器组合合成滤波器组。 对于一个时域信号,采样的点数越多,需要的存储空间就越多,在后续的滤波中计算量也越大,所以如果在信号变换缓慢的地方使用低。1.4.1.1 几种频率的关系频率是单位时间内完成周期性变化的次数,是描述周期运动频繁程度的量,采样频率fsfsfs等于每秒对时域信号采样的点数,由奈奎斯特定理可以原创 2022-05-13 22:21:01 · 690 阅读 · 0 评论 -
实时音频编解码之二编码学数学知识
本文谢绝任何形式转载,谢谢。1.3 编码数学算法1.3.1 定点和浮点编码的一些参数是经过定标和量化的,然后再将其送入区间编码器进一步压缩数据量,为了降低执行编解码的内存和算力要求,Opus编码器中很多地方使用了Q定标方式将浮点数转化为定点数,其使用了Q15、Q8等计数方式,这里以Q15为例说明定标的过程:Qx.y,其中x表示整数位数,y表示小数位数,如Q15.0,浮点数(x)转换为定点数(xq):xq=(int)x∗2Qxq=(int)x* 2^Qxq=(int)x∗2Q,定点数(xq)转换为浮原创 2022-05-13 21:38:12 · 794 阅读 · 0 评论 -
实时音频编解码之一发声和听觉机理
交互式实时音频编码器之发声机理原创 2022-05-13 21:15:44 · 1064 阅读 · 6 评论