PCM编码及解码课程设计.docx
《PCM编码及解码课程设计.docx》由会员分享,可在线阅读,更多相关《PCM编码及解码课程设计.docx(24页珍藏版)》请在冰点文库上搜索。
PCM编码及解码课程设计
西南科技大学
课程设计报告
课程名称:
数字通信课程设计
设计名称:
PCM编码及解码
**********
学号:
********
班级:
通信0703
*******
起止日期:
2010.7.3---2008.7.10
西南科技大学信息工程学院制
课程设计任务书
学生班级:
通信0703学生姓名:
蔡成玉学号:
********
设计名称:
PCM编码及解码
起止日期:
2010.7.3----2010.7.10指导教师:
龙惠民
设计要求:
PCM编码及解码
基本要求:
●产生长度为1000的标准正太分布的随机信号,画出时域波形及频谱;
●采用u=255的非均匀PCM编码,每符号为8bit,画输入-输出关系图;
●计算信号量化噪声比(SQNR);
●信道误码率为10-3;
●解码,并画出u律反变换后的信号时域波形及频谱。
扩展要求:
●采用均匀PCM、量化级数可变、信道误码率可变。
课程设计学生日志
时间
设计内容
7.3-4
查阅相关资料复习有关PCM相关知识,确定方案
4-5
设计总体方案
5-6
根据设计需要,计算参数
6-7
根据需要编写函数和相应程序
7-8
整理程序,并进行调试
8-9
检查指标并分析结果
9-10
书写程序设计报告
课程设课程设计考勤表
周
星期一
星期二
星期三
星期四
星期五
课程设计评语表
指导教师评语:
成绩:
指导教师:
年月日
一、设计目的和意义
Pcm编解码比其他一些方式更能提供高性能的点到点通信,通信保密性强,特别适合金融、保险等保密性要求的客户需要;另外,它的传输质量高,网络时延小,信道固定分配,充分保证了通信的可靠性,保证用户的带宽不会受其他用户的影响;而且拥护通过这条高速的国际互联通道,可构筑自己的Internet、E-mail等应用系统;还可以使用户网络的整体接入使局域网内PC均可共享互联网资源;
二、设计原理:
脉冲编码调制简称脉码调制,它使一种将模拟语音信号变换成数字信号的编码方式。
脉冲调制—时间上离散的脉冲序列作为载波.
主要参数—幅度、宽度和位置。
脉冲模拟调制:
用模拟基带信号控制脉冲序列的参数变化传送信号样本值。
脉冲数字调制:
用脉冲码组表示调制信号采样值。
脉码调制—将模拟调制信号的采样值变换为脉冲码组。
PCM编码包括如下三个过程。
抽样:
将模拟信号转换为时间离散的样本脉冲序列。
量化:
将离散时间连续幅度的抽样信号转换成为离散时间离散幅度的数字信号。
编码:
用一定位数的脉冲码组表示量化采样值。
(a)信号的抽样值和量化抽样值
(b)二进制PCM信号(单极性码)
码速率:
其中Tb为码元间隔。
解调:
接收机中恢复信源信息的过程。
码元:
脉冲码组的每个脉冲。
码长n:
码组中包含的码元个数。
码同步和帧同步:
系统的抗噪声性能:
信号与量化噪声的功率
比误码率
2、PCM编码原理
编码:
把量化后的信号电平值转换成二进制
编码的过程.
常用三种:
自然二进制码组NBC;
折叠二进制码组FBC;
格雷二进制码组RBC;
PCM通信中采用折叠码.
3、码型:
(1)常用二进制码型
自然二进制码(NaturalBinaryCode,NBC):
码字与电平值的对应关系简单。
一般的十进制正整数的二进制表示。
反射二进制码(ReflectedBinaryCode,RBC):
/格雷码
任何相邻的电平的码组,只有一位码位发生变化。
折叠二进制码(FoldedBinaryCode,FBC):
除去左边第一位,其余部分从电平序号中部
呈上下对称(折叠关系)
左边第一位是符号位。
(1表示正;0表示负)
4、编码方式:
非均匀量化编码,以A87.6/13折线为例。
A律的国际标准PCM编码
5、解码器工作原理
1.线性解码
权电阻网络型解码器(n=7)
开关Ki接E而其余开关接地时,网络输出一个码组对应的输出
电压
2.非线性解码:
数字压扩折线解码器原理框图
1.极性控制电路
2.数字压扩改用7/12变换电路
量化误差由原来的∆Vi减小为∆vi/2
三、详细设计步骤:
1、利用matlab绘制正态分布频谱图:
利用y=randn(1,1000)产生1000个随机数,然后取出部分点来画出其局部图。
这样再利用subplot函数实现子图的画法,并且对所画的图做标识,设置好各部分的参数,利用matlab里面的FFT函数进行快速傅里叶变换,然后画出正态分布频谱图,
2、进行非均匀编码函数处理
编写编码处理函数,非均匀编码处理中需要进行平稳处理,函数还需要进行非均匀的量化间隔编码,进行十进制转化为二进制然后接成长串
3、画出u=255的非均匀PCM编码,每符号为8bit,画出输入-输出关系图:
设置好各个参数然后利用公式yu=log(1+u*x)/(log(1+u));再进行图形编码处理。
4、进行信道加噪函数处理
首先要计算误码为1/1000的误码个数,可以算得信道误码率为w/(1024*8)=1/1000,然后再对w进行取整,然后确定需要加入噪声的点值,再将噪声加入到对应的点值进行取反处理。
5、进行解码函数处理。
先进行译码处理利用:
yym(i)=jiema(ybm(((i-1)*8+1):
i*8)此时还需要调用解码函数进行处理,然后编写代码显示解码后的波形和解码后的局部图,下面进行显示解码后的频谱图。
6、进行均匀PCM信道加噪函数处理
也是先进行计算误码个数,算得信道误码率为jy_w/(1024*ln),再进行取整处理,然后产生jy_w个均匀分布的随机数,确定需要加入噪声的点值,然后将噪声加入到对应的点值进行取反,最后进行解码函数处理,显示出PCM解码后的波形
以下为程序代码及各个函数代码:
PCM:
clearall;
closeall;
%以下函数为产生1000个正态分布的随机数
js=input('输入需要的误码率:
');
y=randn(1,1000);%产生1000个随机数
figure
(1)%用来画时域波形
subplot(2,1,1),plot(y),title('标准正态分布随机信号1000个点')...
ylabel('信号值'),xlabel('t')
subplot(2,1,2),plot(y),axis([500,550,-4.5,4.5]),title('局部图')...
xlabel('t')
z=zeros(1,24);
m=[y,z];%补零
n=10/1024:
10/1024:
10;
yt=fft(m);%进行快速傅立叶变换
yw=abs(yt);%取模
figure
(2)%用来画频谱
subplot(2,1,1),plot(n,yw),title('正态分布频谱图'),xlabel('w')
subplot(2,1,2),plot(n,yw),title('正态分布频谱图局部图'),xlabel('w')...
axis([10/1024,1,0,100])
%以下函数为非均匀编码函数
fori=1:
1000
ybm1=bianma(y(i));%编码处理
forj=1:
8
ybm((i-1)*8+j)=ybm1(j);
end;
end;
%以下函数画U=255的输入输出关系图
figure(3)
x=0:
0.01:
1;
u=255;
yu=log(1+u.*x)/(log(1+u));
plot(x,yu),title('u=255的输入输出关系图'),xlabel('x')
gridon
%以下函数为信道加噪函数
%js为信道误码率
w=8*1000*js;%计算误码为1/1000的误码个数
%可以算得信道误码率为w/(1024*8)=1/1000
w=fix(w);%取整
ywm=rand(1,w);%产生w个均匀分布的随即数
w1=ywm.*1000*8;
w2=fix(w1);%确定需要加入噪声的点值
ybm(w2)=qufan(ybm(w2));%将噪声加入到对应的点值(取反)
%以下函数为解码函数
fori=1:
1000
yym(i)=jiema(ybm(((i-1)*8+1):
i*8));%译码处理
end;
figure(4)%用来画解码输出的波形
subplot(2,1,1),plot(yym),title('解码后的波形'),xlabel('t')
subplot(2,1,2),plot(yym),title('解码后的波形局部图')...
axis([500,550,-4.5,4.5]),xlabel('t')
mn=[yym,z];%补零
yyt=fft(mn);%进行快速傅立叶变换
yytm=abs(yyt);%取模
figure(5)%用来画频谱
subplot(2,1,1),plot(n,yytm),title('解码后频谱图'),xlabel('w')
subplot(2,1,2),plot(n,yytm),title('解码后频谱图局部图'),xlabel('w')...
axis([10/1024,1,0,100])
%计算量化信噪比
%SQNR=u_pcm(y,256)
%
%以下是均匀PCM
jishu=input('输入均匀PCM的级数:
');
l_n=log2(jishu)%求位数
fori=1:
1000
jy_ybm1=junyunma(y(i),jishu);%编码处理
forj=1:
l_n
jy_ybm((i-1)*l_n+j)=jy_ybm1(j);
end;
end;
%以下函数为均匀PCM信道加噪函数
%js为信道误码率
jy_w=l_n*1000*js;%计算误码个数
%可以算得信道误码率为jy_w/(1024*ln)
jy_w=fix(jy_w);%取整
jy_ywm=rand(1,jy_w);%产生jy_w个均匀分布的随即数
jy_w1=jy_ywm.*1000.*l_n;
jy_w2=fix(jy_w1);%确定需要加入噪声的点值
jy_ybm(jy_w2)=qufan(jy_ybm(jy_w2));%将噪声加入到对应的点值(取反)
%以下函数为解码函数
fori=1:
1000
jy_yym(i)=junyujiema(jy_ybm(((i-1)*l_n+1):
i*l_n),jishu);%译码处理
end;
figure(6)%用来画解码输出的波形
subplot(2,1,1),plot(jy_yym),title('均匀PCM解码后的波形'),xlabel('t')
subplot(2,1,2),plot(jy_yym),title('均匀PCM解码后的波形局部图')...
axis([500,550,-4.5,4.5]),xlabel('t')
jy_mn=[jy_yym,z];%补零
jy_yyt=fft(jy_mn);%进行快速傅立叶变换
jy_yytm=abs(jy_yyt);%取模
figure(7)%用来画频谱
subplot(2,1,1),plot(n,jy_yytm),title('均匀PCM解解码后频谱图'),xlabel('w')
subplot(2,1,2),plot(n,jy_yytm),title('均匀PCM解解码后频谱图局部图')...
xlabel('w'),axis([10/1024,1,0,100])
functionbm=bianma(bm1)
%用于将十进制编成二进制
%bm编码输出
%b1输入参数
a1=4.5;
a11=-4.5;
%以下函数做平稳处理
ifbm1>a1
bm1=a1;
end;
ifbm1bm1=a11;
end;
%
a0=4079.5*bm1./a1;
ifbm1<0
f='0';%字符的级性表示'0'为负,'1'为正
else
f='1';
end;
a2=abs(a0);
%以下函数实现非均匀的量化间隔编码
ifa2<=15.5
c1=fix(a2+0.5);%向零取整
d1='000';%字符串存m2:
m4
e1=dec2bin(c1,4);%十进制转化为二进制
p=strcat(d1,e1);%接成长串
elseifa2<=47.5
b2=a2-15.5;
c2=fix(b2./2);
d2='001';
e2=dec2bin(c2,4);
p=strcat(d2,e2);
elseifa2<=111.5
b3=a2-47.5;
c3=fix(b3./4);
d3='010';
e3=dec2bin(c3,4);
p=strcat(d3,e3);
elseifa2<=239.5
b4=a2-111.5;
c4=fix(b4./8);
d4='011';
e4=dec2bin(c4,4);
p=strcat(d4,e4);
elseifa2<=495.5
b5=a2-239.5;
c5=fix(b5./16);
d5='100';
e5=dec2bin(c5,4);
p=strcat(d5,e5);
elseifa2<=1007.5
b6=a2-495.5;
c6=fix(b6./32);
d6='101';
e6=dec2bin(c6,4);
p=strcat(d6,e6);
elseifa2<=2031.5
b7=a2-1007.5;
c7=fix(b7./64);
d7='110';
e7=dec2bin(c7,4);
p=strcat(d7,e7);
else
b8=a2-2031.5;
c8=fix(b8./128);
d8='111';
e8=dec2bin(c8,4);
p=strcat(d8,e8);
end;
end
end
end
end
end
end
bm=strcat(f,p);%接成长串
FIR:
%hisimpulsere8ponseofFIRfilter。
sisoriginal8is,lal,disfilteredsignal
%fland岔aIefim[uencyof8i目r18ls.岛issamplefrequency
function[h,s,sf]=FIR(f1,f2,f3,fs)
m=(0.3*f2)/(fs/2);%definetransitionbandwidth
M=round(8/m);%definelengthofhammingwindow
N=M-1;%defineorderofFIRfilter
b=fir1(N,30*12/(fs/2));
[h,f]=freqz(b,1,512);%frequencyresponseoffilter
plot(f*fs/(2*pi),20*log10(abs(h)))%drawmagnitude—frequencyoffilter
xlabel('equency/','fontsize',8,'fontweight','bold')
set(gca,'fontsize',8,'fontweight','bold')
figure
subplot(211)
t=0:
1/fs:
1;
s=sin(2*pi*f1*t)+sin(2*pi*f2*t)+sin(2*pi*f3*t);
plot(t,s);%draworiginMsigllalS
xlabel('time/Second','fontsize',8,'fontweight','bold')
set(gca,'fontsize',8,'fontweight','bold')
subplot(212)
SK=fft(s,512);
SXK=abs(SK);
f=(0:
255)*fs/512;
plot(f,SXK(1:
256))%drawmagnitude_frequencyofsn
xlabel('Frequency/Hz','fontsize',8,'fontweight','bold')
set(gca,'fontsize',8,'fontweight','bold')
figure
sf=filter(b,1,s);%filter8
subplot(211)
plot(t,sf)%drawfilteredsigna/st"
xlabel('time/Second','fontsize',8,'fontweight','bold')
set(gca,'fontsize',8,'fontweight','bold')
axis([0.20.5-44])
subplot(212)
SFK=fft(sf,512);
SFXK=abs(SFK);
f=(0:
255)*fs/512;
plot(f,SFXK(1:
256))
xlabel('Frequency/Hz','fontsize',8,'fontweight','bold')
set(gca,'fontsize',8,'fontweight','bold')
end
jiema函数:
functionym=jiema(jm1)
%将二进制编码译成输出电平值
%ym译码输出
%x1编码序列(每次处理8位)
%
%
a0=4.5;
jy=jm1
(1);%访问第一个元素
dl=jm1(2:
4);%访问第2到4个元素
dl0=bin2dec(dl);%将2进制转化为十进制
dp=jm1(5:
8);%访问第5到8个元素
dp0=bin2dec(dp);
switchdl0
case0
yl=dp0*1;
case1
yl=dp0*2+16.5;
case2
yl=dp0*4+49.5;
case3
yl=dp0*8+115.5;
case4
yl=dp0*16+247.5;
case5
yl=dp0*32+511.5;
case6
yl=dp0*64+1039.5;
case7
yl=dp0*128+2095.5;
end
jg=yl*a0./4015.5;
ifjy=='1'
ym=jg;
else
ym=-jg;
end;
junyunma函数:
functionjym=junyunma(jm,js)
%均匀编码,将十进制转化为二进制
%jm为输入
%js为需要的编码级数
%jym为输出
%
a1=4.5;
a11=-4.5;
ifjm>a1
jm=a1;
end;
ifjmjm=a11;
end;
a0=jm*js./a1;
ln=log2(js);
ifjm<0
f='0';
else
f='1';
end;
a2=abs(a0);
c1=fix(a2+0.5);%向零取整
p=dec2bin(c1,(ln-1));%十进制转化为二进制
jym=strcat(f,p);%接成长串
qufan函数:
functionqf=qufan(q)
%信噪计入(取反)
%q入参
%qf出参
ifq=='1'
qf='0';
else
qf='1';
end
四、设计结果及分析
利用y=randn(1,1000)产生1000个随机数,然后取出部分点来画出其局部图。
这样再利用subplot函数实现子图的画法,并且对所画的图做标识,如标题,幅度。
具体图形如图所示:
利用快速傅立叶变换来进行频谱分析,这样再利用subplot函数实现子图的画法,并且对所画的图做标识,如标题,幅度。
具体图形如图所示:
下面为解码后的波形以及解码后的局部图:
解码后的频谱以及解码后的频谱局部图:
利用matlab来画出u=255的输入输出关系图,如图所示:
五、体会:
在本次课程设计的过程中,首先是针对题目进行了仔细的分析,将所涉及到的波形,频谱及相关函数做了研究,然后通过查阅大量资料加深对编码、解码、以及加噪的理解,大体上能够把握设计的基本思路,通过这次课程设计,不仅加深了对pcm编码有了较为深刻的理解外,对相应的其他课程也起到了一定的作用,尤其是通过matlab来实现通信系统。
六、参考文献
1、曹志刚.钱亚生.现代通信原理.清华大学出版社,1994
2、刘树棠译《信号与系统》第二版,西安交通大学出版社,1998
3、张威《MATLAB基础与编程入门》第二版,西安电子科技大学出版社,2008