《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 设计应用 > LPC与LSF系数转换的FPGA实现
LPC与LSF系数转换的FPGA实现
2014年微型机与应用第13期
张 俏,杨 骁,汤 炜
华侨大学 信息科学与工程学院,福建 厦门
摘要: 首先根据切比雪夫多项式求根法对LPC系数到LSF系数转换过程进行分析与推导,并给出了根据已知的LSF系数进行逆推求LPC系数迭代算法。然后,借助DDS算法原理实现查找表搜索求根,并在FPGA上实现了LSF系数到LPC系数转换。最后,给出了结论和分析。
Abstract:
Key words :

  摘  要: 首先根据切比雪夫多项式求根法对LPC系数到LSF系数转换过程进行分析与推导,并给出了根据已知的LSF系数进行逆推求LPC系数迭代算法。然后,借助DDS算法原理实现查找表搜索求根,并在FPGA上实现了LSF系数到LPC系数转换。最后,给出了结论和分析。

  关键词线性预测系数线谱频率;切比雪夫多项式;FPGA;DDS

  线性预测法(LPC)成功地应用于语音信号处理的各个方面,在语音参数的估计中也被广泛地应用,如基音周期、共振峰频率和谱特征分析等。线性预测的基本思想是:由于语音信号之间存在相关性的特点,可以用过去若干个语音采样值或它们的线性组合近似表示当前语音采样值。在LPC分析中,最普遍的方法是使用线谱频率(LSF)表示LPC参量[1]。LSF是频域参数,具有良好的量化特性和内插特性,小系数的误差引起滤波器的局部误差,构成的合成滤波器有较好的稳定性[2]。10阶的LPC系数的LSF参数成功地应用在低速率语音编码器中,如混合激励线性预测(MELP)声码器。近几年,在语音信号处理中,LSF参数研究一直是热点,参考文献[3-4]对LSF参数量化方法进行分析与仿真,但由LPC系数与LSF系数相互转换的研究少之又少。

  伴随语音技术的不断发展,对语音信号数字化处理的实时性要求越发严格,专用的语音信号处理芯片能满足语音信号实时性的要求,LPC与LSF转换是专用语音处理芯片的关键模块之一。MELP算法语音编码过程中,首先,把经过带宽扩展后的线性预测系数转为LSF系数;其次,LSF参数按最小间隔排序;最后,对排序后的LSF进行4级矢量量化。MELP算法解码过程中,由内插的LSF参数计算合成滤波器的系数,得到合成滤波器,激励信号经过合成滤波器得到合成语音。由于LSF参数的特性,保证了合成滤波器的稳定性[5]。LPC与LSF转换算法的FPGA实现对语音编码、语音合成等领域硬件实现至关重要。本文给出了LSF到LPC转换运算推导,并给出了算法的实现步骤。

  1 转换算法原理

  1.1 由LPC系数向LSF系数转换

  本文针对LPC系数计算LSF系数的Chebyshev多项式求解法进行研究:

  P阶线性预测滤波器函数为:

  A]6BL_VK2K~D2OX6_$F$YO4.png

  {ai}i=1,2,…,p为线性预测系数。预测系数ai在最小均方误差准则下,由Durbin递推算法求解自相关方程得到[6]。

  LSF[7]作为LPC系数的等价表现形式,可通过求解p+1阶对称多项式P(z)和反对称多项式Q(z)的共轭复根获得。其中p+1阶多项式表示如下:

  P(z)=A(z)+z-(p+1)×A(z-1)(2)

  Q(z)=A(z)+z-(p+1)×A(z-1)(3)

  可以证明,当A(z)的根位于单位圆内时,P(z)和  Q(z)的根沿着单位圆相互交替出现。当p是偶数时,则P(z)有一个根z=-1,Q(z)有一个根z=1;当p为奇数时,Q(z)有±1两个实根。设P(z)的零点为e,设Q(z)的零点为e,则满足:0<?棕1<?兹1<…?棕p/1<?兹p/1<π。为计算方便,去掉与LSF系数无关的实根,得到两个新的多项式P′(z)和Q′(z),当p为偶数时:

  4567.jpg

  令Tm(x)=cos(mx),其中Tm(x)是m阶的Chebyshev多项式。满足关系式Tk(x)=2xTk-1(x)-Tk-2(x),初始条件为:T0(x)=1,T1(x)=x,则带入式(6)、(7)得P(x)和Q(x):

  P(x)=TM(x)+p1TM-1(x)+…+pM-1T1(x)+pM(8)

  Q(x)=TM(x)+q1TM-1(x)+…+qM-1T1(x)+qM(9)

  Chebyshev多项式求解法本质是求解x满足区间[-1,1],求P(x)=0和Q(x)=0的根{xi},对应的LSF系数由?棕i=arccosxi确定。

  1.2 由LSF系数向LPC系数转换

  在语音解码过程中,需要把量化和内插后的LSF系数转换回LPC系数{ai}i=1,2,…,p,逆向推导,已知内插的LSP系数fi,根据fi可计算出P′(z)和Q′(z)的系数p′i和q′i。

  p′i=-2f2i-1p′i+2p′i-2(10)

  q′i=-2f2iq′i-1+2q′i-2(11)

  其中f2i-1=cos?棕2i-1,求出p′i和q′i。根据原来方程式对应关系:

  P(z)=P′(z)×(1+z-1)(12)

  Q(z)=Q′(z)×(1-z-1)(13)

  最后得到LPC系数可由A(z)+P(z)+Q(z)/2得到参数ai。

  2 FPGA实现架构

  2.1 算法实现步骤

  量化和内插后的LSP系数需要更换成LPC系数ai。已知量化和内插的LSP系数qi,i=0,1,…,p-1,根据前文推导,可以得到下面迭代公式:

  for i=1 to p/2

  p′(i)=-2q2i-1p′(i-1)+2p′(i-2)

  for j=i-1 to 1

  p′(j)=p′(j)-2q2i-1p′(j-1)+2p′(i-2)

  end

  end

  公式中的qi=coswi,余弦是通过查找表方式求得的,迭代过程中的初始值p′(0)=1,p′(-1)=0。上面迭代公式给出的是p′(i)的求法,在求解q′(i)时将上面的迭代公式中的q2i-1换成q2i即可。

  在求得p′(i)和q′(i)后就可以求得p(i)、q(i),求解公式如下:

  p1(i)=p′(i)+p′(i-1),i=1,2,…,p/2q1(i)=q′(i)-q′(i-1),i=1,2,…,p/2(14)

  最后得到LPC系数:

  ai=0.5p1(i)+0.5q1(i),       i=1,2,…,p/20.5p1(p+1-i)-0.5q1(p+1-i),i=1,2,…,p/2(15)

  2.2 余弦信号发生器

  FPGA实现LSP到LPC转换是通过上文介绍的迭代算法来实现的。因为qi=coswi,迭代过程中qi的值是根据wi值来求出的。对于余弦的计算有很多方法,CORDIC旋转是一种方法,查找表也是一种方法。CORDIC旋转方法通过数学函数逼近的原理,每次旋转一定的角度来得到余弦值,但是这种方法得到的精度和迭代的次数有关;查找表方法是先将余弦值根据量化位数计算出来存在ROM中,每次计算是需要将数据进行量化然后去ROM中查找量化值所对应的余弦值,这种方法计算速度快,但是存在一定的量化误差,会消耗一定存储空间。考虑到实时性语言编解码,本文的设计方案选择的是查找表法,在每一轮计算中通过wi值查找ROM来得到qi,借助DDS算法原理[8],用相位累加器输出的数据作为波形存储器(ROM)的相位取样地址,这样就可以把存储在波形存储器内的波形抽样值(二进制编码)经查找表查出,完成相位到幅值的转变。

  凭借MATLAB软件可以生成ROM中余弦波形的定点数值,共分3步完成。

  (1)运用MATLAB计算出余弦波形浮点值,对其进行量化,生成定点数值。

  (2)产生mif文件(Altera FPGA ROM初始化数据文件格式)。

  (3)将mif文件导入到“getCos”ROM模块中。

  2.3 系统框架与结果分析

  FPGA实现LSP到LPC转换时主要是根据给定的wi(或者fi)系数通过反复迭代而得到LPC系数,图1为迭代算法的流程图。FPGA算法中一般采用计数器方式来实现for循环,算法中有两个计数器cnt1和cnt2,它们分别用于决定算法中两层循环,cnt1是标定系数个数,当完成P/2个系数迭代时系统给出计算结束标志,cnt2用来确定当前系数的迭代次数。地址发送器是用来确定LSP系数查询地址,它是根据wi和当前cnt1值来决定数据的地址。这个地址所对应的ROM单元中读出的余弦值就是当前迭代coswi值。迭代中设定初始值p′(0)=1,p′(-1)=0。

