语音信号大作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;