Comp_Ir 计算冲激响应
前面已经介绍了如何将量化的lsp转成4组lpc系数,
得到量化后的lpc系数,相应的得到了逆向滤波器(这里称它为滤波器A吧).
这时要做的就是根据这些滤波器,在激励码本表里找出合适的激励源,
也就是对激励进行编码了,接下去的都是跟激励编码相关的.
比较各种语音压缩算法,在lpc分析这一阶段,基本是大同小异的,不同之处,在于对激励的编码算法
现在来看看g723的激励编码算法的总体是什么样子的.
g723的激励源由两部分组成,一部分是自适应激励,另一部分是伪随机的固定码本.
其中,自适应激励实际上是由固定码本反复迭代得到的.自适应激励源可以认为是过去解码的激励源
刚开始阶段,自适应激励自然都为零,这是激励全由固定码本激励源以一定的增益来贡献.
在第二帧开始,自然就有自适应激励源了(由第一帧的固定码本激励以一定的增益构成的)
这时就可以根据基音周期,在基期周期附近按照一定的规则搜索最佳的激励源(也就是连续的60历史解码的激励源)
将这个激励源与滤波器A的冲激相应进行卷积,得到的残余的信号,将这个信号做为目标向量,
进一步在固定码本激励源里搜索(依据均方差最小的原则)
g723还有一个高速激励的编码方式,在第二级激励编码时,采用的是多脉冲激励方式
相应的算法采用的不是最优解(计算量太大了),即先搜索出第一个最佳脉冲的位置与增益,然后再搜索第二个,
将残余的信号再进行固定码本激励搜索
总的来说,激励源的编码是两级的,分别体现的语音信号的时域相关性(自适应激励)以及随机性(固定码本激励/或者多脉冲激励)
当然,第一步我们得把滤波器的冲激响应求出来 Comp_Ir顾名思义,计算冲激响应
ok,现在进入枯燥的代码中吧
这个函数的其中的两个局部变量 FirDl IirDl,再做高通滤波时,对这两个变量的含义就不再陌生了
分别对应是有限冲激响应部分,与无限冲激响应部分 FirDl对应的是分子 IirDl对应的就是分母,读者
列一下滤波器的系统函数,即可一目了然了,比较让人烦恼的仍然是由于定点数运算,不得不引入的一些计算结果
缩放问题
首先,看到对单位冲激响应的定义,可以看出,这个冲激响应已经被扩大了2^26倍了
Acc0 = (Word32) 0x04000000L ;//lsc 扩大了2^26
接下来对子个帧的lpc分别计算冲激响应
相应的滤波器函数是由三部分组成的
首先是A(z)
这个就是由lpc系数组成的系统函数如下:
1
-----------------
10
1 - Σ a(j)*Z^(-j)
j=1
其中a(j)就是lpc系数
然后是共振峰感知加权
10
1 - Σ a(j)*(0.9*Z)^(-j)
j=1
---------------------
10
1 - Σ a(j)*(0.5*Z)^(-j)
j=1
最后是谐波噪声去除滤波器
1 - b *z^(-l) b和l在之前已经求出了
让冲激相应先激励第一个,然后再激励第二个,第三个
计算A(z)的冲激响应,然后用A(z)响应做为输入,计算共振峰感知加权的,最后是谐波噪声的
代码片段如下:
for ( j = 0 ; j < LpcOrder ; j ++ )
Acc0 = L_mac( Acc0, QntLpc[j], FirDl[j] ) ;//lsc QntLpc是扩大2^13,而FirDl是扩大2^12倍的,乘法本身高大2,相应刚好与Acc0为同一数量级
Acc1 = L_shl( Acc0, (Word16) 2 ) ;//lsc 这里变成了扩大了 2^28
这里的Acc1就是会被保存在FirDl数组里,因为它将作为共振峰感知加权的历史输入,
同时也是A(z)的历史输出(对A(z)来说,它实际是无限冲激响应部分)
接下计算共振峰感知加权部分
/* FIR part */
for ( j = 0 ; j < LpcOrder ; j ++ )
Acc0 = L_msu( Acc0, PerLpc[j], FirDl[j] ) ;//lsc FirDl成了输入, Acc0也是
Acc0 = L_shl( Acc0, (Word16) 1 ) ;
for ( j = LpcOrder-1 ; j > 0 ; j -- )//lsc 这里更新FirDl数组
FirDl[j] = FirDl[j-1] ;
FirDl[0] = round( Acc1 ) ; // lsc 扩大了 2^12(因为round是取出高16位,所以28-16=12)
/* Iir part */
for ( j = 0 ; j < LpcOrder ; j ++ )
Acc0 = L_mac( Acc0, PerLpc[LpcOrder+j], IirDl[j] ) ;
for ( j = LpcOrder-1 ; j > 0 ; j -- )
IirDl[j] = IirDl[j-1] ;
Acc0 = L_shl( Acc0, (Word16) 2 ) ;
IirDl[0] = round( Acc0 ) ;
Temp[PitchMax+i] = IirDl[0] ;
最后是谐波噪声去除,不详细说了,保留个延迟,然后做个减法
Sub_Ring 振铃减法,这个函数的目的是计算零输入响应
所谓的零输入响应
过去解码的激励会形成一些拖尾的输入,即无限冲激响应部分
因为我们看到 lpc的预测是这样的
y[n] = x[n] + a * y[n - 1] ... b*y[n-10],也就是说当前帧的最后几个输出,
会对下一帧产生影响,当然的编码时在将这些影响去除,也就是通过减去零输入响应来完成的
具体地说,说是保留上一帧的最后几个输出,然后对计算A(z),感知加权,谐波去噪的零输入响应
并将其扣除
先来看这两个全局变量(实际上是一个全局结构体里的两个域)
CodStat.RingFirDl
CodStat.RingIirDl
它们的含义与作用跟在计算冲激响应时是一样的
Sub_Ring函数大体和Comp_Ir相似,只是输入不是1而是0
并且相应的FirDl与IirDl是在之前帧里计算出来的(Upd_Ring完成这项工作)
在之后的循环中FirDl IirDl被相应地更新
参与计算三个滤波器与Comp_Ir相同
到此为止,可以看到下一个函数就是Find_Acbk,这个是正式开始进行激励编码相关的代码了,
笔者将在下一章分析
林绍川
2011.6.27 于杭州
分享到:
相关推荐
### 冲激响应与阶跃响应实验报告知识点详解 #### 一、实验目的 本实验旨在通过对RLC串联电路的阶跃响应与冲激响应进行观察和测量,深入理解电路元件参数变化对响应状态的影响,并掌握信号时域的测量方法。 #### 二...
实验一“阶跃响应与冲激响应”主要探讨了RLC串联电路在不同条件下的响应特性,特别是阶跃响应和冲激响应。该实验旨在理解电路元件参数如何影响响应状态,以及掌握信号时域的测量方法。实验使用的是Matlab R2020a软件...
在本Matlab课程设计中,我们将探讨如何利用冲激响应(Impulse Response)与卷积(Convolution)技术来实现声音的变换,这是一项在音频处理领域常见的技术应用。Matlab作为一种强大的数值计算和可视化环境,是进行...
如果有一个因果模拟传输函数 Ha(s),其对应的冲激响应是 ha(t),我们希望设计一个数字传输函数 G(z),它的冲激响应 g[n] 应满足以下关系: ha(t) → g[n],其中 (t) 是模拟时间,(nT) 是数字时间,且 T 为采样周期...
这种方法的核心思想是:如果有一个理想的模拟因果传递函数Ha(s),其对应的冲激响应为ha(t),那么我们希望得到的数字滤波器G(z)的冲激响应g[n]应该满足g[n] = ha(nT),其中T为采样周期。 在模拟信号分析中,我们使用...
冲激响应是信号处理和系统分析中的核心概念,尤其在通信工程、电子工程以及控制理论等领域有着广泛的应用。本文将详细解析冲激响应的概念、性质及其在不同领域中的作用。 冲激响应,又称为脉冲响应,是线性时不变...
模拟生成房间声学冲激响应(Room Impulse Response,RIR)的方法的实现源码。由 Allen 和 Berkley 于 1979年提出的 image 方法(也可称之为镜像声源模型)是在声学信号处理这个领域应用最广的方法。因此本文重点讨论...
信号与系统实验仿真系统的MATLAB实现-系统的冲激响应程序5.m 《信号与系统》实验仿真系统的MATLAB实现 程序的名字说明了程序的功能:)
信号与系统实验仿真系统的MATLAB实现-系统冲激响应和阶域响应的程序.m 《信号与系统》实验仿真系统的MATLAB实现 程序的名字说明了程序的功能:)
用MATLAB实现系统冲激响应,会零极点图,求幅频特性。
4. **仿真信号传输**:将发射信号与信道冲激响应相乘,模拟信号在信道中的传播,然后通过接收天线进行解码。 5. **性能评估**:通过计算误码率(BER)、符号误码率(SER)或其他性能指标,评估MIMO系统的性能,并...
然后,文章详细介绍了 MATLAB 中的实现方法,包括使用 filter 函数、conv 函数和 impz 函数来计算差分方程的解决方案和冲激响应。 在实验部分,本文提供了三个实验项目,分别使用 filter 函数、conv 函数和 impz ...
在信号处理领域,有限冲激响应(FIR)和无限冲激响应(IIR)滤波器是两种常见的数字滤波器类型,用于信号的滤波、整形和降噪等任务。MATLAB提供了设计和实现这两种滤波器的工具。下面我们将详细探讨这两种滤波器及其...
对于一个线性移不变系统,如果已知系统的冲激响应(即系统对单位冲激输入的响应),那么系统对任意输入信号的响应可以通过将输入信号与冲激响应进行卷积得到。卷积操作可以通过积分来实现,它具有交换性、加法的分配...
设计一个在0.45π处具有3dB截止角频率的一阶无限冲激响应低通滤波器和一阶无限冲激响应高通滤波器。用matlab计算并画出它们的增益响应,并用matlab证明两个滤波器是全通互补和功率互补的。涉及画图的频率范围[- π, ...
冲激响应不变法的基本思想是让数字滤波器的单位冲激响应与模拟滤波器在采样点上完全相同,从而使得数字滤波器能够模仿模拟滤波器的频域特性。这种方法在变换的过程中需要满足两个基本条件:一是变换前后的滤波器在...
冲激响应是信号处理与系统理论中的一个重要概念,它不仅有助于理解系统的动态行为,还是设计滤波器、分析系统稳定性的基础。通过对冲激响应的研究,我们可以更好地掌握信号处理的基本原理和技术,从而在实际应用中...
"实验1阶跃响应与冲激响应仿真设计" 本实验的主要目的是观察和测量 RLC 串联电路的阶跃响应与冲激响应的波形和有关参数,并研究其电路元件参数变化对响应状态的影响。同时,掌握有关信号时域的测量方法。 实验原理...
本教学资料的目的是为了帮助学生深入理解信号与系统课程中关于冲激响应和阶跃响应的核心概念和计算方法,为后续复杂的系统分析和设计打下坚实的基础。通过研究这些响应,学生能够更好地掌握线性时不变系统的特性,...
描述中提到的“超宽带信道模型的四种方案下的冲激响应源程序及其绘图”可能包含了四种不同的UWB信道模型的实现,每种模型都提供了相应的冲激响应计算和可视化。这可能涉及到不同的传播环境假设,比如室内、室外、...