用MATLAB程序开发设计PCM编码调制系统目录一、作业要求.......................................................................................................................1二、PCM编解码原理简述...................................................................................................2三、MATLAB程序及仿真结果.............................................................................................6一、作业要求用MATLAB程序开发设计PCM编码调制系统。系统参数设置如下:1.输入模拟信源的最高频率限制在4KHz以内(可以是正弦信号,也可随机产生信号);2.信号平均功率的动态范围≥30dB(自行设定幅度区间)。要求完成以下工作:1.采用均匀量化,若要求信噪比不应低于25dB,不考虑线路衰减和损耗,则设计该均匀量化器,并显示原始输入信号,量化输出信号,以及编码结果。2.若采用A律13折线PCM编码,显示原始输入信号图及解码后的信号图;打印输出编码结果,并比较译码后的量化误差。二、PCM编解码原理简述均匀量化的基本原理在脉冲编码调制中,模拟信号首先以高于奈奎斯特的速率采样,然后将所的样本量化。假设模拟信号是以[-Ⅹmax,Ⅹmax]表示的区间内分布的,而量化电平数很大。量化电平可以是相等的或是不相等的;前者就属于均匀PCM,而后者就是非均匀PCM。关于量化的几个基本概念,量化间隔;量化误差;量化信噪比。(1)相邻量化电平间距离称量化间隔,用“Δ”表示。(2)设抽样值为()sxkT,量化后的值为()qsxkT,xq(kTs)与x(kTs)的误差称为量化误差,又称为量化噪声;量化误差不超过±Δ/2,而量化级数目越多,Δ值越小,量化误差也越小。(3)衡量量化的性能好坏最常用指标是量化信噪比(Sq/Nq),其中Sq表示量化信号值xq(kTs)产生的功率,Nq表示量化误差功率,量化信噪比越大,则量化性能越好。在均匀PCM中,长度为2Xmax的区间[-Ⅹmax,Ⅹmax]被划分为N个相等的子区间,每一子区间长度为△=2Xmax/N。如果N足够大,那么在每一子区间内输入的密度函数就能认为是均匀的,产生的失真为D=△2/12。如果N是2的幂次方即2vN,那么就要求用v比特来表示每个量化电平。这就意味着,如果模拟信号的带宽是W,采样又是在奈奎斯特率下完成的,那么传输PCM信号所要求的带宽至少是vW(实际上1.5vW比较接近于实际)。这时失真由下式给出,222maxmax212334vxxDN如果模拟信号的功率用2X表示,则信号/量化噪声的比(SQNR)由下式给出222max22max233434vvuXSQNRNxXxX式中uX表示归一化输入,定义为maxuXXx以分贝(dB)计的SQNR为24.86|dBudBSQNRvX量化以后,这些已量化的电平用v比特对每个已量化电平进行编码.编码通常使用自然二进制码(NBC),即最低电平映射为全0序列,最高电平映射为全1序列,全部其余的电平按已量化值的递增次序映射。非均匀量化的基本原理正变换:ln(1)()sgn()ln(1)xygxx,其中x是归一化输入(1x),是一个参数,在标准律的非线性中它等于255。反变换:(1)1sgn()yxy在非均匀量化PCM中,输入信号首先通过一非线性环节以减小输入的动态范围,再将输出加到某一均匀PCM系统上。在接收端,输出再通过另一非线形环节,该环节是在发送端所用的非线性环节的逆特征。这样,总的效果就等效于一个在量化电平之间具有非均匀间隔的PCM系统。非均匀量化时,量化器随着输入信号的大小采用不同的量化间隔,大信号时采用大的量化间隔,小信号时采用小的量化间隔,可以以较少的量化电平数达到输入动态范围的要求一般对语音信号传输来说,所使用的非线性可以是律的非线性,或是A律的非线性,中国和欧洲采用A率压缩特性(A=87.56),北美和日本采用律压缩特性(=255),压缩特性分别如下:μ律:1(1)(11)1(1)nxyxnA律:10||11n11n||1||111nAxxAAyAxxAA式中,x为归一化输入,y为归一化输出,A、为压缩系数,上式也可以表示为,ln(1)()sgn()ln(1)xygxx由于A律在工程上不好实现,所以我们经常用近似的13折线压缩法去代替A率压缩下表列出了计算x值与13折线时的x值的比较。计算值x与A律13折线时x值的比较y0818283848586871x012816.6016.3014.15179.7193.3198.111按折线分段时的x012816413211618141211段落12345678斜率161684212141表中第二行的x值是根据87.6A时计算得到的,第三行的x值是13折线分段时的值。可见,13折线各段落的分界点与87.6A曲线十分逼近,同时x按2的幂次分割有利于数字化。A律压扩特性是连续曲线,A律不同压扩特性也不同,在电路上实现这样的函数规律是相当复杂的。实际中,往往采用近似于A律函数规律的13折线(87.6A)的压扩特性。这样,它基本上保持了连续压扩特性曲线的优点,。本设计中所用到的PCM编码正是采用这种压扩特性来编码的。在13折线法中,无论输入信号是正是负,均按8段折线(8个段落)进行编码。若用8位折叠二进制码来表示输入信号的抽样量化值,其中用第一位表示量化值的极性,其余七位(第二位至第八位)则表示抽样量化值的绝对大小。具体的做法是:用第二至第四位表示段落码,它的8种可能状态来分别代表8个段落的起点电平。其它四位表示段内码,它的16种可能状态来分别代表每一段落的16个均匀划分的量化级。这样处理的结果,8个段落被划分成128个量化级。段落码和8个段落之间的关系如表1所示;段内码与16个量化级之间的关系见表2所示。表1段落码表2段内码段落序号段落码段落范围量化间隔段内码量化间隔段内码81111024-2048151111701117110512-1024141110601106101256-512131101501015100128-25612110040100401164-12811101130011301032-6410101020010200116-32910011000110000-168100000000在13折线中,用8位的折叠二进制码表示信号量化值的具体步骤为:用第2到4位表示段落码,8个段落的起点电平由它的8种可能状态来分别表示。其他四位表示段内码,每一个段落它的16个均匀的划分量化级由它的16种可能状态来分别表示。这样就使得8个段落被划分为128个量化级。再加上负的,相当于一共有256种量化电平数。解码时,码字电平=段落起始电平+(8M5+4𝑀6+2𝑀7+𝑀8)∗Δ𝑘解码电平=码字电平+Δk2三、MATLAB程序及仿真结果注:1、为便于阅读,本节仅仅给出核心代码,详细代码请见本文附录。2、文中的图片若不够清晰,子文件夹中还有高清输出的图片(600ppi)1、生成题中要求的动态信号题中要求输入模拟信源的最高频率限制在4KHz以内(可以是正弦信号,也可随机产生信号);信号平均功率的动态范围≥30dB(自行设定幅度区间)。为了能够适应不同条件,本文生成的是频率范围在0~4k之间变化,动态范围在30~35dB之间的随机信号。fana=10^4;%analogfreqT=1/fana;%analogintervalSignalLength=64;tana=(0:SignalLength-1)*T;RealDynamicRange=0;while(RealDynamicRange=30||RealDynamicRange=35)while(RealDynamicRange=30||RealDynamicRange=35)signal=randi([-300,300],1,SignalLength)/10;%raiseaccuracyidx=find(signal==0);%findall0signal(idx)=1;%set0.1totheseindexesRealDynamicRange=20*log10(max(abs(signal))/min(abs(signal)));end%checkfreqrange-------------------NFFT=2^nextpow2(SignalLength);ini_fft=fft(signal,NFFT)/NFFT*2;%showrealityamplitudef=fana/NFFT*(0:1:NFFT-1);abs_ini_fft=abs(ini_fft);%limitbandbelow4kk_stop_freq=floor(4000*NFFT*T);ini_fft(:,k_stop_freq:NFFT-k_stop_freq)=0;%lpfinisignal=real(ifft(ini_fft)*NFFT/2);%gettheinputsignalRealDynamicRange=20*log10(max(abs(inisignal))/min(abs(inisignal)));end%checkfreqrangeagaininisignal_fft=fft(inisignal,NFFT)/NFFT*2;%showrealityamplitudeabs_inisignal_fft=abs(inisignal_fft);原始产生的随机信号,按照题目要求处理过之后的信号以及频谱如下图所示:分别为原始随机信号、原始随机信号的带宽;处理之后带限在0~4kHz之内的信号,处理之后的信号的带宽。生成信号的动态范围RealDynamicRange本次随机产生结果为34.8dB。2、信号采样本节对上述产生的信号进行采样,采样的频率为10000Hz。%%%%%%%%%%%%%%%%%%%%sampling%%%%%%%%%%%%%%%%%%%%%%%%%fsam=10^5;%samplingfreqTsam=1/fsam;tsam=0:Tsam:max(tana);sigsampling=interp1(tana,inisignal,tsam,'linear');subplot(2,1,1);plot(tana,inisignal);title('analogsignal');xlabel('t/s');ylabel('f(t)');subplot(2,1,2);stem(tsam,sigsampling,'Marker','none');title('samplingsignal');xlabel('t/s');ylabel('fs(t)');print-r600-djpegAnalogAndSamplingSignal;采样前后信号为3、信号的均匀量化%%%%%%%%%%%%%%%%%%%uniformquantization%%%%%%%%%%%%%%%%%%%%%%N_uniquan=round((25-20*log10(min(abs(inisignal))/max(abs(inisignal)))-4.77)/6.02);M_uniquan=2^N_uniquan;sig_uniquan=quant(inisignal,M_uniquan,max(abs(inisignal)))';plot(tana,inisignal,'b');holdon;plot(tana,sig