您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 语音信号ADPCM编解码实现课程设计报告
课程设计报告设计课题:ADPCM编解码器地实现姓名:专业:集成电路设计与集成系统学号:日期指导教师:一:课程设计任务与要求.ADPCM编解码器地实现.m转为Verilog,使用Matlab和Modesim联合仿真验证二:系统设计原理.2.1脉冲编码调制PCM脉冲编码调制就是把一个时间连续,取值连续地模拟信号变换成时间离散,取值离散地数字信号后在信道中传输.脉冲编码调制就是对模拟信号先抽样,再对样值幅度量化,编码地过程[9].矚慫润厲钐瘗睞枥庑赖。抽样,就是对模拟信号进行周期性扫描,把时间上连续地信号变成时间上离散地信号,抽样必须遵循奈奎斯特抽样定理.该模拟信号经过抽样后还应当包含原信号中所有信息,也就是说能无失真地恢复原模拟信号.它地抽样速率地下限是由抽样定理确定地.抽样速率采用8KHZ.聞創沟燴鐺險爱氇谴净。量化,就是把经过抽样得到地瞬时值将其幅度离散,即用一组规定地电平,把瞬时抽样值用最接近地电平值来表示,通常是用二进制表示.残骛楼諍锩瀨濟溆塹籟。量化误差:量化后地信号和抽样信号地差值.量化误差在接收端表现为噪声,称为量化噪声.量化级数越多误差越小,相应地二进制码位数越多,要求传输速率越高,频带越宽.为使量化噪声尽可能小而所需码位数又不太多,通常采用非均匀量化地方法进行量化.非均匀量化根据幅度地不同区间来确定量化间隔,幅度小地区间量化间隔取得小,幅度大地区间量化间隔取得大.酽锕极額閉镇桧猪訣锥。一个模拟信号经过抽样量化后,得到已量化地脉冲幅度调制信号,它仅为有限个数值.编码,就是用一组二进制码组来表示每一个有固定电平地量化值.然而,实际上量化是在编码过程中同时完成地,故编码过程也称为模/数变换,可记作A/D.彈贸摄尔霁毙攬砖卤庑。2.2差分脉冲编码调制DPCM差分脉冲编码调制DPCM是利用样本与样本之间存在地信息冗余度(预测样值与当前样值之差)来代替样值本身进行编码地一种数据压缩技术[10].差分脉冲编码调制可以实现在量化台阶不变(即量化噪声不变)地情况下,编码位数显著减少,信号带宽大大压缩.根据过去地样本去估算下一个样本信号幅度大小,这个值称为预测值,对实际信号值与预测值之差进行量化编码,从而就减少了表示每个样本信号地位数.謀荞抟箧飆鐸怼类蒋薔。差分脉冲编码地概念,如图2.2中,差分信号d(k)是离散输入信号s(k)和预测器输出地估计值)1(ekS之差.此刻,)1(ekS是对S(k)地预测值,而不是过去样本地实际值.DPCM系统实际上就是对这个差值地d(k)进行量化编码,用来补偿过去编码中产生地量化误差.DPCM系统实际就是一个负反馈系统,采用这种结构可以避免量化误差地积累.重建新号)(kSr是由逆量化器产生地量化差分信号)(kdq,与对过去样本信号地估算值)1(kSe求和得到.他们地和,即)(kSr作为预测器确定下一个信号估算值地输入信号.由于在发送端和接收端都使用相同地逆量化器和预测器,所以接收端地重建信号)(kSr可以传送信号I(k)中获得.厦礴恳蹒骈時盡继價骚。图2.2DPCM原理图在PCM中,每个波形样值都独立编码,与其他样值无关,样值地整个幅值编码需要较多位数,比特率较高,数字化地信号带宽大.然而,大多数以奈奎斯特或更高速率抽样地信源信号在相邻抽样间表现出很强地相关性,利用信源地这种相关性,一种比较简洁地解决方案是对相邻样值地差值而不是样值本身进行编码.由于相邻样值地差值比样值本身小,可以用较少地比特数表示差值.如果将样值之差仍用N位编码传送,则DPCM地量化信噪比显然优于PCM系统.茕桢广鳓鯡选块网羈泪。2.3自适应差分脉冲编码调制ADPCM前述概要地介绍了DPCM地工作原理.但为了能进一步提高DPCM方式地质量还需要采取一些辅助措施.即自适应措施.语声信号地变化是因人、因时而不同地,为了能在相当宽地变化范围内仍能得到最佳地性能,DPCM也需要自适应系统,自适应预测和自适应量化,称为ADPCM.鹅娅尽損鹌惨歷茏鴛賴。图2.3所示为采用固定预测并带有自适应量化地ADPCM系统.图中多电平量化与调制器用Q表示,积分器用P组成地预测系统表示.自适应量化地基本思想是:让量化间隔)(t地变化,与输入信号方差相匹配,即量化器阶距随输入信号地方差而变化,它正比于量化器输入信号地方差.现有地自适应量化方案有两类:一类是其输入幅度或方差由输入信号本身估算,这种方案叫前馈自适应量化器.另一类是其阶距根据量化器地输出来进行自适应调整,或等效地用输出编码信号来进行自适应调整,这类自适应量化方案称为反馈自适应量化器.籟丛妈羥为贍偾蛏练淨。无论是采用前馈式还是反馈式,自适应量化都可以改善动态范围及信噪比.反馈控制地主要优点是量化阶距地信息由码字序列提取,因此不需要传输或存储额外地阶距信息.但是在重建信号输出时,传输中地误码对质量地影响比较敏感,在前馈控制时,要求码字和阶距一起,用来得出信号.这样是增加了其复杂程度,但它有可能在差错控制保护下传输阶距从而大大改善高误码率传输时地输出信号质量.不论是前馈型还是反馈型自适应量化都可以希望得到超过相同电平数固定量化地10~20dB地改善.預頌圣鉉儐歲龈讶骅籴。为了进一步有效地克服语声通信过程中地不平稳行,要考虑量化器和预测器都适应匹配于语声信号瞬时变化,又设计了同时带有自适应量化和自适应阶距地ADPCM系统.自适应量化和自适应预测都可以是前馈型地或是反馈型地.对ADPCM来说,预测系统地预测系数地选择是很重要地.如果信号)(tFS地样值用S(n)表示,)('tFd地样值用)('nd表示,)(dtF地样值用)(dn表示,则当采用线性预测,即)('nd是以前量化值地线性组合时,其预测值为渗釤呛俨匀谔鱉调硯錦。)()()n(d1kndnapkk(2.3)式中P为预测器地阶数.要使预测系数)(nak自适应,通常是假定短时间内语声信号地参量保持恒定地.并使短时间内地均方预测误差为最小值来选择预测系数[11].铙誅卧泻噦圣骋贶頂廡。(a)编码器(b)解码器图2.3ADPCM原理图2.4编码过程编码地核心思想是对输入信号与预测信号差值进行编码和预测,采用地是非均匀量化,为了使不同幅值地信号信噪比接近一致,从而避免大幅值语音信号信噪比大而小幅值语音信号信噪比小[12].ADPCM编码过程如图3.1所示输示.输入Si是一个线性16bit补码PCM数据,其范围在32767到-32767之间.如果是非线性地PCM则之前先加个线性转化模块使得输入地数据是线性地.经过预测器出来地预测采样值Sp=(1)pXn,与线性输入Si地差值为d,我们就可以在这个差值上进行处理.接下来量化器模块对有符号地4位编码数据I,由于是带符号地所以这个数据地表示范围在7到-7之间,最高位为符号位.具体实现过程如下,首先计算16位地PCM值地当前采样值Si和上一时刻预测采样值(1)pXn之间地差值d,这个差值地量化编码即输出4位ADPCM值I(k).在算法实现中,定义一个结构变量存储预测采样Sp和量化步长索引,并制定了两个表.一个表为索引调整表,其输入为差值量化编码I(k),用来更新步长索引.另一个表为步长调整表,其输入为步长索引,输出为步长q.编码时,首先用上一个采样点地步长索引查步长调整表求出步长q.如果当前采样值Si和采样预测值(1)pXn之间地差值d为负,则I地D3位置1.如果该差值绝对值大于步长q,则I地D2位置1.如果d-q大于q/2,则I地D1位置1,如果d-q-q/2大于q/4,则I地D0位置1.如果以上条件不满足,则相应位置0.这样就确定了编码值I(k).然后编码值I(k)作为索引调整表地输入,查表输出索引调整,并和结构变量中原步长索引相加,产生新地步长索引,在下一个采样值地编码中使用.编码输出I后,编码还需要重复进行和解码完全一样地计算过程,求出新地预测采样值Sp.擁締凤袜备訊顎轮烂蔷。图3.1G.721协议编码概括起来其主要步骤如下①计算Si与自适应预测器输出(1)pXn地差值)1(inXSdp;②通过自适应量化模块对d进行量化,得到ADPCM码字I(k)。③通过自适应反量化模块对I(k)计算得到量化差分预测信号qd。④根据重建信号prSdSq和qd更新预测滤波器系数。⑤利用新地系数,计算得到)(nXP,重复上述5个步骤,压缩下一个语音采样数据.图3.2G.721协议解码2.5解码过程解码是编码地逆过程,ADPCM地解码过程如图3.2所示.解码输入即编码输出I,逆量化器将I逆量化成差值dq.差值dq与预测采样Sp相加得到解码输出Sr.解码过程同编码过程中求预测采样地原理是一样地,当编码端地Sr能很好地跟踪上Si时,解码端地Sr也能同样再现Si.这里涉及算法本身地时延和实现平台、实现方法地实时性等因素.解码时首先通过步长索引查步长调整表得到量化步长,差值量化编码I经逆量化器得到语音差值dq,这是求I地逆过程;然后与前次预测值一起重建当前语音信号Sr,最后用固定预测Sp=Sr,更新预测采样Sp,用I更新量化步长索引值[13][14][15].贓熱俣阃歲匱阊邺镓騷。其主要步骤如下:①通过自适应逆量化器和自适应预测得到qd和PS.②通过qd同PS相加便得到编码输出Sr.③采用与编码器相同地方法更新预测滤波器系数,.④采用与编码器相同地方法更新步长索引表,得到新地qd⑤利用新地滤波器系数,重复上述5个步骤,解码下一个I(k).三:测试与验证主要采用Matlab来验证ADPCM地结果,以及和Modlsim来联合仿真.而我们利用FPGA资源消耗低、灵活性强、速度快、性价比突出等优势,使用VerilogHDL硬件描述语言设计并实现了ADPCM编/解码器,运用Modelsim仿真测试,来确保编/解码器地正确性和稳定性,整个设计充分利用了FPGA芯片地资源、硬件结构简单、可靠性高,具有良好地应用前景.坛摶乡囂忏蒌鍥铃氈淚。3.1Matlab仿真根据G.721协议,再由上述原理编写ADPCM地编解码器C代码,将代码导入到matlab中[17].我们用一段类似语音地正弦波取200点来验证波形.其代码如下:蜡變黲癟報伥铉锚鈰赘。t=0:pi/50:2*pi。y=sin(t)。adpcm_y=adpcm_encoder(y)。Y=adpcm_decoder(adpcm_y)。其中adpcm_encoder()为ADPCM地编码模块,代码见附录1,而adpcm_decoder()为ADPCM地解码模块,其代码也见附录1.y为输入波,adpcm_y为ADPCM编码波形,Y为解码输出波形则输入波形如图4.2.1.買鲷鴯譖昙膚遙闫撷凄。图4.2.1输入波形ADPCM编码波形如图4.2.2.图4.2.2ADPCM编码波形ADPCM解码波形如图4.2.3.图4.2.3ADPCM解码输入与输出波形地差值如图4.2.4.图4.2.4输入与输出差值波形可以看出开始差距比较大后来慢慢便开始减小,是因为开始是初始化预测值我们无法知道,所以便设定为预测值为0.綾镝鯛駕櫬鹕踪韦辚糴。3.2Modelsim仿真本设计采用verilog语言验证编解码器功能地实现[18].先用matlab生成一个类似于正弦波地图形来模拟为输入地语音波形,并将其值记录在一个名为“sin”地.txt文件,然后送入到测试文件中my_mem保存起来,2个时钟上升沿后便把my_mem保存地数据一一送入到编码器地PCMIN输入端,然后modelsim仿真结果如下图4.4.1.仿真测试verilog代码和编码器地代码见附录2.驅踬髏彦浃绥譎饴憂锦。图4.4.1输入波形及编码波形同理我让从编码器输出地编码值也保存在名为“code”地.txt文件中,并设计了一个my_mem地寄存器也来保存code.txt中地编码值,在经过2个时钟下降沿后便把my_mem中保存地数据一一送到解码器地CODEIN输入端,按照这种方法,每隔2个时钟下降沿便将my_mem中数据输入一个,最后modelsim仿真数据如图4.4.2.其中verilog地解码器代码和测试文件地代码见附录2.
本文标题:语音信号ADPCM编解码实现课程设计报告
链接地址:https://www.777doc.com/doc-5306439 .html