001.jpg

  本文选取线性预测阶数p=10,LSF系数到LPC系数算法FPGA实现顶层框图如图2所示,系统在start信号的上升沿开始加载wi,并将数据存储在内部寄存器中,为LPC系数迭代做好准备。图2模块LSP2LP_Exloop,根据算法流程图,在FPGA实现过程中,flage标识位用于指定当前运算是针对P还是Q的求解,因为P对应的是奇数序列,Q对应偶数序列,因为奇序列是相邻两项做和如式(12)所示,而偶数序列是相邻两项做差如式(13)所示。当p_part和q_part两个模块完成迭代计算后,会给将各自的finish信号置为高电平,用以通知LSP2LPC_inter模块合成ai系数。LSP2LPC_inter模块在接收到p_part和q_part的finish信号后,同时将P和Q系数值载入并且根据式(15)所示计算过程完成P、Q到ai的合成,并将finish信号置为高电平。图3为FPGA综合报告,由此可见资源利用情况。

002.jpg

003.jpg

004.jpg

  图4为系统的Quartus II仿真报告,从报告中可以看出系统能准确地合成系数,这也说明了设计的可行性。

  根据切比雪夫多项式求根法由LPC系数到LSF系数转换过程进行分析与推导,根据已知的LSF系数进行逆推理求LPC系数,并给出了LSF到LPC系数转换的实现步骤。借助DDS算法原理,实现查找表搜索求根,利用FPGA实现LSF系数到LPC系数转换。与其他多项式相比较,Chebyshev多项式在较高的采样率下,对线性预测阶数要求不高,转换性能影响不大。由于在0和π附近变化引起变化很小,可以得到高精度转换参数值,时序测定时系统时钟可以达到66 MHz。最后系统能准确地合成LPC系数,说明了设计的可行性,并为今后的设计提供了一定的参考价值。

  参考文献

  [1] 方腾龙,赵晓群,韩笑蕾,等.语音清浊音差分LSF参数矢量量化方法[J].电声技术,2010,34(11):61-64.

  [2] 袁晓勇,唐建红,曲志昱.基于Chebyshev法实现LPC与LSF相互转换[J].信息技术,2009,5(79):229-231.

  [3] 梁彦霞,杨家玮,李烨,等.线谱频率参数的快速,低存储矢量量化[J].吉林大学学报:工学版,2012,42(1):223-227.

  [4] 向波,唐昆,崔慧娟,等.基于DCT变换的LSF参数降维算法[J].通信技术,2008,41(8):204-206.

  [5] 鲍长春.数字语音编码原理[M].西安:西安电子科技大学出版社,2007.

  [6] 张雪英.数字语音处理及MATLAB仿真[M].北京:电子工业出版社,2010.

  [7] SOONG F, JUANG B. Line spectrum pair (LSP) and speech data compression[J]. Acoustics, Speech, and Signal Processing, IEEE International Conference on ICASSP′84. IEEE, 1984(9):37-40.

  [8] 田耘,徐文波,张延伟,等.无线通信FPGA设计[M].北京:电子工业出版社,2008.


此内容为AET网站原创,未经授权禁止转载。