学生姓名: 郑丁华 专业班级: 通信0906班 指导教师: 苏 杭 工作单位: 武汉理工大学信息学院
题目: 通信系统课群综合训练与设计 初始条件: MATLAB 软件,电脑,通信原理知识 要求完成的主要任务:
1、利用仿真软件(如Matlab或SystemView),或硬件实验系统平台上设计完
成一个典型的通信系统
2、学生要完成整个系统各环节以及整个系统的仿真,最终在接收端或者精确
或者近似地再现输入(信源),计算失真度,并且分析原因。
时间安排:
序设 计 内 容 所用时间 号 1 根据设计任务,分析电路原理,确定实验方案 2天 根据实验条件进行电路的测试,并对结果进行2 7天 分析 3 撰写课程设计报告 1天 合 计 2周
指导教师签名: 2013 年 1 月 14日 系主任(或责任教师)签名: 2013 年 1 月 14日
I
武汉理工大学《通信系统课群综合训练与设计》报告 目录
摘要 .......................................................................................................................................... 1 Abstract ............................................................................................................................................. 2 1.通信系统整体概述 ....................................................................................................................... 3 2.各部分原理简述 ........................................................................................................................... 4
2.1.脉冲编码调制(PCM)原理 ............................................................................................. 4 2.2.HDB3码原理 ...................................................................................................................... 8 2.3.循环码编码原理 ............................................................................................................... 9
2.3.1.RS循环码编译码原理与特点 ............................................................................ 9 2.3.2.编码原理: ......................................................................................................... 10 2.3.3.译码原理: ......................................................................................................... 11 2.4.PSK调制与解调原理 ...................................................................................................... 13
2.4.1.psk调制原理 ...................................................................................................... 13 2.4.2.psk解调原理 ...................................................................................................... 14
3.各部分程序的MATLAB仿真 ....................................................................................................... 16
3.1.PCM编译码的MATLAB仿真 ............................................................................................ 16 3.2.HDB3码的MATLAB程序仿真 .......................................................................................... 18 3.3.循环码编译码的MATLAB实现 ....................................................................................... 20 3.4.PSK调制与编码的MATLAB仿真 .................................................................................... 22 4.整体通信过程的MATLAB仿真 ................................................................................................... 24 5.结果分析..................................................................................................................................... 35 6.小结体会..................................................................................................................................... 36 7.参考文献..................................................................................................................................... 37
II
武汉理工大学《通信系统课群综合训练与设计》报告 摘要
本文是基于PCM编码的PSK信号的MATLAB仿真。本文先分析了PSK系统的基本调制解调方法,用PCM编码将模拟信号转换为离散的数字信号,在基带中采用HDB3码编码,信道预编码采用循环码,在衰落信道中采用PSK调制技术,然后用MATLAB来仿真通信系统的整个过程。通过仿真,观察了调制解调过程中各个环节时域和频域的波形,并结合调制原理,跟踪分析比较了各种调制方法的性能,并通过比较仿真与理论计算的性能,证明了仿真的可靠性。通过这次的课程设计让我们加深了对课本知识的深入理解,而且也让我们更加熟练地运用MATLAB仿真软件。
关键词:PCM编码,HDB3,循环码,PSK,MATLAB
1
武汉理工大学《通信系统课群综合训练与设计》报告 Abstract
As we all known ,PSK modulation is the most important part in modern communication system.Also,the technology of improving PSK modulation is the most essensial approach to improve the function of modern communication system.This paper is based on the PCM coding, HDB3 coding, Cyclic coding and MATLAB to ahieve PSK .In this paper ,the method of PSK modulation are introduced firstly,and PCM coding is used to transfer the analog signal to digital signal.Then the M-document in MATLAB is used to simulate.Through observing the results of simulation,the factors that affect the capability of the PSK and DPSK modulation system and the reliability of the simulation models are analyzed.By this curriculum design ,we not only make a comprehensive understanding of the knowledge in the books,but also being skilled in using the MATLAB simulation software.
Key words :PCM coding,HDB3 coding,Cycle coding,PSK,MATLAB
2
武汉理工大学《通信系统课群综合训练与设计》报告 1.通信系统整体概述
通信系统通常由信源、信道和信宿构成,其中包括模拟信号的数字化,基带信号的编码与解码,信道编码与解码,数字信号的调制与解调。
一个典型的通信系统如图1.1所示:
信源 信 源 编码器 信道 编码器 数字 调制器 数字信源 噪声 信道 信宿 信 源 译码器 数字信宿 图1.1 数字通信系统模型
信道 译码器 数字 解调器 编码信道
本课设要求用MATLAB设计一简单的通信系统,要求采用PCM编译码,基带信号用HDB3码,信道编译码采用循环码,调制方式为PSK,信道为衰落信道。
3
武汉理工大学《通信系统课群综合训练与设计》报告 2.各部分原理简述
2.1.脉冲编码调制(PCM)原理
脉冲编码调制就是把一个时间连续,取值连续的模拟信号进行取样,变换成时间离散的信号后,在进行量化、编码,变换成时间离散、取值离散的数字信号的过程。
脉冲编码调制包括抽样、量化、编码三个过程。 (1)抽样
模拟信号通常是在时间上连续的信号,一在系列离散的点上,对这种信号抽取样值称为抽样。在理论上,抽样过程可以看作是用周期性单位冲激脉冲和此模拟信号相乘。抽样结果得到的是一系列周期性的冲激脉冲,其面积和模拟信号的取值成正比。由抽样定理,只要抽样脉冲的频率大于或等于信号最高频率的2倍时,信号就能被恢复出来。
所谓抽样就是对信号进行周期性的扫描,把时间上连续的信号变为时间上离散的信号。
抽样前后的信号波形图如图2.1所示:
图 2.1 抽样前后的信号波形图
但由于实际的电路不可能产生理想的冲激脉冲,故抽样的结果是平顶脉冲,如图2.2所示。
4
武汉理工大学《通信系统课群综合训练与设计》报告
图2.2 抽样示意图
所谓量化就是把抽样得到的瞬时值将其幅度离散,即用一组规定的电平,把瞬时抽样值用最接近的电平值表示。
量化分为均匀量化和非均匀量化。均匀量化时,量化间隔是确定的,量化器的平均输出信号量噪比随量化电平数M的增大而提高,故这种均匀量化器对于小输入信号很不利。在非均匀量化时,量化间隔是随信号抽样值的不同而变化的。信号抽样值小时,量化间隔也小,信号抽样值大时,量化间隔也变大。故在实际应用中常采用非均匀量化。
设模拟信号的抽样值为m(KT),其中T是抽样周期,k为整数。此抽样值仍然是一个取值连续的变量。若仅用N个二进制数字码元来代表此抽样值的大小,则N个二进制码元只能代表M=2个不同的抽样值。这样,共有M个离散电平,它们称为量化电平。用这M个量化电平表示连续抽样值的方法称为量化。在原理上,量化过程可以认为是在一个量化器中完成的。在实际中,量化过程常是和后续的编码过程结合在一起完成的,不一定存在量化器。
N非均匀量化的实现方法通常是在进行量化之前,先将信号抽样值压缩再进行均匀量化。通常使用的压缩器中,大多采用对数式压缩。广泛采用的两种对数压缩律是压缩律和A压缩律。
(3)编码
所谓编码就是用一组二进制码组来表示每一个固定电平的量化值。然而,实际上量化是在编码过程中完成的,故编码过程也称为模数变换(A/D)。
最常用的编码是用二进制的符号,例如“0”和“1”,表示此离散数值。在用电路实现时,最常用的是一种方案称为逐次比较法编码,其基本原理方框图如图2.3所示。此图示出的是一个3位编码器。编码器的输入信号抽样脉冲值在0和7.5之间。它将输入的信号模拟抽样脉冲编成3位二进制编码c1c2c3.
5
武汉理工大学《通信系统课群综合训练与设计》报告 Is 输入脉冲 抽样信号 保持电路 Iw 比较器 Is>Iw,ci =1 Is 如图2.3所示,输入信号抽样脉冲电流Is由保持电路短时间保持,并各几个称为权值电流的标准电流Iw逐次比较。每比较一次,得出1位二进制码。权值电流Iw是在电路中预先产生的。Iw的个数决定于编码的位数,现在共有三个不同的Iw值。因为表示量化值的二进制码有3位,即c1c2c3。它们能够表示8个十进制数,从0到7,如表2.1所列。 表2.1编码表 量化值 0 1 2 3 c1 0 0 0 0 c2 0 0 1 1 c3 0 1 0 1 量化值 4 5 6 7 c1 1 1 1 1 c2 0 0 1 1 c3 0 1 0 1 在15 折线法中采用的折叠码有9位。其中第一位c1表示量化值的极性正负。后面的8位分为段落码和段内码两部分,用于表示量化值的绝对值。其中第2到4位(c2c3c4)是段落码,共计3位,可以表示8种斜率的段落;其他5位(c5~c9)为段内码,可以表示每一段落内的32种量化电平。段内码代表的32个量化电平是均匀划分的,所以,这8位共能表示2256种量化值。 在进行PCM编码时,我国大陆、欧洲各国以及国际间互连时采用A压缩律及相应的13折线法,北美、日本和韩国等少数国家和地区采用u压缩律及15折线法。A律压缩先将原信号进行非均匀量化,再进行均匀量化。对小信号进行细致编码,对大信号进行粗略编码,结果是小信号的量噪比高,大信号的量噪比低。 PCM码由极性码、段落码、段内码组成。极性码位于最高位,若抽样值为 8 6 武汉理工大学《通信系统课群综合训练与设计》报告 正,则极性码为“1”,若抽样值为负,则极性码为“0”。段落码对应于A律编码非均匀量化区间,其编码方法见表2.2。 表 2.2 段落码的编码 段落序号 8 7 6 5 4 3 2 1 段落码(C2C3C4) 111 110 101 100 011 010 001 000 量化范围(量化单位) 1024—2048 512——1024 256———512 128———256 64————128 32—————64 16—————32 0——————16 段内码就是对段落码的每个区间在进行均匀量化,若采用自然二进制码的编码方式,编码方法见表2.3。 表 2.3 段内码的编码 量化间隔 15 14 13 12 11 10 9 8 段内码(C5C6C7C8) 量化间隔 1111 1110 1101 1100 1011 1010 1001 1000 7 6 5 4 3 2 1 0 段内码(C5C6C7C8) 0111 0110 0101 0100 0011 0010 0001 0000 由此可见,脉冲编码调制方式就是一种传递模拟信号的数字通信方式。 PCM编码的框图如图2.4所示: 模拟 信号 输入 抽样保持 量化器 编码器 PCM信号输出 冲激脉冲 图 2.4 PCM编码的系统框图 将PCM脉冲流解调为原模拟信号的过程即为PCM译码过程,PCM译码过程是PCM编码过程的逆过程。其过程为: 7 武汉理工大学《通信系统课群综合训练与设计》报告 (1) 按照编码表将二进制的脉冲流还原为对应的十进制数值。 (2) 对照量化表将(1)中的十进制的数值转化为对应的量化电平值。 (3) 将(2)中得到的平顶脉冲通过一低通滤波器,得到还原的模拟信号。 2.2.HDB3码原理 HDB3(3nd Order High Density Bipolar)码的全称是三阶高密度双极性码。它是AMI码的一种改进型,改进的目的是为了保持AMI码的优点而克服其缺点,使连零的个数不超过三个。下面先对AMI码作简要介绍。 AMI(Alternative Mark Inversion)码的全称是传号交替反转码,其编码的规则是将消息码的“1”(传号)交替的变化为“+1”和“-1”,而“0”(空号)保持不变。AMI码的优点是没有直流成分,且高低频分量少,能量集中频率为1/2的码速处,其编译码电路简单。但当信源中出现长串的“0”符号时,信号的电平长时间不跳变,造成提取定时信号的困难。解决长串“0”码问题的有效方法之一是采用HDB3码。 HDB3码的编码规则是: (1) 检查消息码中“0”的个数。当“0”的数目小于等于3时,HDB3 码与AMI码一样,+1与-1交替。 (2) 当连“0”数目超过3时,将每4个连“0”化作一小节,定义为 B00V,称为破坏节,其中V称为破坏脉冲,B称为调节脉冲。 (3) V与前一个相邻的非“0”脉冲的极性相同(这就破坏了极性交替 的规则),且相邻的V码之间的极性必须交替。V的取值为+1或-1。 (4) B的取值可选0,+1,-1,以使V同时满足(3)中要求。 (5) V码后面的传号极性也要交替。例如: 消息码: 1 1 0 0 0 0 0 0 0 0 1 1 AMI码: -1 1 0 0 0 0 0 0 0 0 -1 1 HDB3码: -1 1 -B 0 0 -V +B 0 0 +V -1 1 HDB3码的编码虽然比较复杂,但译码却比较简单。从上述的编码规则可以看出,每一个破坏脉冲V总是与前一个非“0”脉冲同极性(包括B在内)。这就是说,从收到的符号序列中可以容易的找到破坏点V,于是断定V符号及其前面的三个符号必须是连“0”符号,从而恢复出四个连“0”码,再将所有的-1变成+1后便得到原消息码。 HDB3码除了具有AMI码的优点外,同时还将连“0”码限制在三个以内,使得接收时能保证定时信息的提取。因此,HDB3码是目前应用最为广泛的码型,A律PCM四次群以下的接口码型均为HDB3码。 8 武汉理工大学《通信系统课群综合训练与设计》报告 2.3.循环码编码原理 2.3.1.RS循环码编译码原理与特点 设C使某(n,k)线性分组码的码字集合,如果对任 C(cn1,cn2,,c0)C,它的循环移位C(1)(cn2,cn3,c0,cn1)也属于C, 则称该(n,k)码为循环码。 该码在结构上有另外的限制,即一个码字任意循环移位的结果仍是一个有效码字。其特点是: (1)可以用反馈移位寄存器很容易实现编码和伴随式的计算; (2)由于循环码有很多固有的代数结构,从而可以找到各种简单使用的译码办法。 如果一个(n,k)线性码具有以下的属性,则称为循环码:如果n元组c{c0,c1,,cn1}是子空间S的一个码字,则经过循环移位得到的 c(1){cn1,c0,,cn2}也同样是S中的一个码字;或者,一般来说,经过j次循环 移位后得到的c(j){cnj,cnj1,,cn1,c0,c1,,cnj1}也是S中的一个码字。 RS码的编码系统是建立在比特组基础上的,即字节,而不是单个的0和1,因此它是非二进制BCH码,这使得它处理突发错误的能力特别强。 码长:n2m1 信息段:kn2t (t为纠错符号数) 监督段:2tnk 最小码段:d2t1 最小距离为d的本原RS码的生成多项式为:g(x)=(x-α)(x-α2)(x-α3)…(x-αd-2) 信息元多项式为::m(x)=m0+m1x+m2x2+…+mk-1xk-1 循环码特点有: (1)循环码是线性分组码的一种,所以它具有线性分组的码的一般特性,且具有循环性,纠错能力强。 (2)循环码是一种无权码,循环码编排的特点为相邻的两个数码之间符合卡诺中的邻接条件,即相邻数码间只有一位码元不同,因此它具有一个很好的优点是它 9 武汉理工大学《通信系统课群综合训练与设计》报告 满足邻接条件,没有瞬时错误(在数码变换过程中,在速度上会有快有慢,中间经过其他一些数码形式,即为瞬时错误)。 (3)码字的循环特性,循环码中任一许用码经过牡环移位后,所得到的码组仍然是许用码组。 循环码中的生产多项式g(x)的次数为n-k次,且g(x)的最低位不为“0”。 2.3.2.编码原理: k1m(x)mxm0,其中最高幂次为k-1; k1由信息码构成信息多项式nk用x乘以信息多项式m(x),得到的xnkm(x),最高幂次为n-1,该过程相当于 把信息码( mk1, mk2,……,m1, m0)移位到了码字德前k个信息位,其后 是r个全为零的监督位; nkxm(x)得到余式r(x),其次数必小于g(x)的次数,即小于(n-k)用g(x)除,将此nkxm(x)相加,得到的多项式必为一码r(x)加于信息位后做监督位,即将r(x)于 多项式。综上所述,循环码的编码步骤为: (1)有信息码构成信息多项式m(x)=mk-1xk-1+``````m0,其中高幂次为k-1。 (2)用xn-k乘上信息多项式m(x),得最高幂次为n-1,做移位。 (3)用g(x)除xn-km(x)得到余式r(x)。 (4)用xn-km(x)加余式r(x)得到循环码。 编码过程流程图如图2.5所示: 10 武汉理工大学《通信系统课群综合训练与设计》报告 图 2.5 循环码编码流程图 2.3.3.译码原理: 由接收到的y(x)计算伴了随式s(x)。 根据伴随式s(x)找出对应的估值错误图样。 计算c^(x)=y(x)+e^(x),得估计码字。若c^(x)= c(x),则译码正确,否则错误。 由于g(x) 的次数为n - k 次,g(x) 除E(x) 后得余式(即伴随式)的最高次数为n-k-1次,故S(x) 共有2n-k 个可能的表达式,每一个表达式对应一个错误格式。可以知道(7,4)循环码的S(x) 共有2(7-4) = 8个可能的表达式,可根据错误图样表来纠正(7,4)循环码中的一位错误。 11 武汉理工大学《通信系统课群综合训练与设计》报告 解码过程流程图如图2.6示: 图 2.6 循环码解码流程图 12 初始化 由R(x)确定S(x):错误!未找到引用源。 S(x)=0,无误码误否 由S(x)确定错误图样E(x) 纠错c(x)E(X)R(X) 存储c(x) 武汉理工大学《通信系统课群综合训练与设计》报告 2.4.PSK调制与解调原理 2.4.1.psk调制原理 2PSK信号用载波相位的变化来表征被传输信息的状态,通常规定0相位载波和π相位载波分别表示传“1”和传“0”。 设二进制单极性码为an,其对应的双极性二进制码为bn,则2PSK信号的一般时域信号可以表示为: S2psk(t)= [bn g(t-nTs)]cosωct n式中 bn=-1(当an=0时,概率为P) bn=1(当an=1时,概率为1-P) 则时域信号可以变为: S2psk(t)= [g(t-nTs)]cos(ωct+π) 当an=0时 n S2psk(t)= [g(t-nTs)]cos(ωct+0) 当an=1时 n由此可知2PSK信号是一种双边带信号,2PSK信号的带宽为: B2PSK=(ƒc+Rs)-(ƒc-Rs)= 2Rs 式中Rs为码元速率。 值得注意的是,2PSK码元序列的波形与载频和码元持续时间之间的关系有关。当一个码元中包含有整数个载波周期时,在相邻码元的边界处波形是不连续的,或者说相位是不连续的。当一个码元中包含的载波周期数比整数个周期多半个周期时,则相位连续。当载波的初始相位差90度时,即余弦波改为正弦波时,结果类似。以上说明,相邻码元的相位是否连续与相邻码元的初始相位是否相同不可混为一谈。只有当一个码元中包含有整数个载波周期时,相邻码元边界处的相位跳变才是由调制引起的相位变化[16]。 2PSK信号的产生方法主要有两种。第一种叫相乘法,是用二进制基带不归零矩形脉冲信号与载波相乘,得到相位反相的两种码元。第二种方法叫选择法,是用此基带信号控制一个开关电路,以选择输入信号,开关电路的输入信号是相位相差的同频载波。这两种方法的复杂程度差不多,并且都可以用数字信号处理器实现。 2PSK信号的调制原理框图如图2.7所示 13 武汉理工大学《通信系统课群综合训练与设计》报告 图 2.7 2PSK信号的调制原理框图 2.4.2.psk解调原理 2PSK信号的解调方法是相干解调法。由于PSK信号本身就是利用相位传递信息的,所以在接收端必须利用信号的相位信息来解调信号。下图2-3中给出了一种2PSK信号相干接收设备的原理框图。图中经过带通滤波的信号在相乘器中与本地载波相乘,然后用低通滤波器滤除高频分量,在进行抽样判决。判决器是按极性来判决的。即正抽样值判为1,负抽样值判为0. 2PSK信号相干解调各点时间波形如图 2.4 所示. 当恢复的相干载波产生180°倒相时,解调出的数字基带信号将与发送的数字基带信号正好是相反,解调器输出数字基带信号全部出错. 图 2.8 相干解调各点波形 14 武汉理工大学《通信系统课群综合训练与设计》报告 这种现象通常称为\"倒π\"现象.由于在2PSK信号的载波恢复过程中存在着180°的相位模糊,所以2PSK信号的相干解调存在随机的\"倒π\"现象,从而使得2PSK方式在实际中很少采用. 2PSK信号的调制原理框图如图2.9所示: 2PSK 带通滤波 相乘 cosωt 本地载波 提取 低通滤波 V(t) 抽样判决 解调器 定时脉冲 图 2.9 2PSK信号的解调原理框图 说明:由于PSK信号的功率谱中无载波分量,所以必须采用相干解调的方式。在相干解调中,如何得到同频同相的本地载波是个关键问题。只有对PSK信号进行非线性变换,才能产生载波分量。2PSK信号经过带通滤波器得到有用信号,经相乘器与本地载波相乘再经过低通滤波器得到低频信号v(t),再经抽样判决得到基带信号。 15 武汉理工大学《通信系统课群综合训练与设计》报告 3.各部分程序的MATLAB仿真 3.1.PCM编译码的MATLAB仿真 用MATLAB进行PCM编码的程序如下所示: clear;clc; N=8;%编码位数为8位 dt=1/8;%抽样时间间隔 endtime=4; t=0:dt:endtime;%时间范围设定 %抽样 for i=1:endtime/dt x(i)=sin(dt*i*pi); end a=-1;b=1;%量化范围设定 dv=(b-a)/2^7;%量化间隔 for i=1:128 m(i)=a+i*dv;%量化值 end for i=1:128-1; q(i)=(m(i)+m(i+1))/2;%量化中值 end minm=min(m); %量化 for i=1:endtime/dt; for j=1:128-1 if((x(i)>=m(j))&&(x(i)<=m(j+1))) xq(i)=q(j); xc(i)=j-64+1; elseif x(i)==0 xq(i)=0; xc(i)=0; elseif x(i) for i=1:endtime/dt if xc(i)<=0 %负极性最高位为0 16 武汉理工大学《通信系统课群综合训练与设计》报告 xcc(i)=abs(xc(i)); elseif xc(i)>0 %正极性最高位为1 xcc(i)=(xc(i))+128; end end xpcm=dec2bin(xcc,8);%将量化值转化为0,1代码 抽样图如图3.1示: 806040200-20-40-60-8005101520253035图 3.1 原信号的抽样图样 程序运行后得到的PCM序列为: >> xpcm xpcm = 10011001 00011000 10011001 00011000 10101110 00101101 10101110 00101101 10111100 00111011 10111100 00111011 11000000 00111111 11000000 00111111 10111100 00111011 10111100 00111011 10101110 00101101 10101110 00101101 10011001 00011000 10011001 00011000 10000001 00000000 10000001 00000000 17 武汉理工大学《通信系统课群综合训练与设计》报告 3.2.HDB3码的MATLAB程序仿真 %HDB3码的编译码过程 %输入为xpcm for i=1:32 ff(8*(i-1)+1:8*i)=xpcm(i,:); end%将得到的PCM码转换为一维序列 AMI=[];%定义AMI码 k=1; %将PCM码转化为AMI码 for i=1:endtime/dt*8 if ff(i)==dec2bin(1)%因为PCM序列是二进制的 AMI(i)=(-1)^k; k=k+1; else AMI(i)=0; end end %AMI码转换完成 %HDB3编码开始 %检测连“0”数目超过4的码元序列 %定义破坏节“B00V”,将第四个“0”标记为V,用“8”表示 for i=1:endtime/dt*8-3 if (AMI(i)==0)&&(AMI(i+1)==0)&&(AMI(i+2)==0)&&(AMI(i+3)==0) AMI(i+3)=8; end end %使V码元的符号与前一个非“0”码元的符号相同 for i=1:endtime/dt*8 if AMI(i)==8 hdb1(i)=AMI(i-4)/abs(AMI(i-4))*8; else hdb1(i)=AMI(i); end end hdb2=hdb1; hdb3=hdb2; V=[]; B=[]; 18 武汉理工大学《通信系统课群综合训练与设计》报告 k=1; %记录每一个V码元的位置 for i=1:endtime/dt*8 if (hdb2(i)==8)||(hdb2(i)==-8) V(k)=i; k=k+1; end end %加入B码元,以使序列满足HDB3码的要求 for i=2:k-1 %相邻两个V码元的极性必须是交替的 if hdb3(V(i))*hdb3(V(i-1))>0 hdb3(V(i))=-hdb3(V(i)); %用B码元来调整破坏节,用“5”表示 hdb3(V(i)-3)=hdb3(V(i))/abs(hdb3(V(i)))*5; elseif (hdb3(V(i))*hdb3(V(i-1))<0)&&(hdb3(V(i)-4)*hdb3(V(i))<0) hdb3(V(i)-3)=hdb3(V(i))/abs(hdb3(V(i)))*5; end m=1; while hdb3(V(i)+m)==0&&(V(i)+m)<=255 m=m+1; end %将后面的码元正负翻转 if hdb3(V(i)+m)*hdb3(V(i))>0 hdb3(V(i)+1:endtime/dt*8)=-hdb3(V(i)+1:endtime/dt*8); end end %HDB3码译码过程 k=1; ihdb3=hdb3; for i=1:endtime/dt*8 if hdb3(i)~=0 if hdb3(i)*k>0 ihdb3(i-3:i)=0; else ihdb3(i)=1; end k=hdb3(i); 19 武汉理工大学《通信系统课群综合训练与设计》报告 end end 仿真的结果为: (后面只将PCM码流中红色标记的部分列了出来) (1) 输入的PCM码流为: xpcm = 10011001 00011000 10011001 10101110 00101101 10101110 10111100 00111011 10111100 11000000 00111111 11000000 10111100 00111011 10111100 10101110 00101101 10101110 10011001 00011000 10011001 10000001 00000000 10000001 (2) AMI码流为: 00011000 00101101 00111011 00111111 00111011 00101101 00011000 00000000 Columns 106 through 129 0 -1 0 1 -1 0 1 0 0 0 -1 1 0 0 0 0 0 0 0 0 0 0 0 -1 (3) HDB3码流为: Columns 106through 129 0 -1 0 1 -1 0 1 0 0 0 -1 1 -5 0 0 -8 5 0 0 8 0 0 0 -1 (4) HDB3译码码流为: Columns 106 through 129 0 1 0 1 1 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 由仿真结果可知,程序成功的将PCM码流依次变化为AMI码、HDB3码,而且将HDB3码还原为PCM码流。 3.3.循环码编译码的MATLAB实现 msg=[1,0,1,0,1,1,1,0,0,0,1,0]; n=7;k=4; p=cyclpoly(n,k) %循环码生成多项式,n=7,k=4 code=encode(msg,n,k,'cyclic',p); %编码函数,对信号进行差错编码 recode=decode(code,n,k,'cyclic',p) 20 武汉理工大学《通信系统课群综合训练与设计》报告 程序中用到的函数简介如下: (1)encode函数 功能:编码函数 语法:code=encode(msg,N,K,method,opt) 说明:用method指定的方法完成纠错编码。其中msg代表信息码元,是一个K列矩阵,N是编码后的码字长度;K是信息位的长度;opt是有些编码方式需要的参数。 (2)decode函数 功能:译码函数 语法:msg=decode(code,N,K,method,opt1,opt2,opt3,opt4); 说明:这个函数对接收到的码字进行译码,恢复出原始的信息,译码参数和方式必须和编码时采用的严格相同。它对接收到的码字,按method指定的方式进行译码;opt1,…,opt4是可选项的参数。 (3)cyclpoly函数 功能:生成循环码的生成多项式。 语法:p=cyclpoly(N,K); p=cyclpoly(N,K,fd_flag); 说明:从p=cyclpoly(N,K)中可找到一个给定码长N和信息位长度K生成多项式p,注意不是任意给定一个多项式都可以作为生成多项式。 程序运行的结果为: msg = 1 0 1 0 1 1 1 0 0 0 1 0 p = 1 0 1 1 code = 0 1 1 1 0 1 0 1 0 0 1 1 1 0 1 1 0 0 0 1 0 recode = 1 0 1 0 1 1 1 0 0 0 1 0 由程序的运行结果可以得到生产多项式为: g(x)x3x1 循环码的编码结果见code中的码元序列,标记为红色的码元为原信息码元,余 21 武汉理工大学《通信系统课群综合训练与设计》报告 下的为监督码元。解码结果见recode中的码元。 3.4.PSK调制与编码的MATLAB仿真 clear,close all, g=[1 0 1 1 0 0 0 0]; f=3; %载波频率 t=0:2*pi/99:2*pi; %抽样频率 cp=[];sp=[]; mod=[];bit=[]; for n=1:length(g); if g(n)==0; die=-ones(1,100); se=zeros(1,100); else g(n)==1; die=ones(1,100); se=ones(1,100); end c=sin(f*t); cp=[cp die]; %由信息源得到的+1,-1方波 mod=[mod c]; %载波 bit=[bit se]; %原信号 end psk=cp.*mod; subplot(2,1,1);plot(bit,'LineWidth',1.5);grid on; title('Binary Signal'); axis([0 100*length(g) -2.5 2.5]); subplot(2,1,2);plot(psk,'LineWidth',1.5);grid on; title('PSK modulation'); axis([0 100*length(g) -2.5 2.5]); 仿真结果如图3.2示: 22 武汉理工大学《通信系统课群综合训练与设计》报告 Binary Signal210-1-20100200300400500600700800PSK modulation210-1-20100200300400500600700800图3.2 PSK调制仿真波形 23 武汉理工大学《通信系统课群综合训练与设计》报告 4.整体通信过程的MATLAB仿真 %*******************************************************************% %通信系统过程的MATLAB仿真 %*******************************************************************% %PCM编码部分 %*******************************************************************% clear;clc; N=8;%编码位数为8位 dt=1/16;%抽样时间间隔 endtime=4; t=0:dt:endtime;%时间范围设定 %抽样 for i=1:endtime/dt x(i)=sin(dt*i*pi); end figure(1); subplot(211); plot(x); grid on; a=-1;b=1;%量化范围设定 dv=(b-a)/2^7;%量化间隔 for i=1:128 m(i)=a+i*dv;%量化值 end for i=1:128-1; q(i)=(m(i)+m(i+1))/2;%量化中值 end minm=min(m); %量化 for i=1:endtime/dt; for j=1:128-1 if((x(i)>=m(j))&&(x(i)<=m(j+1))) xq(i)=q(j); xc(i)=j-64+1; elseif x(i)==0 xq(i)=0; xc(i)=0; elseif x(i) 武汉理工大学《通信系统课群综合训练与设计》报告 end subplot(212); stem(xc); grid on; for i=1:endtime/dt if xc(i)<=0 %负极性最高位为0 xcc(i)=abs(xc(i)); elseif xc(i)>0 %正极性最高位为1 xcc(i)=(xc(i))+128; end end xpcm=dec2bin(xcc,8);%将量化值转化为0,1代码 %*******************************************************************% %*******************************************************************% %HDB3码的编译码过程 %*******************************************************************% %输入为xpcm for i=1:endtime/dt ff(8*(i-1)+1:8*i)=xpcm(i,:); end%将得到的PCM码转换为一维序列 realpcm=[]; for i=1:endtime/dt*8 realpcm(i)=bin2dec(ff(i)); end figure(2) subplot(4,1,1); stairs(realpcm); axis([0 15 -2.5 2.5]);grid on; title('PCM'); AMI=[];%定义AMI码 k=1; %将PCM码转化为AMI码 for i=1:endtime/dt*8 if ff(i)==dec2bin(1)%因为PCM序列是二进制的 AMI(i)=(-1)^k; k=k+1; else AMI(i)=0; end end subplot(4,1,2); stairs(AMI); 25 武汉理工大学《通信系统课群综合训练与设计》报告 axis([0 15 -2.5 2.5]);grid on; title('AMI'); %disp(AMI); %AMI码转换完成 %HDB3编码开始 %检测连“0”数目超过4的码元序列 %定义破坏节“B00V”,将第四个“0”标记为V,用“8”表示 for i=1:endtime/dt*8-3 if (AMI(i)==0)&&(AMI(i+1)==0)&&(AMI(i+2)==0)&&(AMI(i+3)==0) AMI(i+3)=2; end end %使V码元的符号与前一个非“0”码元的符号相同 for i=1:endtime/dt*8 if AMI(i)==2 hdb1(i)=AMI(i-4)/abs(AMI(i-4))*8; else hdb1(i)=AMI(i); end end hdb2=hdb1; hdb3=hdb2; V=[]; B=[]; k=1; %记录每一个V码元的位置 for i=1:endtime/dt*8 if (hdb2(i)==2)||(hdb2(i)==-2) V(k)=i; k=k+1; end end %加入B码元,以使序列满足HDB3码的要求 for i=2:k-1 %相邻两个V码元的极性必须是交替的 if hdb3(V(i))*hdb3(V(i-1))>0 hdb3(V(i))=-hdb3(V(i)); %用B码元来调整破坏节,用“5”表示 hdb3(V(i)-3)=hdb3(V(i))/abs(hdb3(V(i)))*3; 26 武汉理工大学《通信系统课群综合训练与设计》报告 elseif (hdb3(V(i))*hdb3(V(i-1))<0)&&(hdb3(V(i)-4)*hdb3(V(i))<0) hdb3(V(i)-3)=hdb3(V(i))/abs(hdb3(V(i)))*3; end m=1; while hdb3(V(i)+m)==0&&(V(i)+m)<=255 m=m+1; end %将后面的码元正负翻转 if hdb3(V(i)+m)*hdb3(V(i))>0 hdb3(V(i)+1:endtime/dt*8)=-hdb3(V(i)+1:endtime/dt*8); end end subplot(4,1,3); stairs(hdb3); axis([0 15 -4 4]);grid on; title('HDB3'); %HDB3码译码过程 k=1; ihdb3=hdb3; for i=1:endtime/dt*8 if hdb3(i)~=0 if hdb3(i)*k>0 ihdb3(i-3:i)=0; else ihdb3(i)=1; end k=hdb3(i); end end subplot(4,1,3); stairs(ihdb3); axis([0 15 -1 2]);grid on; title('IHDB3'); %*******************************************************************% %*******************************************************************% %循环码编码过程 %*******************************************************************% msg=ihdb3; n=7;k=4; p=cyclpoly(n,k) ; %循环码生成多项式,n=7,k=4 code=encode(msg,n,k,'cyclic',p); %编码函数,对信号进行差错编码 27 武汉理工大学《通信系统课群综合训练与设计》报告 %*******************************************************************% %*******************************************************************% %PSK调制与解调过程 %*******************************************************************% g=code; f=300; t=0:2*pi/99:2*pi; cp=[];sp=[]; mod=[];bit=[]; for n=1:length(g); if g(n)==0; die=-ones(1,100); se=zeros(1,100); else g(n)==1; die=ones(1,100); se=ones(1,100); end c=sin(f*t); cp=[cp die]; %由信息源得到的+1,-1方波 mod=[mod c]; %载波 bit=[bit se]; %原信号 end figure(3) psk=cp.*mod; subplot(2,1,1);plot(bit,'LineWidth',1.5);grid on; title('Binary Signal'); axis([0 3*length(g) -2.5 2.5]); subplot(2,1,2);plot(psk,'LineWidth',1.5);grid on; title('PSK modulation'); axis([0 3*length(g) -2.5 2.5]); jtpsk=psk.*mod; %低通滤波部分 [N,Wn] = buttord( 2*pi*50, 2*pi*150,3,25,'s'); %临界频率采用角频率表示 [b,a]=butter(N,Wn,'s'); [bz,az]=impinvar(b,a,300); %映射为数字的 dtt = filter(bz,az,jtpsk); figure(4); subplot(311) plot ( dtt ); 28 武汉理工大学《通信系统课群综合训练与设计》报告 axis([0 3*length(g) -3 3]); grid on; title('经过低通后的波形'); %抽样判决 & 逆码变换部分- jt=[]; for i = 1 : length(g) if dtt((2*i-1)*15)>0 jt1( (i-1)*30 + 1 : i*30) = 1; else jt1( (i-1)*30 + 1 : i*30) = 0; end end subplot(312); plot (jt1 ); axis( [ 0 , 3 *( length(g) + 1), -2.5,2.5] ); grid on; title('恢复波形'); t=0:dt:endtime;%时间范围设定 %抽样 for i=1:length(g) jt2(i)=jt1(30*i); end subplot(313) stairs(jt2); axis([0 , ( length(g) + 1), -2.5,2.5]); grid on; title('数字波形'); %*******************************************************************% %*******************************************************************% %循环码译码过程 %*******************************************************************% n=7;k=4; p=cyclpoly(n,k) ; jt3=decode(jt2,n,k,'cyclic',p); %*******************************************************************% %*******************************************************************% %PCM译码部分 %*******************************************************************% for i=1:length(jt3)/8 29 武汉理工大学《通信系统课群综合训练与设计》报告 if (jt3(8*(i-1)+1)>0) jp1(i)=jt3(8*(i-1)+1)*2^7+jt3(8*(i-1)+2)*2^6+jt3(8*(i-1)+3)*2^5 +jt3(8*(i-1)+4)*2^4+jt3(8*(i-1)+5)*2^3+jt3(8*(i-1)+6)*2^2+jt3(8*(i-1)+7)*2^1+jt3(8*i)-128; else jp1(i)=(jt3(8*(i-1)+1)*2^7+jt3(8*(i-1)+2)*2^6+jt3(8*(i-1)+3)*2^5+jt3(8*(i-1)+4)*2^4+jt3(8*(i-1)+5)*2^3+jt3(8*(i-1)+6)*2^2+jt3(8*(i-1)+7)*2^1+jt3(8*i))*(-1); end end figure(5); subplot(211); stem(xc); grid on; title('反量化信号'); %低通滤波部分 [N,Wn] = buttord( 2*pi*50, 2*pi*150,3,25,'s'); %临界频率采用角频率表示 [b,a]=butter(N,Wn,'s'); [bz,az]=impinvar(b,a,300); %映射为数字的 dtt = filter(bz,az,xc); subplot(212); plot(dtt); grid on; title('解调后的模拟信号'); %*******************************************************************%%*******************************************************************% 程序运行结果为: 30 武汉理工大学《通信系统课群综合训练与设计》报告 1模拟信号源0.50-0.5-1010203040506070100抽样图500-50-100010203040506070图 4.1 原模拟信号及其抽样图 PCM20-205AMI101520-205HDB3101542-20-405IHDB31015210-1051015图 4.2 数字信号的编码波形 31 武汉理工大学《通信系统课群综合训练与设计》报告 Binary Signal210-1-205001000150020002500PSK modulation210-1-205001000150020002500图 4.3 PSK调制波形图 经过低通后的波形20-205001000150020002500恢复波形20-205001000150020002500数字波形20-20100200300400500600700800图 4.4 PSK信号解调波形图 32 武汉理工大学《通信系统课群综合训练与设计》报告 100反量化信号500-50-100010203040506070100解调后的模拟信号500-50-100010203040506070图 4.5 PCM译码波形图 加衰落噪声的程序段为: t1=1:length(cp.*mod); psk=(cp.*mod)+randn(1,(cp.*mod))*(exp(-2*t1)'); 此处产生衰落噪声。 加噪后恢复的波形为: Binary Signal210-1-205001000150020002500恢复波形210-1-205001000150020002500图 4.6 加噪后的波形对比 33 武汉理工大学《通信系统课群综合训练与设计》报告 误码率的计算方式为: k=0; for i=1:length(jt3) if(jt3(i)~=msg(i)) k=k+1; end end 误码率为: >> k/length(msg) ans = 0.5011 34 武汉理工大学《通信系统课群综合训练与设计》报告 5.结果分析 由仿真结果可知,程序能基本完成PCM编译码、HDB3码编译码、循环码编译码、PSK的调制与解调。 由MATLAB的仿真结果可以很确定程序中关于HDB3码编译、循环码编译的部分是正确无误的。 PCM编码部分在抽样、量化部分还可以,但在编码部分就较差了,本程序中未按照实际中的分段码的编码方式,而是采用最简单的均匀量化编码方式。且程序中的PCM反量化部分与原模拟信号差异较大。 PSK调制与解调部分整体表现较好,但在使用MATLAB描述模拟的低通滤波器时,能力欠佳,借用别人的代码。且关于信道噪声部分处理的并不理想。 从整体上来看,此次用MATLAB对通信系统进行仿真基本成功,但局部完成的质量不佳。 35 武汉理工大学《通信系统课群综合训练与设计》报告 6.小结体会 通过这次课程设计,我对通信系统的整个过程的理解进一步加深了,更加深刻的理解了PCM编译码、HDB3码、循环码编译码、PSK调制与解调的过程。之前我们的都知道以上各部分是怎么回事,但却没有如此的深入的去理解他们是怎么回事,具体应该怎样实现他们,之前以为理所当然的问题在这里必须一点点的解决,没有任何捷径,也不允许有丝毫的懒惰。经历过后我才知道表面上看起来很简单的东西让自己来做其实并不简单,只有自己去体会过才懂得其中的艰难,才知道去尊重那些辛辛苦苦工作的人。 这过程中,MATLAB是我们必用的工具,又用他写了这么多程序,我的MATLAB使用能力又进一步提升了,而且让我更加喜欢MATLAB了。 编程过程中遇到了很多困难,其中最大的困难便是HDB3码的编写过程。此间我花了好几天的时间,尝试了一次又一次,最终把HDB3码写了出来,不可否认,此次课设我做得最好的部分就是HDB3码的部分。这也算是一种慰藉吧。 此次课设我真的收获很多。 36 武汉理工大学《通信系统课群综合训练与设计》报告 7.参考文献 【1】樊昌信,曹丽娜,通信原理(第六版),北京:国防工业出版社,2006. 【2】John G.Proakis.通信系统工程(第二版)[m]. 北京:电子工业出版社,2007 【3】孙青卉,董廷山. 通信技术基础[m]. 北京:人民邮电出版社,2008 【4】达新宇,陈树新通信原理教程[m].北京:北京邮电大学出版社,2005. 【5】邓华等.MATLAB通信仿真及应用实例祥解.人民邮电出版社.2003 37 武汉理工大学《通信系统课群综合训练与设计》报告 课程设计成绩评定表 姓 名 专业、班级 郑丁华 通信0906班 性 别 男 题 目:通信系统课群综合训练与设计 答辩或质疑记录: (1) 问:你在设计之前有什么样的思路? 答:设计时我将各个模块分开,对其分别单独设计和编程,得到正确结果之后再合并在一起。 (2) 问:你的设计PSK时采用什么方法? 答:采用相干解调的方法,即用载波与已调波相乘,经低通滤波器和比较器得到最终的解调数字信号。 (3) 问:在设计过程中遇到哪些严重的问题? 答:在设计过过程中最严重的问题是HDB3码的设计和PCM编码的设计部分,后来在一次次的失败后,才讲上述二项完成。 成绩评定依据: 最终评定成绩(以优、良、中、及格、不及格评定) 指导教师签字: 年 月 日 38 因篇幅问题不能全部显示,请点此查看更多更全内容