语音信号大作业

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《语音信号处理》(2010-2011学年第2学期)

实验二基于G.721ADPCM的语音编码

一、实验目的

1.理解语音编码的方法及其应用。

2. 进一步掌握ADPCM语音编码。

二、实验内容

基于G.721ADPCM语音编码标准的MATLAB实现。先输入一个语音信号,用ADPCM对其压缩编码,最后输出解码后的图形,将它与原图形进行比较。同时将提取的语音信号和编码后的语音信号写入文件中。

三、实验原理

1、ADPCM语音编码简介

Adpcm是自适应差分脉冲编码调制的简称,最早使用于数字通信系统中。该算法利用了语音信号样点间的相关性,并针对语音信号的非平稳特点,使用了自适应预测和自适应量化,在32kbps◎8khz速率上能够给出网络等级话音质量。

ADPCM将脉冲编码调制、差值调制和自适应技术结合起来,进一步利用语音信号养点间的关系,并针对语音信号的非平稳特点,使用了自适应预测和自适应量化,在32kbit/s速率上能够够给予网络等级语音质量,从而符合进入公用网的要求。以下的流程图可以看出,编码器中嵌入了一个解码器,使得编码器的自适应修正完全取决于信号的反馈值。这个反馈值与解码器的输出一致,所以后续的差值采样就补偿了量化误差,从而避免了量化误差的积累。

2、流程图

3、编程算法简介

1)先进行自适应预测,得出估计值,然后求取采样值与估计值之差,用表

示;

2)求出量化阶距自适应因子,它有调整短时能量的变化较快的的语音信号的

和调整数据类慢变信号的两部分,经过速度因子加权平均而成;

3)自适应量化并编码输出,得出编码值;

4)自适应逆量化器输出并重建语音信号,输出重建后的语音信号。

四、程序代码以及分析

任务一.主函数程序

%主函数程序main.m:

clear all

coe=[1,0,1,0,0,0,0,0,0,0,0]; %初始化系数

coe1=[0,0,0];

coe2=[0,0,0,0,0,0,0,0,0,0];

coe3=[0];

Dqk=zeros(1,7);

fid=fopen('cm.txt','rt'); %读文件,文件格式为.txt

a=fscanf(fid,'%e\n');

fclose(fid);

fid=fopen('cm.721.txt','wt');

for i=1:size(a,1);

Slk=a(i); %输入信号

[coe,coe1,coe2,coe3,Dqk]=adpcm(Slk,coe,coe1,coe2,coe3,Dqk); %调用语音编解码函数

fprintf(fid,'%f\n',coe2(5));

end

fclose(fid);

%-----------------------------波形显示------------------------

fid=fopen('cm.txt','rt'); %读文件,文件格式为.txt

a=fscanf(fid,'%e\n');

fid=fopen('cm.721.txt','rt');

b=fscanf(fid,'%e\n');

subplot(211),plot(a);

title('输入语音波形');

subplot(212),plot(b);

title('解码输出波形');

%完成赋初值、信号输入及调用语音编解码函数

任务二.语音编解码子函数程序adpcm.m

function [coe,coe1,coe2,coe3,Dqk]=adpcm(Slk,coe,coe1,coe2,coe3,Dqk)

%语音编解码函数

Yk_pre=coe2(1); %初值传递

Sek_pre=coe2(2);

Ik_pre=coe2(3);

Ylk_pre_pre=coe2(4);

Srk_pre=coe2(5);

Srk_pre_pre=coe2(6);

a2=coe2(7);

Tdk_pre=coe2(8);

Trk_pre=coe2(9);

Num=coe2(10);

coe2(10)=coe2(10)+1;

[Sek,coe]=Selfpredict(Srk_pre,Srk_pre_pre,Dqk,coe); %自适应预测

Dk=Slk-Sek; %采样值与其估值差值计算

Yuk_pre=yu_result(Yk_pre,wi_result(abs(Ik_pre))); %快速非锁定标度因子计算

if Yuk_pre<1.06

Yuk_pre=1.06;

elseif Yuk_pre>10.00

Yuk_pre=10.00;

end

Ylk_pre=y1_result(Ylk_pre_pre,Yuk_pre); %锁定标度因子计算

%窄带信号瞬变判定%

if((a2<-0.71875)&(fabs(Dqk)>pow(24.2,Ylk_pre)) ) Trk=1;

else Trk=0;

end

Tdk_pre = Trk;

%窄带信号瞬变判定结束

Tdk_pre=Tdk_com(a2); %单频信号判定

[Alk,coe1]=Alk_com(Ik_pre,Yk_pre,coe1,Tdk_pre,Trk_pre); %自适应速度控制与自适应预测

if Alk<0.0

Alk=0.0;

elseif Alk>1.0

Alk=1.0;

end

[Yk,coe3]=Yk_com(Ik_pre,Alk,Yk_pre,coe3); %量化阶矩自适应因子计算

Ik=Ik_com(Dk,Yk); %自适应量化并编码输出

Yk_pre=Yk;

Srk_pre_pre=Srk_pre;

Sek_pre=Sek;

相关文档
最新文档