实验一:语音压缩编码的实现实验一语音压缩编码的实现——增量调制一、实验目的(1)会用MATLAB语言表示基本的信号(2)用MATLAB实现语音信号的采集(3)理解增量调制(DM)的原理并编程实现编译码二、实验原理1、信号是随时间变化的物理量,它的本质是时间的函数。信号可以分为时间连续信号和时间离散信号。连续信号是指除了若干不连续的时间点外,每个时间点上都有对应的数值的信号。离散信号则是只在某些不连续的点上有信号值,其它的时间点上信号没有定义的一类信号。离散信号一般可以由连续信号经过模数转换而得到。语音信号是模拟信号,经麦克风输入计算机后,就存为数字信号。2、增量调制编码基本原理是采用一位二进制数码“1”或“0”来表示信号在抽样时刻的值相对于预测器输出的值是增大还是减小,增大则输出“1”码,减小则输出“0”码。收端译码器每收到一个1码,译码器的输出相对于前一个时刻的值上升一个量化阶,而收到一个0码,译码器的输出相对于前一个时刻的值下降一个量化阶。增量调制的系统结构框图如课本上图3.3-1所示。在编码端,由前一个输入信号的编码值经解码器解码可得到下一个信号的预测值。输入的模拟音频信号与预测值在比较器上相减,从而得到差值。差值的极性可以是正也可以是负。若为正,则编码输出为1;若为负,则编码输出为0。这样,在增量调制的输出端可以得到一串1位编码的DM码。图3.3-1增量调制的系统结构框图三、实验内容与方法(一)、用windows自带的录音机录一段自己的语音(3s内),存为“.wav”文件。1、补充:语音信号的采集Wavread函数常用的语法为:[y,fs,bite]=wavread(‘filename.wav’);这里fs为采样频率,bite为采样点数。AWGN:在某一信号中加入高斯白噪声y=awgn(x,SNR)在信号x中加入高斯白噪声。信噪比SNR以dB为单位。y=awgn(x,SNR,SIGPOWER)如果SIGPOWER是数值,则其代表以dBW为单位的信号强度;如果SIGPOWER为'measured',则函数将在加入噪声之前测定信号强度。用subplot命令表示出原语音信号和加噪后的语音信号,用sound(y,fs,bite)回放输入的音频信号进行对比,也可用wavplay(y,fs)回放。2、思考题(1)查看文件属性,写出音频采样大小,频道数,采样级别,并写出位速如何计算。思考题(2)利用函数wavread对语音信号进行采样,通过查看相应变量,写出采样点数为多少。思考题(3)简述sound以及wavplay两个函数有何不同,为何直接输入wavplay(y),语音会变调?(二)设输入信号为:)300sin(5.0100sintty,增输入信号+-比较器极性判别)(ty译码器调制器脉冲发生器信道量调制的采样频率为1000Hz,采样时间从0到0.02s,量化阶距δ=0.4,单位延迟器初始值为0。思考题(1)按图3.3-1写出程序流程图,并编程实现编译码的全过程,最后用subplot命令表示出原信号、编码输出信号以及译码输出(使用stairs(t,x)命令将译码表示为阶梯状图,在这幅图中使用holdon命令,把原信号也一并显示出作为对比)的信号(假设理想传输,不考虑调制解调方式以及信道上的噪声)。补充:N=length(t);求数组长度(即行数或列数中的较大值)D(N)=0;令数组中每个值都为0思考题(2)由实验的结果说明什么是斜率过载,在哪些时刻发生?什么是散粒噪声,在哪些时刻发生?如何兼顾优化这两种失真?ADPCM的主要思想是什么?思考题(3)为什么说增量调制是PCM的特殊形式?简述PCM、增量调制以及DPCM的不同。(三)补充题:完成书本P25所示的自适应增量调制算法(控制可变因子M)四、实验要求(1)编制完整的实验程序,实现对信号的模拟并得出实验结果。(2)在实验报告中写出完整的程序,并完成上述思考题。1.00.511.52x105-0.1-0.0500.050.1时间t幅值原始语音采样后的信号波形-4-2024x104020406080频率Hz幅值信号原始频率00.511.52x105-0.1-0.0500.050.1时间t幅值调制后的信号波形-4-2024x104010203040频率Hz幅值信号调制后的频率Figure1原始信号和调制后的信号波形及频率00.511.52x105-0.1-0.0500.050.1时间t幅值加入高斯白噪声后的波形-3-2-10123x104010203040频率Hz幅值加入高斯白噪声后的频率00.511.52x105-0.0500.05时间t幅值加噪解调后的信号波形-3-2-10123x104010203040频率Hz幅值加噪解调后的频率Figure2加入高斯白噪声和解调后的信号波形及频率程序1如下:%原始语音采样后的信号分析N=16;fs=44100;bits=16;[y,fs,bits]=wavread('F:\1.wav');figure(1)subplot(2,2,1);plot(y);xlabel('时间t');ylabel('幅值');title('原始语音采样后的信号波形');Y=fft(y,2^N);Y0(2^N/2+1:2^N)=Y(1:2^N/2);Y0(1:2^N/2)=Y(2^N/2)/2^N;ff=fs*(-(2^N/2-1):2^N/2)/2^N;subplot(2,2,3);plot(ff,abs(Y0));xlabel('频率Hz');ylabel('幅值');title('信号原始频率');%信号调制fc=9000;%载波频率y_mod=modulate(y,fc,fs,'am');%对原语音信号调制subplot(2,2,2);plot(y_mod);xlabel('时间t');ylabel('幅值');title('调制后的信号波形');YY0=fft(y_mod,2^N);Y1(2^N/2+1:2^N)=YY0(1:2^N/2);Y1(1:2^N/2)=YY0(2^N/2+1:2^N);subplot(2,2,4);plot(ff,abs(Y1));xlabel('频率Hz');ylabel('幅值');title('信号调制后的频率');%加入高斯白噪声后的语音信号分析y_mod1=awgn(y_mod,20,'measured');figure(2);subplot(2,2,1);plot(y_mod1);xlabel('时间t');ylabel('幅值');title('加入高斯白噪声后的波形');YY1=fft(y_mod1,2^N);Y2(2^N/2+1:2^N)=YY1(1:2^N/2);Y2(1:2^N/2)=YY1(2^N/2+1:2^N);subplot(2,2,3);plot(ff,abs(Y2));xlabel('频率Hz');ylabel('幅值');title('加入高斯白噪声后的频率');%信号解调y1=demod(y_mod1,fc,fs,'am');subplot(2,2,2);plot(y1);xlabel('时间t');ylabel('幅值');title('加噪解调后的信号波形');YY2=fft(y1,2^N);Y3(2^N/2+1:2^N)=YY2(1:2^N/2);Y3(1:2^N/2)=YY2(2^N/2+1:2^N);subplot(2,2,4);plot(ff,abs(Y3));xlabel('频率Hz');ylabel('幅值');title('加噪解调后的频率');sound(y1,fs,bits);2.增量调制00.0020.0040.0060.0080.010.0120.0140.0160.0180.02-202原信号及其离散值00.0020.0040.0060.0080.010.0120.0140.0160.0180.02-202编码输出二进制序列值00.0020.0040.0060.0080.010.0120.0140.0160.0180.02-202解码信号与原信号对比程序2如下:Ts=1e-3;%采样间隔t=0:Ts:20*Ts;%仿真时间序列,0.02/(1/1000)=20个采样点x=sin(100*pi*t)+0.5*sin(300*pi*t);%信号delta=0.4;%量化阶距D(1+length(t))=0;%预测器初始状态fork=1:length(t)e(k)=x(k)-D(k);%误差信号e_q(k)=delta*(2*(e(k)=0)-1);%量化器输出D(k+1)=e_q(k)+D(k);%延迟器状态更新codeout(k)=(e_q(k)0);%编码输出endsubplot(3,1,1);plot(t,x,'-o');axis([020*Ts,-22]);holdon;title('原信号及其离散值');subplot(3,1,2);stairs(t,codeout);axis([020*Ts,-22]);%解码端title('编码输出二进制序列值');Dr(1+length(t))=0;%解码端预测器初始状态fork=1:length(t)eq(k)=delta*(2*codeout(k)-1);%解码xr(k)=eq(k)+Dr(k);Dr(k+1)=xr(k);%延迟器状态更新endsubplot(3,1,3);stairs(t,xr);holdon;%解码输出subplot(3,1,3);plot(t,x);%原信号title('解码信号与原信号对比');