1、通信原理编码实验报告大连理工大学语音信号A律编码解码报告课程名称: 通信原理 学院(系): 电信 专 业: 通信工程 班 级: 1101 学 号: 201181227 201181145 学生姓名: 殷青 张非凡 2014年 4 月 17 日一 实验原理1.1总体框图1.2 低通滤波器信道中所用的音频信号频率范围为3003400hz,因此,我们需要对获得的音频信号滤波,使用低通滤波器。1.3 8k重采样信道中的带宽为8khz,因此,我们需要对获得的音频信号进行重采样,以获得8khz的信号。1.4抽样信号的非均匀量化编码(13折线)为了改善小信号时的信号量噪比,采用非均匀量化,量化间隔随信号采样
2、值的不同而变化,信号抽样值小时,量化间隔也小;信号抽样值大时,量化间隔也大,实际用13折线法近似逼近A律压缩来进行非均匀量化。如下图所示:语音信号中通常采用8位的PCM编码就能保证满意的通信质量。8bits的安排:极性码:第一位;段落码:第二至四位,代表13折线中的8个段落;段内码:第五至八位,代表每一段落内的16个均匀划分的量化间隔。段落码和段内码的编码规则如下表所示:二实验内容2.1语音信号的获取。我们用电脑上的录音机录了一段“早上好,我是*”的录音。并用软件“格式工厂”将其转成wav格式。原始信号波形图如下。代码:figure;x0,fs0,bits0=wavread(DSP2.wav)
3、;plot(x0);xlabel(t),ylabel(幅值);title(原始信号波形);2.2信号处理低通滤波器&8k重采样2.2.1低通滤波:设计思想:利用窗函数FIR函数,将语音信号的高频成分滤除,即达到低通滤波的目的。低通滤波器的频响特性曲线如下图:2.2.2重采样:设计思想:wav文件的抽样频率已经是44khz,要用8khz重采样,而从44k到8k,由于44不能被8整点采样,造成可能的语音信号的缺失,因此,我们先用插0法将44khz的信号扩展成88khz的信号,再对88khz信号每11点抽一个值,这样,8k重采样基本完成。44khz原始信号的频谱波形插“0”并滤波后的88khz信号频
4、域波形抽取成8khz的信号频域波形各个频率的频谱波形图8k重建后的时域信号波形。代码:function output_signal=resample(input_signal) % Easiet way to implement is: input_signal1=interp(input_signal,2); %upsample to 88kHz, twice the sampling frequency of the original audio signal output_signal=zeros(2*length(input_signal),1); %initialize the ou
5、tput signal for i=1:length(input_signal) %for loop using i as an interger output_signal(2*i-1)=input_signal(i); %interpolate one single bit end %LPF,try FIR1 to meet the spec also an anti-aliasing filter %assume filter length=240; %cut-off frequency=4kHz, Wn=Fc/Fs,Fs is the sampling frequency %(8800
6、0),Fc=4000 N=240; Fc=4000; Wn=Fc/44000; b=fir1(N,Wn); %multiple by two % output_signal1=conv(output_signal,2.*b); %downsampling to 8kHz,1/11 of the sampling freuquency of the audio signal % Easiet way to implement is using decimation function for j=1: floor(length(output_signal1)/11) %round towards
7、minus infinity output_signal2(j)=output_signal1(1+11*(j-1); %assign every 11 points as the last output signal end % plot the power spectrum using pwlech function figure(1); pwelch(input_signal,88000,twosided); title(input signal at 44kHz); figure(2); pwelch(output_signal1,88000,twosided); title(outp
8、ut signal1 at 88kHz after fir1); figure(3); pwelch(output_signal2,8000,twosided); title(output signal2 at 8kHz); figure(4); freqz(b); %fft of the three signals and plot them new_input_signal=fft(input_signal); new_output_signal=fft(output_signal); new_output_signal1=fft(output_signal1); new_output_s
9、ignal2=fft(output_signal2); figure(5) subplot(411); plot(1:length(new_input_signal),new_input_signal); title(FFT of Original signal at 44kHz) subplot(412); plot(1:length(new_output_signal),new_output_signal); title(FFT of 88kHz before fir1) subplot(413); plot(1:length(new_output_signal1),new_output_
10、signal1); title(FFT of 88kHz afer fir1); subplot(414); plot(1:length(new_output_signal2),new_output_signal2); title(FFT of 8kHz output signal); % %listen to the sounds %soundsc(input_signal,44000); %the original sound pause; soundsc(output_signal1,88000); %sound after up-sample pause; %soundsc(outpu
11、t_signal2,8000); %sound after down-sample %save the audio as the audio file wavwrite(output_signal2,music_singal_8kHz); end2.3 A律13折线pcm编译码2.3.1 A律pcm编码MATLAB代码%A律13折线PCM编码实现z=sign(xn); %判断S正负xnnor=abs(xn)/max(abs(xn); %xn取模归一化S=2048*xnnor;S=floor(S); %向负无穷方向取整figure(6);plot(S);title(取模、归一、乘2048、取整后
12、的序列);code=zeros(length(S),8); %码组矩阵%极性码第一位和段落码第二三四位for i=1:length(S) if z(i)=0 code(i,1)=1; end if(S(i)=128) code(i,2)=1; if(S(i)=512) code(i,3)=1; if(S(i)1024) code(i,4)=1; end else if(S(i)=256) code(i,4)=1; end end else if(S(i)=32) code(i,3)=1; if(S(i)=64) code(i,4)=1; end else if(S(i)=16) code(i,
13、4)=1; end end endend%段内码 第五六七八位N=zeros(1,length(S);for i=1:length(S) N(i)=bin2dec(num2str(code(i,(2:4)+1; %找到code位于第几段endsp=0,16,32,64,128,256,512,1024; %每段起始值spmin=1,1,2,4,8,16,32,64; %每段最小量化间隔for i=1:length(S) loc=floor(S(i)-sp(N(i)/spmin(N(i); %向负无穷方向取整,段内第几段 if(loc=16) loc=loc-1; end %正负2048时,lo
14、c=16,当做15处理 for k=1:4 code(i,9-k)=mod(loc,2); loc=floor(loc/2); endend %十进制数转化为4位二进制code编码输出波形如图:2.3.2. 接收端重建原音频信号MATLAB代码%A律13折线译码实现dcode=code;dS=zeros(1,size(dcode,1);for i=1:size(dcode,1) par=bin2dec(num2str(dcode(i,(2:4)+1 %段落位置 parmid=bin2dec(num2str(dcode(i,(5:8);%段间位置 dS(i)=sp(par)+spmin(par)
15、*(parmid+0.5); if dcode(i,1)=0 dS(i)=-dS(i); endenddS=dS/2048; %归一化figure(7);plot(dS);dS %dS为将8位PCM码解码后的归一化值译码后信号输出波形如图:分析:通过与原始信号的波形对比,可以观察到,A律PCM译码后的信号波形与原始音频信号波形基本相同,达到了无失真转换。通过soundsc(dS,8000)听取经过编码译码输出后的语音信号,与原始语音信号基本相同,通信质量基本满意,即接收端重建语音信号成功。至此,语音信号的A律13折线PCM编码译码已通过matlab仿真实现。三、实验体会:首先,通过本次实验,两人一组很好的锻炼了我们的合作沟通能力,我们两人从研究整体的编码译码构架,到最终确定算法思想,也经历了一番挣扎,比如我们一开始不太了解到底是将低通滤波器放在重采样前还是重采样后;也比如我们不确定是用13折线还是用书上讲的那个公式。但是最后我们还是采用了13折线,13折线虽然写起来所用语言比较多,但是我们推测,直接用A律的函数公式可能要运行的时间更长一点,因为毕竟一共2万多个点都要算,而且其中还有log函数。其次,我们也更深刻的感受到了编码和译码不仅仅是书上讲的这么简单,真正实现起来有很大的难度。而我们也要考虑的更全面一点。总而言之,知识是无穷的。我们要端正心态,再接再厉。
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2