实验七_信道编码仿真实现
- 格式:doc
- 大小:127.00 KB
- 文档页数:6
第24卷第1期 2005年1月实验室研究与探索RESEARCH AND EXPLORATION IN LABORATORYVol.24No.1 Jan.2005基于MATLAB 的信道编码教学实验软件设计与实现张海涛, 王福昌(华中科技大学 电工电子教学基地湖北武汉430074)摘 要:介绍了基于MATLAB 的信道编码教学实验软件,主要包括实验操作界面制作以及循环码和卷积码编译码。
关键词: 矩阵实验室 软件包;循环码;卷积码;编译码;界面中图分类号:TN911.22文献标识码:B文章编号:1006 7167(2005)01 0046 04Design and Realization of the Teaching ExperimentalSoftware on Channel Coding with MATLABZ HANG Hai tao , WANG Fu chang(Instruction Base of Electrotechnics&Electtronics,Huazhong Univ.of Science and Technology,W uhan 430074,China)Abstract :This paper introduceds a teaching experimentel software based on channel coding with MATLAB,including the design of experiment interface ,the encode decode process of cyclic code and convolutional code.Key words :MATLAB (Matrix Laboratory);cyclic code;convolutional code;encode decode;interface收稿日期:2004 04 09作者简介:张海涛(1978-),男,汉族,湖北红安人,硕士研究生三年级,主要从事通信与信号处理方面的科研。
本科毕业设计论文题目:基于MATLAB的通信系统信道编码的研究及其仿真所在系:电气与信息工程系专业:电子信息工程班级:学号学生姓名:指导老师:摘要论文题目:基于MATLAB的通信系统信道编码的研究及仿真学科专业:电子信息工程姓名:班级:电信学号:指导教师:摘要现代社会发展要求通信系统功能越来越强,性能越来越高,构成越来越复杂:另一方面,要求通信系统技术研究和产品开发缩短周期,降低成本,提高水平。
这样尖锐对立的两个方面的要求,只有通过使用强大的计算机辅助分析设计技术和工具才能实现。
现代计算机科学技术快速发展,已经研发出了新一代的可视化的仿真软件。
这些功能强大的仿真软件,使得通信系统仿真的设计和分析过程变得相对直观和便捷,由此也使得通信系统仿真技术得到了更快的发展。
通信系统仿真贯穿着通信系统工程设计的全过程. 对通信系统的发展起着举足轻重的作用。
通信系统仿真具有广泛的适应性和极好的灵活性,有助于我们更好地研究通信系统性能。
本文首先介绍了通信系统仿真的墓本内容,包括通信系统仿真的一般步骤MATLAB中的一种可视化仿真工具Simulink 以及S-函数的相关概念。
从理论上对通信系统进行深入细致的研究是非常必要的。
本文对通信系统中的一些重要环节,包括信道、噪声、模拟信号的数字化传输、信道编码以及信号调制的原理、方法和过程进行了详细的阐述。
理论知识是用来指导具体实践的。
本文在深刻理解通信系统理论的基础上利用MATLAB强大的仿真功能,设计了许多具体的通信系统仿真模型。
在仿真模型设计过程中,本文对模型设计的目的、具体的结构组成、仿真流程以及仿真结果都给出了具体详实的分析和说明。
最后,本文对所做的研究工作进行了总结,并且提出了今后的工作和研究方向。
关键词:通信系统,仿真,MATLAB. S-函数,系统设计西安交通大城市学院本科生毕业设计(论文)ABSTRACTTitle: The communications system based on MATLAB simulation research and channel codingApplicant: Li JieSpeciality: Electronic information projectABSTRACTModern social development requirements will increasingly communication system, performance and high, more and more complex, on the other hand, the requirement communication system technology research and product development and shorten the cycle, reduce cost, improve level. So sharp opposition in two aspects, only through the use of powerful computer aided analysis and design techniques and tools to achieve. The modern computer science and technology development, have developed a new generation of visual simulation software. These powerful simulation software, communication system design and analysis of the simulation process relatively intuitive and convenient, which also makes communication system simulation technology faster development. Communication system simulation through the communication system design process of the development of communication system. Plays an important role. Communication system Simulation has extensive adaptability and good flexibility and help us to better research communications system performance. This paper introduces the system simulation of the content, including the communication system of general steps of MATLAB simulation of a visualization simulation tools and Simulink related concepts - function. From the theory of communication system intensive study is very necessary. This paper is an important link of some of the communication system, including channel simulation signal and noise, the digital transmission, channel coding modulation signal and the principle, method and process in detail. Knowledge is used to guide practice. Based on the profound understanding of the communication system based on the theory of MATLAB simulation, the design of the function of many specific communication system simulation model. In the design process simulation model, this model is designed, specific structure, simulation process and the simulation results are given detailed analysis and explanation. Finally, this paper studies are summarized, and working for the future work and puts forward research direction.KEY WORDS: communication system, simulation of MATLAB. S - function, systemdesign西安交通大城市学院本科生毕业设计(论文)目录目录摘要 (I)ABSTRACT (III)1 绪论 (1)1.1选题意义 (1)1.2 选题目的 (2)1.3 国内外研究现状 (2)1.4 主要研究内容及技术方法 (2)1.5研究课题的方案设计 (3)2 通信原理及通信系统仿真简介 (5)2.1 通信发展及趋势 (5)2.1.1 通信发展史简介 (5)2.2 通信的基本概念 (6)2.3 通信系统仿真及其重要作用 (7)2.3.1 通信系统仿真的概念 (7)2.3.2 通信系统仿真的重要作用 (8)3 通信系统仿真相关内容概述 (11)3.1 通信系统仿真的一般步骤 (11)3.1.1 仿真建模 (11)3.1.2 仿真实验 (11)3.1.3 仿真分析 (12)3.2 用于仿真的软件 (12)3.2.1 MATLAB (12)3.2.2 MATLAB的发展及特点 (13)3.2.3 MATLAB在通信仿真中的应用 (14)3.3 SIMULINK (15)3.3.1 Simulink概述 (15)3.3.2 Simulink仿真过程 (19)3.4 S-函数 (20)4 通信系统信道编码的研究及仿真 (23)4.1 信道编码概念 (23)4.1.1 信道编码概念及任务 (23)4.2 信道编码的分类 (23)4.2.1分组编码 (23)4.2.2循环冗余码 (24)西安交通大城市学院本科生毕业设计(论文)4.2.3卷积编码 (24)4.3仿真系统设计 (25)4.3.1 RS编码纠错性能分析 (25)4.3.2 CRC-16编码检错性能分析 (32)4.3.3卷积编码软判决译码和硬判决译码性能分析 (40)5.1 总结 (49)5.2展望 (49)致谢 (51)参考文献 (53)1 绪论1 绪论1.1选题意义随着现代通信系统的飞速发展,计算机仿真已成为今天分析和设计通信系统的主要工具,在通信系统的研发和教学中具有越来越重要的意义。
信道编码实验人:学号:07302443一、实验目的1、加深对信道编码的理解,了解信道编码的作用2、进一步掌握基带信号检测和判决和最佳判决理论3、熟悉至少一种信道编码的编码及译码过程,分析信道编码后的误码率的变化4、掌握信噪比和误码率之间的关系和相互影响5、学习使用MATLAB,C/C++等进行实验仿真二、实验要求1、用MA TLAB,,C/C++等语言在计算机进行通信系统模拟。
2、提交完整源程序以及结果图,并要求结合课堂知识根据结果推出结论(每个设计报告10页以上)。
3、不得抄袭。
三、实验内容第一部分:利用线性分组码或卷积码进行信道编码仿真条件:1 信道输入:s(t), s(t)可以取为MPSK 信号2 考虑常数AWGN信道3 噪声设为n(t)4 信道输出为y(t)=ks(t)+n(t)仿真要求:1 利用线性分组码或者卷积码进行信道编码2 画出SER VS SNR的结果图,SNR取0-25dB第二部分:设计交织+纠错结合的信道编码仿真条件:1 信道输入信号s(t);s(t)可以取为MPSK 信号,s(t)的抽样速率为10kb/s.2 考虑理想化衰落信道,如图1所示3 噪声设为n(t)4 信道输出为y(t)=k(t)*s(t)+n(t)仿真要求:1 设计交织+纠错结合的信道编码。
2 画出SER VS SNR的结果图,SNR取0-25dB3 比较有无交织在SNR变化情况下的结果。
4 改变衰落时间t的值,取t=2ms, t=5ms,观察并画出结果。
图一理想化衰落信道示意图四、实验原理第一部分:线性分组码线性分组码是一类奇偶校验码,它可以由前面提到的(n,k)形式表示。
编码器将一个k比特的信息分组(信息矢量)转变成一个更长的由给定元素符号集组成的n比特编码分组(编码矢量)。
汉明(7,4)码是一种线性分组码,使用生成矩阵实现从信息矢量到编码矢量的转换,采用监督矩阵和伴随式的检测实现解码和检错纠错。
第二部分:卷积编码卷积码由3个整数n,k,K描述,这里k/n也表示分组码的编码效率(每编码比特所含的信息);K是约束长度,表示在编码移位寄存器中k元组的级数。
无线通信基础课程设计报告(信道编码)小组成员:指导老师:完成时间:无线通信系统课程设计报告实验摘要:数字信号在传输中往往由于各种原因,使得在传送的数据流中产生误码,从而使接收端产生图象跳跃、不连续等现象。
信道编码通过对数码流进行相应的处理,使系统具有一定的检错和纠错能力,可极大地避免码流传送中误码的发生。
提高数据传输可靠性,降低误码率是信道编码的任务。
实验名称:信道编码实验目标:本实验的目标是领会信道编码的基本思想。
并通过比较有无信道编码模块的不同系统误码率性能,感受信道编码技术对于提高系统性能的重要意义。
实验原理:打开“Channel_Coding_74.vi”前面板如图1所示,打开程序框图并理解参与信道编码的整个数据流。
程序包含上下两个独立的部分如图2所示,下面部分是生成误码率曲线如图1(b),其结构和上面部分类似,你只需要关注上面部分程序即可;上面部分代码大致可由做7个模块组成,每一模块完成一项功能。
你负责的是这个实验的“编码和解码”功能。
这些模块为:1、读取图片LabVIEW提供了一个能够读取JPEG格式的图像并输出图像数据的模块。
提供的还原像素图.vi完成图像数据到一维二进制数据的转换(图像数据→十进制二维数组→二进制一维数组),输出信源比特流。
(a)实验操作部分(b)误码率曲线图1 前面板2、信道编码我们的下一个目标是对信源比特流进行信道编码。
信道编码方案很多,线性分组码、卷积码、LDPC码等等;这里我们采用简单的(7,4)线性分组码。
图2 程序框图线性分组码是一类重要的纠错码。
在(n ,k )线性分组码中,常用到能纠正一位错误的汉明码。
其主要参数如下:码长:21mn =-; 信息位:21mk m =--; 校验位:m n k =-; 最小距离: d = 3; 纠错能力: t = 1;本次实验需要用到的是(7,4)分组码,属系统码,前四位为信息位,后三位为冗余位。
3、BPSK 调制上一步得到的是二进制的信息比特流,需要采用一定的调制方案,将二进制的信息比特映射成适合信道传输的符号。
本科毕业设计论文题目移动自组网系统理论研究及信道编码matlab仿真专业名称通信工程学生姓名王一豪指导教师许哲毕业时间2016年6月毕业任务书一、题目移动自组网系统理论研究及信道编码matlab仿真二、指导思想和目的要求了解信道编码过程及其原理,理解码率和误码率的概念,主要研究汉明码和卷积码的信道编码,用MATLAB仿真信道编码在不同信道下的影响。
通过论文的撰写培养了自己进行调查研究、查阅文献、收集整理资料、思考加工,在相关专业领域独立地进行科研的基本能力。
三、主要技术指标1)从移动自组网的相关知识入手,包括移动自组网的概念、特点及应用领域的分析和研究。
2)研究matlab的使用方法及相关代码的编写。
3)主要研究分析信道编码仿真图信噪比和误码率的变化,从而得出信道编码对信号的影响。
四、进度和要求第3-4周:查阅相关移动自组网和信道编码资料,确定方案,撰写开题报告;第5-6周:查阅matlab相关资料,利用网上视频教程学习matlab的使用;第7-13周:就汉明码和卷积码的编解码程序和矩阵进行这两个的仿真图。
;第14-15周:整理、完成毕业设计,并撰写论文;第16-17周:准备及完成毕业设计答辩。
五、主要参考书及参考资料[1]樊昌信等,《通信原理(第四版)》国防工业出版社[2]王立宁等,《MATLAB与通信仿真》人民邮电出版社[3]吴伟陵,《信息处理与编码》北京邮电大学出版社[4]刘玉君,信道编码[M]. 河南科学技术出版社,2001.9[5]王秉钧,冯玉珉,田宝玉.通信原理[M]. 清华大学出版社[6]王新梅,肖国镇.纠错码[M]. 西安电子科技大学出版社[7]邓华.MATLAB通信仿真及应用实例详解[M]. 人民邮电出版社[8]刘爱莲《纠错编码原理及MATLAB实现》清华大学出版社[9]贺超英王少喻《MATLAB应用与实验教程》电子工业出版社[10]张永光楼才义《信道编码及其识别分析》电子工业出版社[11]赵鸿图茅艳《通信原理MATLAB仿真教程》人民邮电出版社[12]樊昌信,曹丽娜编著,通信原理(第六版),国防工业出版社.2006[13]邵玉斌编著,MATLAB/simulink通信系统建模与仿真实例分析(第一版),清华出版社.2008.6[14]孙祥,徐流美,吴清编著,MATLAB基础教程,清华大学出版社 2005[15]曹雪虹,张宗橙.信息论与编码[M]. 清华大学出版社学生___________ 指导教师___________ 系主任___________摘要伴随当今科学技术飞速的发展,人们对信息传输的质量要求越来越高,信道编码在通信的各个领域得到了广泛的应用,尤其是在通信领域和传输领域尤为重要。
实验报告册课程:通讯系统原理教程实验: 信道编码实验评语:成绩:签名:日期:实验五:信道编码实验一、实验目的:1、了解信道编码的分类,理解线性分组码的特点2、掌握线性分组码的编码的过程3、理解据线性分组码求最小码距和编码效率二、实验原理:k 位信息组+(n-k)监督元->n 位码组码长:码字中码元的个数,通常用n 表示。
码重:码字中“1”码元的数目,通常用W 表示。
码距:两个等长码字之间对应码元不同的数目,通常用d 表示。
两个码字对应位模2 相加得到的新码组的重量就是这两个码字之间的距离。
码的码距:码字集合中两两码字之间距离的最小值称为码的最小距离,通常用d0表示。
它决定了一个码的纠、检错能力,是一个极为重要的参数。
编码效率:信息码元数与码长之比,通用nk =η表示。
常如(7,3)分组码,码字用][0123456a a a a a a a A =表示,监督码元与信息码元之间的关系可用如下线性方程组表示: ⎪⎪⎩⎪⎪⎨⎧++=+=++=+=4505614562463a a a a a a a a a a a a a线性分组码的封闭性:码字集中任意两个码字对应位模2加后得到的组合仍然是123456700.10.20.30.40.50.60.70.80.91码元010码元加上四位监督元的(7,3)线性分组码,为011 1010该码字集中的一个码字。
因此,线性分组码的最小码距必等于码字集中非全0码字的最小重量。
0,),()(min 0≠∈=i k n A A W d i i线性分组码的典型生成矩阵为:][T k P I G =其中k I 是k k ⨯的单位矩阵。
生成矩阵可以由监督矩阵确定⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=011110010110101110001G 由生成矩阵生成的码是系统码: G M A ⋅=,如]001[=M 时,通过生成矩阵求得的码字为: []0111100011110010110101110001]001[=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⋅=A 三、实验程序:% 信道编码.mclearx=[0 1 1];%设码元为010Q=[1 1 1 0;0 1 1 1;1 1 0 1];G=[eye(3),Q];y=mod(x*G ,2);plot(y,'linewidth',2); xlabel('信息元'); grid on;title('010码元加上四位监督元的(7,3)线性分组码,为011 1010');实验结果:codes = 0 1 1 1 0 1 0;其余的码元用同样的方法都可以编出,全部码字表格如下:码字=信息元X[ ]+监督元E[ ]实验结论:通过实验,理论计算与MatlAB 编程都能达到实验要求的结果,证明实验过程的正确性,说明达到实验的预期目的。
题目:基于matlab的信道编码仿真1引言1.1选题的目的和意义数字信号在传输中往往由于各种原因,使得在传送的数据流中产生误码,从而使接收端产生图象跳跃、不连续、出现马赛克等现象。
所以通过信道编码这一环节,对数码流进行相应的处理,使系统具有一定的纠错能力和抗干扰能力,可极大地避免码流传送中误码的发生。
误码的处理技术有纠错、交织、线性内插等。
提高数据传输效率,降低误码率是信道编码的任务。
信道编码的本质是增加通信的可靠性。
但信道编码会使有用的信息数据传输减少,信道编码的过程是在源数据码流中加插一些码元,从而达到在接收端进行判错和纠错的目的。
1.2本选题的理论依据、研究内容在数字通信系统中由于信道内存在加性噪声及信道传输特性不理想等容易造成码间串扰同时多用户干扰、多径传播和功率限制等也导致错误译码。
为了确保系统的误比特率指标通常采用信道编码。
信道编码是为了保证信息传输的可靠性、提高传输质量而设计的一种编码。
它是在信息码中增加一定数量的多余码元,使码字具有一定的抗干扰能力。
提高信息传输的有效性和可靠性始终是通信技术所追求的目标,而信道编码能够显著的提升信息传输的可靠性。
简述信道编码理论,详细说明分组码的编译原理、实现方法及检错纠错能力,用MATLAB仿真信道编码条不同信道下的影响。
学习卷积码的基本原理和编码方法。
学习基本分组码的原理和编码方法。
理解二进制对称信道(BSC),二进制擦除信道(BEC),高斯白噪声信道(AWGN)。
理解码率(code rate)和误码率(bit error rate)的意义。
利用(7,4)Hamming码对不同信道进行仿真。
自己设计一个卷积码,并利用Viterbi译码二进制对称信道(BSC),高斯白噪声信道(AWGN)2个信道进行仿真,比较结果。
2.信道编码以及其运行环境MATLAB的介绍2.1 信道编码的概念及分类进行信道编码是为了提高信号传输的可靠性,改善通信系统的传输质量,研究信道编码的目标是寻找具体构造编码的理论与方法。
移动通信中的信道编码和信源编码仿真摘要:人们对追求最佳的通信性能的有效性和靠得住性为目标的信源编码技术和信道编码技术提出愈来愈高的要求。
本设计第一学习了移动通信系统中信道编码和信源编码的大体理论,和通信仿真的概念、一样步骤。
然后在此基础上利用编程和Matlab 中的仿真模块库Simulink进行仿真。
通过模型搭建、编写程序、运行、调试整个进程以后,取得了以下功效。
要紧包括:通过仿真分析发觉A律、μ律紧缩在A大于、μ大于100以后紧缩成效比较理想;关于A律十三折和μ律十五折,都是比较好的非均匀量化方式,但在处置小信号时,μ律十五折能取得更大的量化信噪比;在进行脉冲调制(PCM, Pulse Code Modulation)编码和差分脉冲调制(DPCM,Differential Pulse Code Modulation)编码比较时,咱们看到DPCM编码比PCM编码的量化误差更小;关于RS(Reed-Solomon)编码如RS(60,44),当信道的误比特率低于1%时,RS编码信号不产生误比特数,而当高于1%,编码信号的误比特率与信道的误比特率成反比;关于循环冗余码(CRC-16,Cyclic redundancy check)编码,咱们发觉CRC检测性能比较理想,如在帧距离为,仿真时刻为1000时,CRC检测器发生错误裁决的比例低于%。
关键词:移动通信;信源编码;信道编码;仿真目录1 绪论.............................................................................................................................. 错误!未定义书签。
通信系统的组成......................................................................................................... 错误!未定义书签。
信道仿真实验一、实验目的1、了解通信系统信道模型的基本概念。
2、掌握高斯白噪声的统计特性及其对通信系统的影响。
3、掌握带限线性滤波器信道模型的特性和对通信系统的影响。
4、掌握瑞利衰落信道的统计特性及其对通信系统的影响。
二、实验仪器1、移动通信实验箱一台;2、台式计算机一台;三、实验步骤1、通过串行口将实验箱和电脑连接,给实验箱上电。
将与实验箱相连的电脑上的学生平台程序打开。
在主界面上双击“信道仿真”实验图标,进入此实验界面。
2、先点击“初始化”键,再点击“输入数据”键,用于产生信道仿真所需的输入数据。
界面显示输入数据窗口,“数据长度”对话框可输入1~16 之间的数,产生相应个数的字节,如果学生想手动输入数据,可在窗口正下方以16 进制方式输入数据,如“12 bc ae 3e”等,中间以空格键分隔,输入完毕后按“手动输入”键,这时便可以从界面上看到手动输入的数据对应的二进制代码;如果学生不想手动输入数据,只需按动“随机生成”键,便可以生成实验所需要的输入数据。
然后按动“返回”键,输入数据窗口自动关闭,输入数据工作结束。
这里需要注意的是,如果不按动“返回”键而人工关闭此窗口,输入数据工作并未完成。
3、输入数据产生后就可以进行下面的信道仿真实验。
首先进行高斯白噪信道模型实验。
(1)在信道选择栏中选中“高斯”。
(2)在高斯信道参数信噪比一栏中输入一个数值,然后点击“仿真->GO”键,波形显示区将显示本信噪比下的输入信号波形、输出信号波形以及噪声波形。
(3)修改信噪比的值,可重复以上实验。
若输入为0,则表示信噪比为0dB,0dB 意味着输入信号的功率和噪声功率的大小相当,由于噪声功率过大,因此输出信号与输入信号的相似程度很低。
将信噪比提高到一定的值(如:40dB),再点击“仿真”键再观察输入信号和输出信号。
完成实验报告的第 1 题。
4、下面进行带限线性滤波器信道模型实验,这个信道模型是对存在码间干扰的信道的建模,反映信道特性的信道参数由学生自定义输入。
一、作业内容实现对给定模拟信号 2sin (2π*300t )+ sin (2π*3400t )的数字化传输,要求如下1、实现PCM 编码和译码(给出采样频率选取)2、实现简单的信道编解码,CRC(7,4)码,生成多项式为3、实现基带码型变换与反变换,采用数字差分双相码。
4、信号持续时间1S 以上,每种编码结果单独输出。
二、模拟信号的数字化传输原理模拟信号的数字化传输过程图如图:Pcm 编译码操作:抽样间隔取为0.000125秒,抽样时间持续为1/8s 。
编码采用13折线A 律8位二进制码,第一位是极性码,第二1)(3++=x x x g到第四位是段落码,五到八位是段内码,段内码采用折叠码。
首先,对模拟信号的量化结果进行归一化后乘以2048得到当前信号量化值。
判断量化值正负,得到第一位极性码。
而后比较量化值与起电平,确定段落码,最后通过量化台阶计算段内码。
其译码过程与其相反。
Crc编译码操作:应题中要求将一个8位pcm信息码分为两个4位码。
生成多项式为g(x)=x3+x+1,计算x r M(x)。
用g(x)除x r M(x)得到余式r(x)。
最后得到的码组为A(x)=x r M(x)+r(x)。
在进行crc译码时看,可取连续两个crc码前四位信息码,将信息码合并即可得传输的pcm码。
差分双向码编解码操作:将crc码当做数据输入,这里假设参考码为01,若crc码第一位信息码为1时相位改变,输出10。
为0时相位不变输出仍为01。
后面信息码变换方式相同,若输入为1,则输出相对前一输出相位改变。
反之,相位不变。
结合作业内容,分析所给定的模拟信号的数字化传输过程,描述该过程中各模块所处的位置(佐以框图)、实现的功能及关键参数的选择。
三、代码设计与实现头文件:shuzi.h#ifndef SHUZI_H#define SHUZI_Hclass shuzi{public:void liangh();void dnm(double x,double y,double z);void pcmbm();void pcmym();void crcbm();void crcjm();void jdmbh();void jdfbh();void jym();private:double T[1000],gycy[1000],cyz[1000];double pcmy[2000];int crcb[1000][14],crcj[1000][8],pcm[1000][8];};#endif功能函数:math.cpp#include<iostream>#include<fstream>#include<cmath>#include<string>#include"shuzi.h"using namespace std;#define pi 3.1415926int i;void shuzi::liangh(){double t=0.000125;int i;for(i=0;i<1000;i++)T[i]=i*t;}void shuzi::pcmbm(){ofstream f("pcmbm.txt");int j,k,flag=1;double a;for(i=0;i<1000;i++){cyz[i]=2*sin(2*pi*300*T[i])+sin(2*pi*3400*T[i]);a=cyz[i]/3;gycy[i]=a*2048;pcm[i][0]=1;else{pcm[i][0]=0;gycy[i]=gycy[i]*(-1);}if(gycy[i]>=0&&gycy[i]<16){pcm[i][1]=0;pcm[i][2]=0;pcm[i][3]=0;dnm(gycy[i],0,1);}else if(gycy[i]>=16&&gycy[i]<32) {pcm[i][1]=0;pcm[i][2]=0;pcm[i][3]=1;dnm(gycy[i],16,1);}else if(gycy[i]>=32&&gycy[i]<64) {pcm[i][1]=0;pcm[i][2]=1;pcm[i][3]=0;dnm(gycy[i],32,2);}else if(gycy[i]>=64&&gycy[i]<128) {pcm[i][1]=0;pcm[i][2]=1;pcm[i][3]=1;dnm(gycy[i],64,4);}else if(gycy[i]>=128&&gycy[i]<256) {pcm[i][1]=1;pcm[i][2]=0;pcm[i][3]=0;dnm(gycy[i],128,8);}else if(gycy[i]>=256&&gycy[i]<512) {pcm[i][1]=1;pcm[i][3]=1;dnm(gycy[i],256,16);}else if(gycy[i]>=512&&gycy[i]<1024){pcm[i][1]=1;pcm[i][2]=1;pcm[i][3]=0;dnm(gycy[i],512,32);}else if(gycy[i]>=1024&&gycy[i]<2048){pcm[i][1]=1;pcm[i][2]=1;pcm[i][3]=1;dnm(gycy[i],1024,64);}}for(j=0;j<1000;j++){for(k=0;k<8;k++)f<<pcm[j][k];flag++;f<<' ';if(flag==18){f<<'\n';flag=1;}}f.close();}void shuzi::dnm(double x,double y,double z){int a;a=(x-y)/z;switch(a){case 0:pcm[i][4]=0;pcm[i][5]=0;pcm[i][6]=0;pcm[i][7]=0;break;case 1:pcm[i][4]=0;pcm[i][5]=0;pcm[i][6]=0;pcm[i][7]=1;break;case 2:pcm[i][4]=0;pcm[i][5]=0;pcm[i][6]=1;pcm[i][7]=0;break;case 3:pcm[i][4]=0;pcm[i][5]=0;pcm[i][6]=1;pcm[i][7]=1;break;case 4:pcm[i][4]=0;pcm[i][5]=1;pcm[i][6]=0;pcm[i][7]=0;break;case 5:pcm[i][4]=0;pcm[i][5]=1;pcm[i][6]=0;pcm[i][7]=1;break;case 6:pcm[i][4]=0;pcm[i][5]=1;pcm[i][6]=1;pcm[i][7]=0;break;case 7:pcm[i][4]=0;pcm[i][5]=1;pcm[i][6]=1;pcm[i][7]=1;break;case 8:pcm[i][4]=1;pcm[i][5]=0;pcm[i][6]=0;pcm[i][7]=0;break;case 9:pcm[i][4]=1;pcm[i][5]=0;pcm[i][6]=0;pcm[i][7]=1;break;case 10:pcm[i][4]=1;pcm[i][5]=0;pcm[i][6]=1;pcm[i][7]=0;break;case 11:pcm[i][4]=1;pcm[i][5]=0;pcm[i][6]=1;pcm[i][7]=1;break;case 12:pcm[i][4]=1;pcm[i][5]=1;pcm[i][6]=0;pcm[i][7]=0;break;case 13:pcm[i][4]=1;pcm[i][5]=1;pcm[i][6]=0;pcm[i][7]=1;break;case 14:pcm[i][4]=1;pcm[i][5]=1;pcm[i][6]=1;pcm[i][7]=0;break;case 15:pcm[i][4]=1;pcm[i][5]=1;pcm[i][6]=1;pcm[i][7]=1;break;default:cout<<"error!";}}void shuzi::pcmym(){ofstream f("pcmym.txt");int j,k,m,o=1;double p,flag,s,n;for(j=0;j<1000;j++){if(pcm[j][0]==0)flag=-1;else flag=1;m=pcm[j][1]*4+pcm[j][2]*2+pcm[j][3];n=pcm[j][4]*8+pcm[j][5]*4+pcm[j][6]*2+pcm[j][7];switch(m){case 0:s=0;p=1;break;case 1:s=16;p=1;break;case 2:s=32;p=2;break;case 3:s=64;p=4;break;case 4:s=128;p=8;break;case 5:s=256;p=16;break;case 6:s=512;p=32;break;case 7:s=1024;p=64;break;default:cout<<"error!";}pcmy[j]=(flag*(s+n*p+0.5*p))/2048*3;}for(j=0;j<1000;j++){f<<pcmy[j]<<' ';o++;if(o==18){f<<'\n';o=1;}}f.close();}void shuzi::crcbm(){ofstream f("crcbm.txt");int p,j,k,m1,m2,n,s1,s2,flag=1;int e[2000][7],l[2000][7];n=11;for(j=0;j<1000;j++){k=0;while(k<8){if(k<4){e[2*j][k]=pcm[j][k];l[2*j][k]=pcm[j][k];}else {e[2*j+1][k-4]=pcm[j][k];l[2*j+1][k-4]=pcm[j][k];}k++;}e[2*j][4]=0;e[2*j][5]=0;e[2*j][6]=0;e[2*j+1][4]=0;e[2*j+1][5]=0;e[2*j+1][6]=0;}for(j=0;j<2000;j++){for(p=0;p<4;p++)if(e[j][p]==1){e[j][p+2]=1-e[j][p+2];e[j][p+3]=1-e[j][p+3];}l[j][4]=e[j][4];l[j][5]=e[j][5];l[j][6]=e[j][6];}for(j=0;j<2000;j++)for(k=0;k<7;k++){if(j%2==0)crcb[j/2][k]=l[j][k];else crcb[j/2][k+7]=l[j][k];}for(j=0;j<1000;j++){for(k=0;k<14;k++)f<<crcb[j][k];flag++;f<<' ';if(flag==18){f<<'\n';flag=1;}}f.close();}void shuzi::crcjm(){ofstream f("crcjm.txt");int j,k,sum1,sum2,sum,flag=1;for(j=0;j<1000;j++){k=7;sum=crcb[j][0]*8+crcb[j][1]*4+crcb[j][2]*2+crcb[j][3];sum=sum*16+crcb[j][7]*8+crcb[j][8]*4+crcb[j][9]*2+crcb[j][10];while(k>=0){crcj[j][k]=sum%2;sum=sum/2;k--;}}for(j=0;j<1000;j++){for(k=0;k<8;k++)f<<crcj[j][k];flag++;f<<' ';if(flag==18){f<<'\n';flag=1;}}f.close();}void shuzi::jdmbh() //参考码是01{ofstream f("cfsxm.txt");int j,k,flag=1;string a,b,c;a="01";b="10";for(j=0;j<1000;j++){f<<' ';for(k=0;k<14;k++){if(k==0)if(crcb[j][k]==0){f<<a;c=a;}else {f<<b;c=b;}else if(crcb[j][k]==0&&c==a){f<<a;c=a;}else if(crcb[j][k]==0&&c==b){f<<b;c=b;}else if(crcb[j][k]==1&&c==a){f<<b;c=b;}else if(crcb[j][k]==1&&c==b){f<<a;c=a;}}flag++;if(flag==7){f<<'\n';flag=1;}}f.close();}void shuzi::jdfbh(){ifstream f("cfsxm.txt");ofstream f1("cffbh.txt");int j,k,b,flag1=0,flag2=0;char a[2];for(k=0;k<14000;k++){flag1++;flag2++;for(j=0;j<2;j++)f>>a[j];if(k%14==0&&a[0]=='1'){f1<<'1';b=1;cout<<1;}else if(k%14==0&&a[0]=='0'){f1<<'0';b=0;}else if(a[0]=='0'&&b==0){f1<<'0';b=0;}else if(a[0]=='1'&&b==1){f1<<'0';b=1;}else if(a[0]=='0'&&b==1){f1<<'1';b=0;}else if(a[0]=='1'&&b==0){f1<<'1';b=1;}if(flag1==14){f1<<' ';flag1=0;}if(flag2==238){f1<<'\n';flag2=0;}}f.close();f1.close();}主函数:main()#include<iostream>#include"shuzi.h"using namespace std;void main(){shuzi s;s.liangh();s.pcmbm();s.pcmym();s.crcbm();s.crcjm();s.jdmbh();s.jdfbh();}四、实验结果Pcm编码结果:10000000 11100011 10110000 11111000 11011100 11111011 11110001 11110011 11111010 11100001 11111001 10111010 11101001 10000000 01011010 00100011 01110110 01010110 01111011 01101111 01110101 01111001 01100100 01111010 01000011 01101111 00000010 11001010 10010100 11110100 11010001 11111011 11101100 11110110 11111000 11101000 11111011 11001010 11110010 10001000 00000000 00001000 01110010 01001010 01111011 01101000 01111000 01110110 01101100 01111011 01010001 01110100 00010100 01001010 10000010 11101111 11000011 11111010 11100100 11111001 11110101 11101111 11111011 11010110 11110110 10100011 11011010 00000000 01101001 00111010 01111001 01100001 01111010 01110011 01110001 01111011 01011100 01111000 00110000 01100011 00000000 11100011 10110000 11111000 11011100 11111011 11110001 11110011 11111010 11100001 11111001 10111010 11101001 10000000 01011010 00100011 01110110 01010110 01111011 01101111 01110101 01111001 01100100 01111010 01000011 01101111 00000010 11001010 10010100 11110100 1101000111111011 11101100 11110110 11111000 11101000 11111011 11001010 11110010Crc编码结果:10001010000000 11101000011101 10110000000000 11111111000101 11010011100010 11111111011000 11111110001011 11111110011101 11111111010011 11101000001011 11111111001110 10110001010011 11101001001110 10001010000000 01011001010011 00101100011101 0111010011000101011000110001 01110101011000 01100011111111 01110100101100 01110101001110 01100010100111 01110101010011 01001110011101 01100011111111 00000000010110 11000101010011 10011100100111 11111110100111 11010010001011 11111111011000 11101001100010 1111111011000111111111000101 11101001000101 11111111011000 11000101010011 11111110010110 10001011000101 00000000000000 00000001000101 01110100010110 01001111010011 01110101011000 01100011000101 01110101000101 01110100110001 01100011100010 01110101011000 0101100000101101110100100111 00010110100111 01001111010011 10001010010110 11101001111111 11000100011101 11111111010011 11101000100111 11111111001110 11111110101100 11101001111111 11111111011000 11010010110001 11111110110001 10100110011101 11010011010011 00000000000000差分双向码:1010101001011010101010101010 1001101001010101011001101001 1010011010101010101010101010 1001100110011001010101101001 1001011010100110010101011010 10011001100110010110010101011001100110011010101001011001 1001100110011010100110010110 1001100110011001011010100110 1001101001010101010110100110 1001100110011001010110011010 1010011010101001011010100110 1001101001010110101001100101 1010101001011010101010101010 0110100110101001011010100110 0101101001101010100110010110 0110011010010101100101010110 0110100110101010011010101001 0110011010010110100110101010 0110010101011001100110011001 0110011010010101101001101010 0110011010010110101001100101 0110010101011010010101100110 0110011010010110100101011001基带码型反变换结果:10001010000000 11101000011101 10110000000000 11111111000101 11010011100010 11111111011000 11111110001011 11111110011101 11111111010011 11101000001011 11111111001110 10110001010011 11101001001110 10001010000000 01011001010011 00101100011101 0111010011000101011000110001 01110101011000 01100011111111 01110100101100 01110101001110 01100010100111 01110101010011 01001110011101 01100011111111 00000000010110 11000101010011 10011100100111 11111110100111 11010010001011 11111111011000 11101001100010 1111111011000111111111000101 11101001000101 11111111011000 11000101010011 11111110010110 10001011000101 00000000000000 00000001000101 01110100010110 01001111010011 01110101011000 01100011000101 01110101000101 01110100110001 01100011100010 01110101011000 0101100000101101110100100111 00010110100111 01001111010011 10001010010110 11101001111111 11000100011101 11111111010011 11101000100111 11111111001110 11111110101100 11101001111111 11111111011000 11010010110001 11111110110001 10100110011101 11010011010011 0000000000000001100011001110 00111011010011 01110101001110 01100010001011 01110101010011 01110100011101 01110100001011 01110101011000 01011001100010 01110101000101 00111010000000 01100010011101 00000000000000 11101000011101 10110000000000 11111111000101 11010011100010Crc解码结果:10000000 11100011 10110000 11111000 11011100 11111011 11110001 11110011 11111010 11100001 11111001 10111010 11101001 10000000 01011010 00100011 0111011001010110 01111011 01101111 01110101 01111001 01100100 01111010 01000011 01101111 00000010 11001010 10010100 11110100 11010001 11111011 11101100 1111011011111000 11101000 11111011 11001010 11110010 10001000 00000000 00001000 01110010 01001010 01111011 01101000 01111000 01110110 01101100 01111011 0101000101110100 00010100 01001010 10000010 11101111 11000011 11111010 11100100 11111001 11110101 11101111 11111011 11010110 11110110 10100011 11011010 0000000001101001 00111010 01111001 01100001 01111010 01110011 01110001 01111011 01011100 01111000 00110000 01100011 00000000 11100011 10110000 11111000 11011100Pcm译码结果:0.000732422 0.914063 0.0966797 2.29688 0.667969 2.57813 1.64063 1.82813 2.48438 0.820313 2.39063 0.155273 1.19531 0.000732422 -0.621094 -0.0571289 -2.10938-0.527344 -2.57813 -1.47656 -2.01563 -2.39063 -0.960938 -2.48438 -0.228516 -1.47656 -0.00366211 0.310547 0.0300293 1.92188 0.410156 2.57813 1.33594 2.109382.29688 1.14844 2.57813 0.310547 1.73438 0.0124512 -0.000732422 -0.0124512 -1.73438 -0.310547 -2.57813 -1.14844 -2.29688 -2.10938 -1.33594 -2.57813 -0.410156-1.92188 -0.0300293 -0.310547 0.00366211 1.47656 0.228516 2.48438 0.960938 2.39063 2.015631.476562.57813 0.527344 2.10938 0.0571289 0.621094 -0.000732422-1.19531 -0.155273 -2.39063 -0.820313 -2.48438 -1.82813 -1.64063 -2.57813 -0.667969 -2.29688-0.0966797 -0.914063 -0.000732422 0.914063 0.0966797 2.29688 0.667969五、收获与体会通过此次试验,在不断查阅相关知识后,我对pcm编译码,crc编解码以及差分双相码的变换与反变换过程更加熟悉,真正理解了他们各自编解码的原理。
实验七信道编码仿真实现一、实验目的理解信道编码的思想,掌握信道编码的编程实现原理及技术。
二、实验原理信道编码的基本思想信道编码的对象:是信源编码器输出的信息序列m。
通常是二元符号1、0组成的序列。
信道编码的基本思想按一定规则给数字序列m增加一些多余的码元,使不具有规律性的信息序列 m 变换为具有某种规律性的数码序列 C;码序列中的信息序列码元与多余码元之间是相关的;信道译码器利用这种预知的编码规则译码。
检验接收到的数字序列 R 是否符合既定的规则,从而发现 R 中是否有错,或者纠正其中的差错;编码采用汉明码汉明码的编码原理汉明码编码Hamming码中文称作汉明码。
汉明码是由汉明于1950年提出的,具有纠正一位错误能力的线性分组码它的突出特点是:编译码电路简单,易于硬件实现;用软件实现编译码算法时,软件效率高;而且性能比较好.汉明码的定义:若一致监督矩阵H 的列是由不全为0且互不相同的所有二进制m(m≥2的正整数)重组成,则由此H矩阵得到的线性分组码称为[2m-1,2m-1-m,3]汉明码。
1.3.2 汉明码的构造特点:1).绐定一个m,我们由二进制m 重组成线性分组码的监督矩阵H,由二进制m重来标定一个发生错误的位置。
由此可知,二进制m 重共有2 种位组合,去掉一个全为0的位组合,则余下共有2m-1种位组合。
故汉明码的最大码长n=2m-1。
2).由上面分析,我们可以知道:m 即是汉明码监督位的位数。
故一个汉明码中,信息位的位数k=n—m=2m-1-m3).汉明码的距离为3,因此可以纠正1位错误,检出2位错误。
汉明码编码的主要算法:汉明码的编码就是如何根据信息位数k,求出纠正一个错误的监督矩阵H,然后根据H求出信息位所对应的码字。
构造汉明码监督矩阵H的方法很多,这里仅介绍一种。
1)根据已知的信息位数k,从汉明不等式中求出校验位数m=n-k;2)在每个码字C:(C1,C2,⋯,C2m -1)中,用c02,c12,c n-12作为监督位,剩下的位作为信息位;3)用二进制数字表示2m-1列,得到2m-1列和m行监督矩阵H;4)用3步的H形成HC T =0,从而得出m个监督方程;5)将已知的信息代入方程组,然后求出满足上述方程组的监督位c (i=0,1,⋯,m一1)。
通信系统信道编码研究及仿真关键字:Matlab信道编码译码 Simulink目录摘要.............................................................................................. 错误!未定义书签。
Abstract....................................................................................... 错误!未定义书签。
绪论.. (1)1 信道编码 (3)1.1信道编码的概念及分类 (3)1.2 信道编码及各种码类的简介 (3)1.2.2 循环码 (4)1.2.3卷积码 (4)2 MATLAB简介 (6)2.1 MATLAB (6)2.2 Simulink简介 (6)3 汉明码 (8)3.1 汉明码编码原理 (8)3.2 汉明码对高斯白噪声信道编码及仿真 (9)4 循环码 (12)4.1 循环码编译码原理 (12)4.1.1 编码原理 (12)4.1.2 译码原理 (13)4.1.3 循环码的检错与纠错 (13)4.2 循环码编译码及仿真 (14)5 卷积码 (17)5.1卷积码及其维特比译码原理 (17)5.2卷积码仿真......................................................................... 1错误!未定义书签。
5.2.1 维比特译码器仿真........................................................ 1错误!未定义书签。
5.2.2 简化后的维特比译码器仿真 (25)结论 (27)参考文献 (28)附录一汉明码仿真代码 (29)附录二 (7,4)循环码仿真代码 (32)附录三 (3,2)循环码仿真代码 (33)绪论现如今,随着无线通信技术的快速发展,数字信号技术发展迅速,它已渐渐将模拟信号取代成为了主流的传输信号类型,其优点有数字通信保密性高、抗干扰性能强、调制信号容易等。
实验七信道编码仿真实现班级:08电子信息工程二班实验人:马华臣一、实验目的理解信道编码的思想,掌握信道编码的编程实现原理及技术。
二、实验内容1.随机产生二进制信源消息序列。
产生随机数的方法与前面类似,利用srand( (unsigned)time( NULL ) )和rand()函数模拟产生随机数。
2.利用信道编码方法进行编译码。
信道的编译码分三部分,即编码部分,信道模拟部分,译码部分。
编码部分采用汉明编码。
模拟信道,采用rand()函数随机确定产生差错的位置。
译码部分,采用标准阵列表直接全表查找的方法译码。
本程序实现的是对汉明(5,2)码的编码与译码(课本P362-363)。
生成矩阵为: G= 1 0 1 1 10 1 1 0 1三、程序//汉//汉明(5,2)码的编码与标准阵列译码////////////////////////////////#include "stdio.h"#include "math.h"#include"stdlib.h"#include "time.h"void main(){ int aa[10000];int i;int N;////////////////////////int b[4][7]={{1,0,1,1,1},{0,1,1,0,1}};//定义生成矩阵int y=0,s=0;int j,k,m,n;int a[4],q[7],rr[10000/2*5];//////////////////////////int p,u,D=0;int cc[2500],dd[2500],ee[2500];int e[7][5]={{1,0,0,0,0},{0,1,0,0,0},{0,0,1,0,0},{0,0,0,1,0},{0,0,0,0,1},{1,0,1,0,0},{1,0,0,0,1}};//定义错误图样int w[10000/2*5];int ww[10000/2];printf("汉明(5,2)码的编码与标准阵列译码:\n");printf("请输入你想产生的二进制个数(至少四个但不超过1万):");scanf("%d",&N); //输入想产生的信源的个数while(N<4){printf("输入无效,请重新输入");printf("请输入你想产生的二进制个数(至少四个):");scanf("%d",&N);}printf("随机产生的二进制序列为:\n");srand( (unsigned)time( NULL ) ); //产生一个随机序列,并把它放入a[]中for(i=0;i<N;i++){aa[i]=rand()%2;printf("%d",aa[i]);}printf("\n");////////////////////////////////////////////////printf("编码后变为:\n");//编码生成码字for(m=0;m<N/2;m++){for(i=y;i<(y+2);i++){a[i-y]=aa[i];} ////取出4位出来for (j=0;j<5;j++){q[j]=0;for(k=0;k<2;k++)q[j]+=a[k]*b[k][j];/////与生成矩阵相乘}for(i=s;i<(s+5);i++){rr[i]=0;rr[i]=q[i-s]%2;printf("%d",rr[i]);////将生成的放入rr[]中}y=y+2;////向后移动4位s=s+5;///向后移动7位printf("\t");}////////////////////////////////////printf("经过信道后变为:\n");//模拟信道差错srand( (unsigned)time( NULL ) );for(j=0;j<N/2;j++){cc[j]=rand()%100;////产生一个0~99的随机数if(cc[j]<9)////当随机数小于9时,一个码字产生2个错误{for(i=D;i<(D+5);i++){ee[j]=rand()%2;///随机产生一个0~1的数,以确定是码字二个错误的位置u=ee[j];w[i]=0;w[i]=(rr[i]+e[5+u][i-D])%2;printf("%d",w[i]);}}else if((cc[j]>=9)&&(cc[j]<=30))///当随机数在9~30时,一个码字产生一个错误{dd[j]=rand()%5;p=dd[j]; ///随机产生一个0~4的数,以确定是码字一个错误的位置for(i=D;i<(D+5);i++){w[i]=0;w[i]=(rr[i]+e[p][i-D])%2;printf("%d",w[i]);}}else //////当随机数在30~99时,不发生错误{for(i=D;i<(D+5);i++){w[i]=0;w[i]=rr[i];printf("%d",w[i]);}}D=D+5;////向后移动7位if(cc[j]<9) printf(" 两位错");else if(cc[j]>=9&&cc[j]<=30) printf(" 一位错");else printf(" ");/////进行跟踪,以确定码字错几位printf("\t");}////////////////////////////printf("经过译码后变为: \n");//采用标准阵列译码表进行译码for(i=0,j=0;i<N/2*5;i+=5,j++){ //标准阵列译码表if( (w[i]==0&&w[i+1]==0&&w[i+2]==0&&w[i+3]==0&&w[i+4]==0)||(w[i]==1&&w[i+1]==0&&w[i+2]==0&&w[i+3]==0&&w[i+4]==0)||(w[i]==0&&w[i+1]==1&&w[i+2]==0&&w[i+3]==0&&w[i+4]==0)||(w[i]==0&&w[i+1]==0&&w[i+2]==1&&w[i+3]==0&&w[i+4]==0)||(w[i]==0&&w[i+1]==0&&w[i+2]==0&&w[i+3]==1&&w[i+4]==0)||(w[i]==0&&w[i+1]==0&&w[i+2]==0&&w[i+3]==0&&w[i+4]==1)||(w[i]==1&&w[i+1]==0&&w[i+2]==1&&w[i+3]==0&&w[i+4]==0)||(w[i]==1&&w[i+1]==0&&w[i+2]==0&&w[i+3]==0&&w[i+4]==1)) printf("00000"); else if( (w[i]==1&&w[i+1]==0&&w[i+2]==1&&w[i+3]==1&&w[i+4]==1)||(w[i]==0&&w[i+1]==0&&w[i+2]==1&&w[i+3]==1&&w[i+4]==1)||(w[i]==1&&w[i+1]==1&&w[i+2]==1&&w[i+3]==1&&w[i+4]==1)||(w[i]==1&&w[i+1]==0&&w[i+2]==0&&w[i+3]==1&&w[i+4]==1)||(w[i]==1&&w[i+1]==0&&w[i+2]==1&&w[i+3]==0&&w[i+4]==1)||(w[i]==1&&w[i+1]==0&&w[i+2]==1&&w[i+3]==1&&w[i+4]==0)||(w[i]==0&&w[i+1]==0&&w[i+2]==0&&w[i+3]==1&&w[i+4]==1)||(w[i]==0&&w[i+1]==0&&w[i+2]==1&&w[i+3]==1&&w[i+4]==0)) printf("10111"); else if( (w[i]==0&&w[i+1]==1&&w[i+2]==1&&w[i+3]==0&&w[i+4]==1)||(w[i]==1&&w[i+1]==1&&w[i+2]==1&&w[i+3]==0&&w[i+4]==1)||(w[i]==0&&w[i+1]==0&&w[i+2]==1&&w[i+3]==0&&w[i+4]==1)||(w[i]==0&&w[i+1]==1&&w[i+2]==0&&w[i+3]==0&&w[i+4]==1)||(w[i]==0&&w[i+1]==1&&w[i+2]==1&&w[i+3]==1&&w[i+4]==1)||(w[i]==0&&w[i+1]==1&&w[i+2]==1&&w[i+3]==0&&w[i+4]==0)||(w[i]==1&&w[i+1]==1&&w[i+2]==0&&w[i+3]==0&&w[i+4]==1)||(w[i]==1&&w[i+1]==1&&w[i+2]==1&&w[i+3]==0&&w[i+4]==0)) printf("01101"); else if( (w[i]==1&&w[i+1]==1&&w[i+2]==0&&w[i+3]==1&&w[i+4]==0)||(w[i]==0&&w[i+1]==1&&w[i+2]==0&&w[i+3]==1&&w[i+4]==0)||(w[i]==1&&w[i+1]==0&&w[i+2]==0&&w[i+3]==1&&w[i+4]==0)||(w[i]==1&&w[i+1]==1&&w[i+2]==1&&w[i+3]==1&&w[i+4]==0)||(w[i]==1&&w[i+1]==1&&w[i+2]==0&&w[i+3]==0&&w[i+4]==0)||(w[i]==1&&w[i+1]==1&&w[i+2]==0&&w[i+3]==1&&w[i+4]==1)||(w[i]==0&&w[i+1]==1&&w[i+2]==1&&w[i+3]==1&&w[i+4]==0)||(w[i]==0&&w[i+1]==1&&w[i+2]==0&&w[i+3]==1&&w[i+4]==1)) printf("11010");elsefor(n=0;n<5;n++){printf("%d",w[i+n]);}printf("\t");}getchar();getchar();//定住显示窗口}四、实验结果五、实验分析此(5,2)码能纠正所有1为随机错误,以及2个发生二位错误的随机错误。
现给出循环码及卷积码的编解码程序,理解各程序,完成以下习题。
将程序运行结果及各题目的解答写入word 中:1.用matlab 运行书上习题中的“clockcode.m ” (a )说明(7,4)码的纠错检错方法(b )在程序中标注“注释”处加上注释(英文或中文)(c )对于编码和未编码的情况,误比特率为1e-2、1e-3及1e-4时的Eb/N0分别是多少? (d )从物理意义上说明编码增益问题(e )当采用(15,11)码时,观察与(7,4)码相比编码增益的变化。
解: clockcode.m 程序运行结果如下:101010101010B E RE b /N 0 [dB](a) 纠错方法:首先将接收且进行判决过后的值进行分组,每7个二进制码为一组,视为一个向量。
用这一向量乘以一致校验矩阵H ,得到生成伴随式矢量s 。
若s=0,则认认为没有错,直接输出。
若s 与H T 的某一列相同,即有着相同的错误图样,则将收到的该位取反(即进行模二加),进行纠错,将纠错后的结果输出。
(b) clockcode.m 程序:data1=rand(1,nd)>0.5; % 注释:产生信源数据 x=encode(data1); %%注释:对信源数据进行信道编码 sigma=E/sqrt(2*SNR);%注释:能量归一化sigma1=E/sqrt(2*SNR*code_rate); %注释: 能量归一化 data2(i)=-E+Gngauss(sigma);% 注释:对未编码的信号进行BPSK 调制,同时加入加性高斯白噪声data2(i)=E+Gngauss(sigma); % 注释:对未编码的信号进行BPSK 调制,同时加入加性高斯白噪声 data3(i)=-E+Gngauss(sigma1); % 注释:对编码后的信号进行BPSK 调制,同时加入加性高斯白噪声 data3(i)=E+Gngauss(sigma1);% 注释:对编码后的信号进行BPSK 调制,同时加入加性高斯白噪声demodata1=data2 > 0; % 注释:过零比较判决,大于零判为1码,反之判为0码 noe2=sum(abs(data1-demodata1)); % 注释:统计误码个数 nod2=length(data1); % 注释:统计发送的码的个数 ber(snr_num) = noe/nod; %注释:误码率=误码个数/发送个数encode.m 程序:temp=data1(4*i-3:4*i); %注释:从data1(信源)中取数,每次取4个 cyctemp=temp*G; %注释:结合下一条语句完成对4位二进制数的编码cyctemp=mod(cyctemp,2); %注释:结合上一条语句完成对4位二进制数的编码;前一条完成了x=uG ,本条将生成的x变成二进制的结果encode(7*i-6:7*i)=cyctemp; %注释:将编出的7位码存放到输出数组中decode.m程序:temp = x(7*j-6:7*j); %注释:从待译码的序列中取出7个数s=temp*Ht; %注释:利用一致校验矩阵生成生成伴随式矢量if(s == Ht(k,:)) %注释:若S和Ht中的某一行相同,即有着相同的“错误图样”temp(k)=mod(temp(k)+1,2); %注释:就将收到的某一位进行模2加,进行纠错。
信道编码方案设计一、实验目的1、理解信道编码的思想,掌握信道编码的编程实现原理及技术。
2、学习并理解信道编码的根本目的、技术要求与基本目标等基本概念;掌握线性分组码的物理含义、数学基础及检纠错原理;掌握循环码的码型特点、检纠错能力、编译码方法及基本技术;二、实验原理信道编码是为了提高通信的可靠性而采取的一种编码策略。
信道编码的核心基础是纠错编码理论,是在信息码后面附加上一些监督码,以便在接收端发现和纠正误码。
信道是信号从信源传送到信宿的通路。
由于信道有干扰,使得传送的数据流(码流)中产生误码。
误码的处理技术有纠错、交织、线性内插等。
信道编码的目的是提高信息传输或通信的可靠性。
信道编码的任务是降低误码率,使系统具有一定的纠错能力和抗干扰能力,提高数据传输效率。
道编码的过程是在源数据码流中加插一些码元,达到在接收端进行检错和纠错的目的。
在带宽固定的信道中,总的传送码率是固定的,由于信道编码增加了数据量,其结果只能是以降低传送有用信息码率为代价了。
三、实验步骤1、传送二进制码“ 0”的概率P0=0.6,〃1〃的概率p1=1-p0。
2、利用单极性基带信号传输,从判决输入端观测,用电平s0=0传输“0”,用电平s1=A传输“1”,信道中的噪声是加性的零均值高斯噪声,方差为柯西的平方,3、在最佳门限电平判决下传输误码率Pe与A2/柯西平方下的曲线。
4、每一个给定噪声方差下仿真传输序列长度为105bit,四、实验程序clear;s0=0;s1=5;p0=0.6;%信源概率p1=1-p0;A2_over_sigma2_dB=-5:0.5:20;% 仿真信噪比范围A2_over_sigma2=10"(A2_over_sigma2_dB./10);sigma2=s1八2./A2_over_sigma2;N=1e5;for k=1:length(sigma2)X=(randn(1,N)>p0);n=sqrt(sigma2(k)).*randn(1,N);xi=s1.*X+n;C_opt=(s0+s1)/2+sigma2(k)/(s1-s0)*log(p0./p1);y=(xi>C_opt);err(k)=(sum(X-y~=0))./N;end semilogy(A2_over_sigma2_dB,err,'>r');hold on;for k=1:length(sigma2)C_opt=(s0+s1)./2+sigma2(k)./(s1-s0).*log(p0./p1);pe0=0.5-0.5*erf((C_opt-s0)/(sqrt(2*sigma2(k))));pe1=0.5+0.5*erf((C_opt-s1)/(sqrt(2*sigma2(k))));pe(k)=p0*pe0+p1*pe1;endsemilogy(A2_over_sigma2_dB,pe);% 理论误码率曲线xlabel('A八2八sigma八2(dB)');ylabel('错误率p_e');legend('实际误码率','理论误码率');五、实验结果六、分析讨论通过这次实验,是我更加深刻的理解了信道编码的目的,并懂得了误码率的重要意义,此次实验matlab仿真较为简单,但是在画图方面有一定难度,最终我利用semilogy函数和两种不同的线性及颜色将理论误码率和实际误码率清晰的呈现在了同一张图上。
实验七信道编码仿真实现班级:08电子信息工程二班实验人:马华臣一、实验目的理解信道编码的思想,掌握信道编码的编程实现原理及技术。
二、实验内容1.随机产生二进制信源消息序列。
产生随机数的方法与前面类似,利用srand( (unsigned)time( NULL ) )和rand()函数模拟产生随机数。
2.利用信道编码方法进行编译码。
信道的编译码分三部分,即编码部分,信道模拟部分,译码部分。
编码部分采用汉明编码。
模拟信道,采用rand()函数随机确定产生差错的位置。
译码部分,采用标准阵列表直接全表查找的方法译码。
本程序实现的是对汉明(5,2)码的编码与译码(课本P362-363)。
生成矩阵为: G= 1 0 1 1 10 1 1 0 1三、程序//汉//汉明(5,2)码的编码与标准阵列译码////////////////////////////////#include "stdio.h"#include "math.h"#include"stdlib.h"#include "time.h"void main(){ int aa[10000];int i;int N;////////////////////////int b[4][7]={{1,0,1,1,1},{0,1,1,0,1}};//定义生成矩阵int y=0,s=0;int j,k,m,n;int a[4],q[7],rr[10000/2*5];//////////////////////////int p,u,D=0;int cc[2500],dd[2500],ee[2500];int e[7][5]={{1,0,0,0,0},{0,1,0,0,0},{0,0,1,0,0},{0,0,0,1,0},{0,0,0,0,1},{1,0,1,0,0},{1,0,0,0,1}};//定义错误图样int w[10000/2*5];int ww[10000/2];printf("汉明(5,2)码的编码与标准阵列译码:\n");printf("请输入你想产生的二进制个数(至少四个但不超过1万):");scanf("%d",&N); //输入想产生的信源的个数while(N<4){printf("输入无效,请重新输入");printf("请输入你想产生的二进制个数(至少四个):");scanf("%d",&N);}printf("随机产生的二进制序列为:\n");srand( (unsigned)time( NULL ) ); //产生一个随机序列,并把它放入a[]中for(i=0;i<N;i++){aa[i]=rand()%2;printf("%d",aa[i]);}printf("\n");////////////////////////////////////////////////printf("编码后变为:\n");//编码生成码字for(m=0;m<N/2;m++){for(i=y;i<(y+2);i++){a[i-y]=aa[i];} ////取出4位出来for (j=0;j<5;j++){q[j]=0;for(k=0;k<2;k++)q[j]+=a[k]*b[k][j];/////与生成矩阵相乘}for(i=s;i<(s+5);i++){rr[i]=0;rr[i]=q[i-s]%2;printf("%d",rr[i]);////将生成的放入rr[]中}y=y+2;////向后移动4位s=s+5;///向后移动7位printf("\t");}////////////////////////////////////printf("经过信道后变为:\n");//模拟信道差错srand( (unsigned)time( NULL ) );for(j=0;j<N/2;j++){cc[j]=rand()%100;////产生一个0~99的随机数if(cc[j]<9)////当随机数小于9时,一个码字产生2个错误{for(i=D;i<(D+5);i++){ee[j]=rand()%2;///随机产生一个0~1的数,以确定是码字二个错误的位置u=ee[j];w[i]=0;w[i]=(rr[i]+e[5+u][i-D])%2;printf("%d",w[i]);}}else if((cc[j]>=9)&&(cc[j]<=30))///当随机数在9~30时,一个码字产生一个错误{dd[j]=rand()%5;p=dd[j]; ///随机产生一个0~4的数,以确定是码字一个错误的位置for(i=D;i<(D+5);i++){w[i]=0;w[i]=(rr[i]+e[p][i-D])%2;printf("%d",w[i]);}}else //////当随机数在30~99时,不发生错误{for(i=D;i<(D+5);i++){w[i]=0;w[i]=rr[i];printf("%d",w[i]);}}D=D+5;////向后移动7位if(cc[j]<9) printf(" 两位错");else if(cc[j]>=9&&cc[j]<=30) printf(" 一位错");else printf(" ");/////进行跟踪,以确定码字错几位printf("\t");}////////////////////////////printf("经过译码后变为: \n");//采用标准阵列译码表进行译码for(i=0,j=0;i<N/2*5;i+=5,j++){ //标准阵列译码表if( (w[i]==0&&w[i+1]==0&&w[i+2]==0&&w[i+3]==0&&w[i+4]==0)||(w[i]==1&&w[i+1]==0&&w[i+2]==0&&w[i+3]==0&&w[i+4]==0)||(w[i]==0&&w[i+1]==1&&w[i+2]==0&&w[i+3]==0&&w[i+4]==0)||(w[i]==0&&w[i+1]==0&&w[i+2]==1&&w[i+3]==0&&w[i+4]==0)||(w[i]==0&&w[i+1]==0&&w[i+2]==0&&w[i+3]==1&&w[i+4]==0)||(w[i]==0&&w[i+1]==0&&w[i+2]==0&&w[i+3]==0&&w[i+4]==1)||(w[i]==1&&w[i+1]==0&&w[i+2]==1&&w[i+3]==0&&w[i+4]==0)||(w[i]==1&&w[i+1]==0&&w[i+2]==0&&w[i+3]==0&&w[i+4]==1)) printf("00000"); else if( (w[i]==1&&w[i+1]==0&&w[i+2]==1&&w[i+3]==1&&w[i+4]==1)||(w[i]==0&&w[i+1]==0&&w[i+2]==1&&w[i+3]==1&&w[i+4]==1)||(w[i]==1&&w[i+1]==1&&w[i+2]==1&&w[i+3]==1&&w[i+4]==1)||(w[i]==1&&w[i+1]==0&&w[i+2]==0&&w[i+3]==1&&w[i+4]==1)||(w[i]==1&&w[i+1]==0&&w[i+2]==1&&w[i+3]==0&&w[i+4]==1)||(w[i]==1&&w[i+1]==0&&w[i+2]==1&&w[i+3]==1&&w[i+4]==0)||(w[i]==0&&w[i+1]==0&&w[i+2]==0&&w[i+3]==1&&w[i+4]==1)||(w[i]==0&&w[i+1]==0&&w[i+2]==1&&w[i+3]==1&&w[i+4]==0)) printf("10111"); else if( (w[i]==0&&w[i+1]==1&&w[i+2]==1&&w[i+3]==0&&w[i+4]==1)||(w[i]==1&&w[i+1]==1&&w[i+2]==1&&w[i+3]==0&&w[i+4]==1)||(w[i]==0&&w[i+1]==0&&w[i+2]==1&&w[i+3]==0&&w[i+4]==1)||(w[i]==0&&w[i+1]==1&&w[i+2]==0&&w[i+3]==0&&w[i+4]==1)||(w[i]==0&&w[i+1]==1&&w[i+2]==1&&w[i+3]==1&&w[i+4]==1)||(w[i]==0&&w[i+1]==1&&w[i+2]==1&&w[i+3]==0&&w[i+4]==0)||(w[i]==1&&w[i+1]==1&&w[i+2]==0&&w[i+3]==0&&w[i+4]==1)||(w[i]==1&&w[i+1]==1&&w[i+2]==1&&w[i+3]==0&&w[i+4]==0)) printf("01101"); else if( (w[i]==1&&w[i+1]==1&&w[i+2]==0&&w[i+3]==1&&w[i+4]==0)||(w[i]==0&&w[i+1]==1&&w[i+2]==0&&w[i+3]==1&&w[i+4]==0)||(w[i]==1&&w[i+1]==0&&w[i+2]==0&&w[i+3]==1&&w[i+4]==0)||(w[i]==1&&w[i+1]==1&&w[i+2]==1&&w[i+3]==1&&w[i+4]==0)||(w[i]==1&&w[i+1]==1&&w[i+2]==0&&w[i+3]==0&&w[i+4]==0)||(w[i]==1&&w[i+1]==1&&w[i+2]==0&&w[i+3]==1&&w[i+4]==1)||(w[i]==0&&w[i+1]==1&&w[i+2]==1&&w[i+3]==1&&w[i+4]==0)||(w[i]==0&&w[i+1]==1&&w[i+2]==0&&w[i+3]==1&&w[i+4]==1)) printf("11010");elsefor(n=0;n<5;n++){printf("%d",w[i+n]);}printf("\t");}getchar();getchar();//定住显示窗口}四、实验结果五、实验分析此(5,2)码能纠正所有1为随机错误,以及2个发生二位错误的随机错误。