信道编码仿真实践
信道编码实验报告
信道编码实验报告引言:信道编码是一种常用的通信技术,用于增强数据传输的可靠性和效率。
通过在发送端对数据进行编码,并在接收端进行解码,可以有效地纠正或检测在信道传输过程中产生的错误。
本实验旨在研究不同的信道编码方法,并分析它们在不同信道条件下的性能。
一、实验目的:1.了解信道编码的概念和基本原理;2.掌握常用的信道编码方法和相关算法;3.通过实验验证不同信道编码方法的性能;4.分析信道编码在不同信道条件下的适用性。
二、实验原理:1.信道编码概述:信道编码主要分为前向纠错编码(Forward Error Correction, FEC)和自动重传请求(Automatic Repeat reQuest, ARQ)两类。
其中,FEC方法通过在数据流中引入冗余信息,使接收端能够检测和纠正一定数量的错误。
而ARQ方法则是通过接收端向发送端发送请求进行重传,从而实现数据的可靠传输。
2.常用的信道编码方法:在实验中,我们主要研究了以下几种常用的信道编码方法:(1)奇偶校验编码:奇偶校验编码是最简单的一种编码方式,它通过在数据末尾添加一个校验位来实现错误检测。
若校验位与数据位中的奇偶性不一致,则认为出现错误。
(2)海明码编码:海明码是一种通过添加冗余位来实现错误检测和纠正的编码方法。
通过在数据位中插入冗余位,接收端可以检测到并纠正一定数量的错误。
(3)卷积码编码:卷积码是一种递归线性均匀的编码方法,通过引入冗余信息来增强信号的可靠性。
它具有较好的纠错性能,广泛应用于无线通信领域。
三、实验过程:1.实验环境准备:在实验中,我们使用了Matlab软件进行信道编码的仿真实验。
通过编写相应的算法和程序,可以模拟不同的信道编码方法,并分析它们的性能。
2.编写奇偶校验编码程序:首先,我们编写了奇偶校验编码的程序,通过向数据流中添加校验位实现错误检测。
然后,对不同的信道条件进行仿真实验,并记录不同错误率下的传输性能。
3.编写海明码编码程序:接下来,我们编写了海明码编码的程序,通过插入冗余位实现错误检测和纠正。
东南大学_短距离无线通信_信道编解码仿真实验报告
考虑BSC信道,令错误概率0.02:0.02:0p通过仿真分别确定无编码、码率1/3重复码以及(7,4)汉明码的BER clear allclcK=10000;N=3*K;G=[1 1 0 1 0 0 0; 0 1 1 0 1 0 0; 1 1 1 0 0 1 0; 1 0 1 0 0 0 1;];H=[1 0 0 1 0 1 1; 0 1 0 1 1 1 0; 0 0 1 0 1 1 1;]; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%±àÂëx0=randi([0,1],K,1)';y0=repmat(x0,3,1);y0=reshape(y0,1,numel(y0));for i=1:K/4z0(7*i-6:7*i)=mod(x0(4*i-3:4*i)*G,2);end%%%%%%%%%%%%%%%%%%%%%%%%´«Êäc=rand(1,7*N/4);for ii=1:6p=ii*0.02;x1=zeros(1,K);for i=1:Kif c(i)<px1(i)=-x0(i)+1;elsex1(i)=x0(i);endendy1=zeros(1,N);for i=1:Nif c(i)<py1(i)=-y0(i)+1;elsey1(i)=y0(i);endendz1=zeros(1,7*K/4);for i=1:7*K/4if c(i)<pz1(i)=-z0(i)+1;elsez1(i)=z0(i);endend %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ÒëÂëx2=x1;y2=zeros(1,K);for i=1:Kif y1(3*i-2)+y1(3*i-1)+y1(3*i)<2y2(i)=0;elsey2(i)=1;endendz2=zeros(1,7*K/4);mask=[0 0 0 0 0 0 0];for i=1:K/4zz=mod(z1(7*i-6:7*i)*H',2);zzz=zz(1)*4+zz(2)*2+zz(3)*1;switch(zzz)case 4mask=[1 0 0 0 0 0 0];case 2mask=[0 1 0 0 0 0 0];case 1mask=[0 0 1 0 0 0 0];case 6mask=[0 0 0 1 0 0 0];case 3mask=[0 0 0 0 1 0 0];case 7mask=[0 0 0 0 0 1 0];case 5mask=[0 0 0 0 0 0 1];case 0mask=[0 0 0 0 0 0 0];endz2(7*i-6:7*i)=double(bitxor(int8(mask),int8(z1(7*i-6:7*i)))); endfor i=1:K/4z3(4*i-3:4*i)=z2(7*i-3:7*i);endUncoded(ii)=length(find((x0-x2)==0))/K;Repitition(ii)=length(find((x0-y2)==0))/K;Hamming(ii)=length(find((x0-z3)==0))/K;endx=0.02:0.02:0.12;semilogx(x,Repitition,x,Hamming,x,Uncoded);xlabel('BER'); legend('Repitition','Hamming','Uncoded');BSC信道中无编码性能最差(7,4)汉明码性能次之,复杂度最高1/3重复吗性能最优BER越高,三种编码的差距越明显考虑AWGN信道,设定单位信息比特能量Eb =1,信噪比Eb/ 变化范围为0:2:12dB,通过仿真分别确定无编码、码率1/3重复码以及(7,4)汉明码的BER(后两种采用硬译码算法)clear allclcK=10000;N=3*K;G=[1 1 0 1 0 0 0; 0 1 1 0 1 0 0; 1 1 1 0 0 1 0; 1 0 1 0 0 0 1;];H=[1 0 0 1 0 1 1; 0 1 0 1 1 1 0; 0 0 1 0 1 1 1;]; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%±àÂëx0=randi([0,1],K,1)';y0=repmat(x0,3,1);y0=reshape(y0,1,numel(y0));for i=1:K/4z0(7*i-6:7*i)=mod(x0(4*i-3:4*i)*G,2);end%%%%%%%%%%%%%%%%%%%%%%%%´«Êäfor ii=1:7SNR=2*ii-2;Eb=1;SNR=10^(SNR/10);sigma=sqrt(Eb/SNR);AWGN=sigma*randn(1,N); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%a0=Eb*(-2*x0+1) +AWGN(1:K);b0=Eb*(-2*y0+1)/sqrt(3) +AWGN(1:N);c0=Eb*(-2*z0+1)*2/sqrt(7)+AWGN(1:7*K/4); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%a1=(sign(a0)-1)/(-2);b1=(sign(b0)-1)/(-2);c1=(sign(c0)-1)/(-2);a2=a1;b2=zeros(1,K);for i=1:Kif b1(3*i-2)+b1(3*i-1)+b1(3*i)<2b2(i)=0;elseb2(i)=1;endendc2=zeros(1,7*K/4);mask=[0 0 0 0 0 0 0];for i=1:K/4cc=mod(c1(7*i-6:7*i)*H',2);ccc=cc(1)*4+cc(2)*2+cc(3)*1;switch(ccc)case 4mask=[1 0 0 0 0 0 0];case 2mask=[0 1 0 0 0 0 0];case 1mask=[0 0 1 0 0 0 0];case 6mask=[0 0 0 1 0 0 0];case 3mask=[0 0 0 0 1 0 0];case 7mask=[0 0 0 0 0 1 0];case 5mask=[0 0 0 0 0 0 1];case 0mask=[0 0 0 0 0 0 0];endc2(7*i-6:7*i)=double(bitxor(int8(mask),int8(c1(7*i-6:7*i))));endfor i=1:K/4c3(4*i-3:4*i)=c2(7*i-3:7*i);endUncoded(ii)=length(find((x0-a2)==0))/K;Repitition(ii)=length(find((x0-b2)==0))/K;Hamming(ii)=length(find((x0-c3)==0))/K;endx=0:2:12;plot(x,Uncoded,x,Repitition,x,Hamming);xlabel('SNR');ylabel('BER'); legend('Uncoded','Repitition','Hamming');AWGN信道中在SNR<5dB无编码性能最优1/3重复码性能次之汉明码性能最差在SNR<5dB无编码性能最优汉明码性能次之1/3重复码性能最差SNR越低,三种编码的差距越明显。
信道编码实验报告
无线通信基础课程设计报告(信道编码)小组成员:指导老师:完成时间:无线通信系统课程设计报告实验摘要:数字信号在传输中往往由于各种原因,使得在传送的数据流中产生误码,从而使接收端产生图象跳跃、不连续等现象。
信道编码通过对数码流进行相应的处理,使系统具有一定的检错和纠错能力,可极大地避免码流传送中误码的发生。
提高数据传输可靠性,降低误码率是信道编码的任务。
实验名称:信道编码实验目标:本实验的目标是领会信道编码的基本思想。
并通过比较有无信道编码模块的不同系统误码率性能,感受信道编码技术对于提高系统性能的重要意义。
实验原理:打开“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仿真实验中的应用
⚫ 输入参数2——trellis,卷积码编码器的网格结构;
⚫ 输入参数3——tblen,a positive integer scalar,用于规定回溯深 度。If the code rate is 1/2, a typical value for tblen is about five times the constraint length of the code;
⚫ 输入参数1——msg,未编码的信息符号序列,二进制矢量形式; ⚫ 输入参数2——trellis,卷积码编码器的网格结构; ⚫ 输出参数——code,编码后的卷积码符号序列,二进制矢量形式。
⚫ 卷积码译码的MATLAB函数为:
⚫ vitdec
卷积码的维特比译码(二进制数据)
⚫ 最常用的函数格式为:
⚫ 输入参数5—— dectype,指示译码器的判决类型。其取值不同, 对应的输入参数1——code的数据类型也不同。其取值如下表:
Values of Meaning dectype Input
'unquant' 软判决,code的数据类型为实数(未量化),其中1表示逻 辑‘0’,-1表示逻辑‘1’ 。
decoded = vitdec(code,trellis,tblen,opmode,dectype);
decoded = vitdec(code,trellis,tblen,opmode,'soft',nsdec)
⚫ 输入参数1——code,维特比译码器的输入符号序列,矢量形式。以 前述2/3码率的编码器结构为例,每个符号代表编码器输出的3个bit;
一、信道编码概述 四、卷积码译码
二、卷积码的结构 描述
三、卷积码编码
⚫ 信道编码又称检纠错编码,通过增加一定的 冗余度以提高数字通信系统的可靠性。
移动通信中的信道编码和信源编码仿真
移动通信中的信道编码和信源编码仿真摘要:人们对追求最佳的通信性能的有效性和靠得住性为目标的信源编码技术和信道编码技术提出愈来愈高的要求。
本设计第一学习了移动通信系统中信道编码和信源编码的大体理论,和通信仿真的概念、一样步骤。
然后在此基础上利用编程和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、下面进行带限线性滤波器信道模型实验,这个信道模型是对存在码间干扰的信道的建模,反映信道特性的信道参数由学生自定义输入。
电子信息工程毕设设计__基于matlab的信道编码仿真
电子信息工程毕设设计__基于matlab的信道编码仿真基于matlab的信道编码仿真海南大学毕业论文(设计)题目:基于matlab的信道编码仿真学号:姓名: 年级: 学院:信息科学技术学院系别:电子信息工程专业:电子信息工程指导教师:完成日期:1基于matlab的信道编码仿真摘要通信技术的飞速发展,信道编码已经成功地应用于各种通信系统中。
以及各种传输方式对可靠性要求的不断提高,信道编码技术作为抗干扰技术的一种重要的手段,在数字通信技术领域和数字传输系统中显示出越来越重要的作用。
信道编码的目的是为了改善通信系统的传输质量。
由于实际信道存在噪声和干扰,使发送的码字与信道传输后所接收的码字之间存在差异,称这种差异为差错。
一般情况下,信道噪声、干扰越大,码字产生差错的概率也就越大。
本文利用matlab对二进制对称信道(BSC),高斯白噪声信道(AWGN)两种信道的仿真,(7,4)Hamming码对信道的仿真,通过误码率的曲线图来了解信道的编码。
并利用matlab的simulink模块仿真,运用simulink里的卷积码viterbi译码器来对二进制对称信道和高斯白噪声信道的仿真,观察误码率的曲线图来了解2个信道的不同。
关键字:matlab,信道,编码,译码,Simulink。
1基于matlab的信道编码仿真AbstractWith the rapid development of communication technology, channelcoding has been successfully applied to various communications systems. And a variety of transmission of the continuous improvement ofreliability requirements, anti-jamming channel coding technology as an important means of technology in the field of digital communications technology and digital transmission systems in a more and more important role.The purpose of channel coding is to improve the transmission quality of communications systems. As the actual existence of the channel noise and interference, the transmitted codewords and channel transmission received after the difference between code words, said this differenceis wrong. Under normal circumstances, channel noise, the greater the interference, the code word generated the greater the probability of error.In this paper, matlab binary symmetric channel (BSC), Gaussian white noise channel (AWGN) two channel simulation, (7,4) Hamming code simulation of the channel, through the bit error rate curve to understand the channel coding. Using matlab to simulink block simulation, using simulink in the viterbi decoder to convolutional codes on the binary symmetric channel and Gaussian white noise channel simulation, observation error rate graphs to understand the two different channelsKeywords: matlab, channel, coding, decoding, Simulink.2基于matlab的信道编码仿真目录1引言 ..................................................................... ...........................................................1 1.1选题的目的和意义 ..................................................................... .................................1 1.2本选题的理论依据、研究内容 ..................................................................... .............1 2.信道编码以及其运行环境MATLAB的介绍 (2)2.1 信道编码的概念及分类 ..................................................................... ........................2 2.2 信道编码定理及信道编码中所包含的各种码类的简介 ...........................................2 2.2.1卷积码 ..................................................................... .................................................2 2.2.2线性分组码 ..................................................................... .........................................3 2.2.3循环码 ..................................................................... .................................................3 2.3 MATLAB语言的简介 ...................................................................................................4 2.4Simulink ............................................................... ........................................................5 3.信道 ..................................................................... ...........................................................5 3.1二进制对称信道(BSC) .................................................................. ..........................5 3.2二进制删除信道(BEC) .................................................................. ..........................6 3.3高斯白噪声信道(AWGN) ................................................................. ............................6 4. Hamming 码...................................................................... .............................................7 4.1汉明码 ..................................................................... ....................................................7 4.2校验方法 ..................................................................... ................................................7 4.3汉明码编码 ..................................................................... ............................................9 4.3.1汉明码对高斯白噪声信道 ..................................................................... ..................9 4.3.2汉明码对二进制对称信道的仿真 ..................................................................... .....11 5.卷积码 ..................................................................... .....................................................15 5.1卷积码定义与原理 ..................................................................... ...............................15 5.2维特比译码原理 ..................................................................... ..................................15 5.3卷积码译码器对高斯白噪声信道的设计与仿真 .....................................................18 5.3.1卷积码译码器的设计与仿真 ..................................................................... (19)3基于matlab的信道编码仿真5.3.2简化维特比译码器的仿真 ..................................................................... ................22 5.3.3卷积码译码器的误码率分析 ..................................................................... ............24 5.4卷积编码器在二进制对称信道(BSC)中的性能 ................................................... 25 6.卷积码译码器对二进制对称信道和高斯白噪声信道仿真比较 .................................30 7.总结 ..................................................................... .........................................................31 致谢.................................................................................................................................32 参考文献 ..................................................................... ....................................................33 附录1: ..................................................................... .....................................................34 附录2: ..................................................................... ..................................................... 37 附录3: ..................................................................... .....................................................40 附录4: ..................................................................... .. (41)4基于matlab的信道编码仿真1引言1.1选题的目的和意义数字信号在传输中往往由于各种原因,使得在传送的数据流中产生误码,从而使接收端产生图象跳跃、不连续、出现马赛克等现象。
信道编码实验报告
一、作业内容实现对给定模拟信号 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编解码以及差分双相码的变换与反变换过程更加熟悉,真正理解了他们各自编解码的原理。
基于MATLAB的信道编码仿真 毕设汇总
In this paper, the linear block codes and convolutional codes are compiled and analyzed, and the simulation is carried out with MATLAB. Linear block code to (7,4) Hamming code as an example, using MATLAB to the over a binary symmetric channel (BSC), additive white Gaussian noise (AWGN) simulation, the bit error rate curve to analyze performance of Hamming code. The convolutional code is verified by MATLAB for simulation and error correction, and the error rate is analyzed under different SNR and different decision modes.Simulation results show that the Hamming code with increase of the signal to noise ratio, bit error rate is getting smaller and smaller, and for convolutional codes, signal-to-noise ratios were slightly higher will greatly reduce the bit error rate (BER) and using a soft decision decoding error rate is lower, a better effect. Keywords: channel coding MATLAB bit error rate
实验七_信道编码仿真实现
实验七信道编码仿真实现一、实验目的理解信道编码的思想,掌握信道编码的编程实现原理及技术。
二、实验原理信道编码的基本思想信道编码的对象:是信源编码器输出的信息序列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)。
通信系统信道编码研究及仿真
通信系统信道编码研究及仿真院系:信息科学与工程学院专业班:电子信息工程1102班姓名:朱家新学号: 20111186053指导教师:王颖黄瑞光2015年5月通信系统信道编码研究及仿真The Communications System Channel Coding and SimulationResearch摘要通信技术的飞速发展,信道编码已经成功地应用于各种通信系统中。
各种传输方式对可靠性要求的不断提高,信道编码技术作为抗干扰技术的一种重要的手段,在数字通信技术领域和数字传输系统中显示出越来越重要的作用。
通信系统仿真贯穿着通信系统工程设计的全过程,对通信系统的发展起着举足轻重的作用。
通信系统仿真具有广泛的适应性和极好的灵活性,有助于我们更好地研究通信系统性能。
本文是通过学习通信系统传输原理,建立起通信系统仿真模型,利用不同的码型对信道进行仿真分析。
学会使用仿真工具Matlab,先利用汉明码对信道的仿真,通过误码率的曲线图来了解其编码效率及特性。
再利用循环码对信道进行仿真,最后利用Matlab的Simulink模块仿真,其中是运用Simulink的卷积码Viterbi译码器来对高斯白噪声信道的仿真。
通过对这些码的仿真过程分析,从纠错能力,译码性能等方面分析研究各自的优缺点。
关键字:Matlab信道编码译码 SimulinkAbstractWith the ripid development of communication technology,channel coding has been successfully applied to various communications systems.And a variety of transmission of the continuous improvement of reliability requirements,anti-jamming channel coding technology as an important means of technolgy in the field of digital communcations technology and digital transmissions systems in a more and more important munication system simulation runs through the whole process of communication systems engineering design, plays an important role on the development of communication system. Communication system simulation has extensive adaptability and excellent flexibility, helps us to better study the communication system performance.By learning communication system transmission principle, this paper established a communication system simulation model and carried out on the channel using different code simulation analysis. Learn how to use the simulation tool Matlab,I use hamming code for channel simulation and understand its coding efficiency and features by the bit error rate ing cyclic code for channel simulation, and finally in the Matlab Simulink module, which is to use the convolution code Viterbi decoder in the Simulink to gaussian white noise channel simulation. By analyzing the simulation process of the code,I study the respective merits and demerits from the error correction ability and decoding performance analysis.Key word: M atlab channel coding decoding Simulink目录摘要 (I)Abstract (II)绪论 (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错误!未定义书签。
实验二:信道编码-线性分组编译码及检错效果仿真实验指导书实验报告
线性分组码编译码及检错效果仿真实验报告一、实验目的1、通过实验掌握线性分组码中的汉明码的编码原理2、通过实验掌握汉明码的译码3、了解编码与检错能力之间的关系二、实验内容1、随即生成50组4位信息序列作为输入;2、参照书上p223.4-65给定关系构建(7,4)汉明码,计算所设计出的汉明码的所有码字集合;3、发送端采用生成矩阵对信息码列进行编码得到编码码字,该编码序列在信道上传时被随机加入噪声,用校验矩阵对收到信息进行检错。
4,比较加入的误码数和检测出的误码数,检验检错效果。
三、实验步骤与结果1、输入(可由计算机随机产生)N(N>50)组4位随机信息,可循环输入;x=round(rand(1000,3));2、每个循环内,输入的4位信息与生成矩阵相乘,得到其编码码字;G=[1 0 0 1 1 1 0;0 1 0 0 1 1 1;0 0 1 1 1 0 1];H=[1 0 1 1 0 0 0;1 1 1 0 1 0 0;1 1 0 0 0 1 0;0 1 1 0 0 0 1];y=rem(x*G,2);3、用随机函数矩阵对编码码字添加信道噪声引起的误码(0误码为1,或1误码为0),得到接收端带噪声的码字,同时统计增加了误码的码字数A;Y=rem(y+(rand(1000,7)>0.98),2);jc=Y-y;A=0;for i=1:1000for j=1:7;if((jc(i,j))~=0)A=A+1;break;endendend4、对接收端带有噪声的所有编码码字进行汉明译码,统计检查出来的错误码字数B。
c=rem(Y*H',2);w=sum(c,2);B=0;for i=1:1000if(w(i)~=0)B=B+1;endend5、计算检错率B/A。
B/A=100%6、进行纠错并统计纠错后正确的个数l for m=1:1000for u=1:7if c(m,:)==H(:,u)'Y(m,u)=~Y(m,u);endendendYl=0;for o=1:1000if Y(o,:)==y(o,:)l=l+1endend五、实验遇到的问题及解决方法之前的代码均为仿制老师的代码而成,没遇到什么太大的难题,不过在运行结果上一开始并不尽如人意,之后改变了误码率,感觉检错与纠错的情况均有明显的变化。
基于matlab的信道编码仿真(可编辑)
基于matlab的信道编码仿真(可编辑)基于matlab的信道编码仿真海南大学毕业论文(设计)题目:基于matlab的信道编码仿真学号:姓名:年级:学院:信息科学技术学院系别:电子信息工程专业:电子信息工程指导教师: 完成日期:摘要通信技术的飞速发展,信道编码已经成功地应用于各种通信系统中。
以及各种传输方式对可靠性要求的不断提高,信道编码技术作为抗干扰技术的一种重要的手段,在数字通信技术领域和数字传输系统中显示出越来越重要的作用。
信道编码的目的是为了改善通信系统的传输质量。
由于实际信道存在噪声和干扰,使发送的码字与信道传输后所接收的码字之间存在差异,称这种差异为差错。
一般情况下,信道噪声、干扰越大,码字产生差错的概率也就越大。
本文利用matlab对二进制对称信道BSC,高斯白噪声信道AWGN两种信道的仿真,(7,4)Hamming码对信道的仿真,通过误码率的曲线图来了解信道的编码。
并利用matlab的simulink模块仿真,运用simulink里的卷积码viterbi译码器来对二进制对称信道和高斯白噪声信道的仿真,观察误码率的曲线图来了解2个信道的不同。
关键字:matlab,信道,编码,译码,Simulink。
AbstractWith the rapid development of communication technology, channelcoding has been successfully applied to various communications systems. And a variety of transmission of the continuous improvement ofreliability requirements, anti-jamming channel coding technology as an important means of technology in the field of digital communications technology and digital transmission systems in a more and more important role The purpose of channel coding is to improve the transmissionquality of communications systems. As the actual existence of thechannel noise and interference, the transmitted codewords and channel transmission received after the difference between code words, said this difference is wrong. Under normal circumstances, channel noise, the greater the interference, the code word generated the greater the probability of errorIn this paper, matlab binary symmetric channel BSC, Gaussian white noise channel AWGN two channel simulation, 7,4 Hamming code simulation of the channel, through the bit error rate curve to understand the channel coding. Using matlab to simulink block simulation, using simulink in the viterbi decoder to convolutional codes on the binary symmetric channel and Gaussian white noise channel simulation, observation error rategraphs to understand the two different channelsKeywords: matlab, channel, coding, decoding, Simulink.目录1引言 11.1选题的目的和意义 11.2本选题的理论依据、研究内容 12.信道编码以及其运行环境MATLAB的介绍 2 2.1 信道编码的概念及分类 22.2 信道编码定理及信道编码中所包含的各种码类的简介 22.2.1卷积码 22.2.2线性分组码 32.2.3循环码 32.3 MATLAB语言的简介 42.4 Simulink 53.信道 53.1二进制对称信道(BSC) 53.2二进制删除信道(BEC) 63.3高斯白噪声信道AWGN 64. Hamming码 74.1汉明码 74.2校验方法 74.3汉明码编码 94.3.1汉明码对高斯白噪声信道 94.3.2汉明码对二进制对称信道的仿真 115.卷积码 155.1卷积码定义与原理 155.2维特比译码原理 155.3卷积码译码器对高斯白噪声信道的设计与仿真 18 5.3.1卷积码译码器的设计与仿真 195.3.2简化维特比译码器的仿真 225.3.3卷积码译码器的误码率分析 245.4卷积编码器在二进制对称信道(BSC)中的性能 256.卷积码译码器对二进制对称信道和高斯白噪声信道仿真比较 307.总结 31致谢 32参考文献 33附录1: 34附录2: 37附录3: 40附录4: 411引言1.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个发生二位错误的随机错误。
信道编码第二次试验实验报告
信道编码第二次试验实验报告一、实验目的1、实现F2(x)多项式的加法、乘法以及除法运算;求多项式的周期;2、编写同余类域的生成、加法计算、乘法运算、除法运算、幂运算、元素求阶以及求解极小多项式的程序;二、实验原理1、多项式运算:加、乘多项式相加:同次项系数按照二元域中的加法相加;多项式相乘:按普通多项式的乘法相乘,计算系数按二元域上的加法和乘法运算。
2、多项式的除法:给定任意两个多项式f(x)、g(x),一定存在唯一的多项式q(x)和r(x),使:f(x)=q(x)g(x)+r(x) ə(r(x))≤ə(g(x))r(x)称为f(x)模g(x)的余式3、多项式的周期:定义:设f(x)为二元域上次数不为0的多项式,且f(0)≠0,则f(x)|(xn+1)的最小正整数n称为多项式f(x)的周期,(n>=ə(f(x)))实现方法:方法一:长除法求多项式周期用多项式f(x)按升幂排列去除1,当所得余式是单项xn时,f(x)的周期即为n。
方法二:利用欧拉-费尔马定理4、GF(2)的扩域GF(2^n)扩域GF(2^n):设p(x)为GF(2)上的n次既约多项式,模p(x)的所有2^n个余式在模p(x)加法和乘法下构成2^n元域,称为GF(2)的扩域(也称为模p(x)的剩余类域),记为GF(2^n)。
5、幂运算:元素累乘6、元素求阶:具有性质a^n=e的最小正整数n称为a的阶7、求解元素的极小多项式:最小多项式:以扩域GF(2m)上的非零元素β为根的最低次多项式称为β的最小多项式,记为M (x)求解方法:待定系数法三、实验结果我在我的函数中规定:代表多项式的向量,从左到右为多项式高次到低次1、多项式的加、乘运算:在进行多项式的加法、乘法运算的编程时,思路来自于老蒋蒋凌云。
加法:二元域上的多项式加法遵从模2加的运算规则。
在编程时,输入的两个向量必须维度一致,MATLAB才能对其进行处理和运算。
因此,先将输入的两个多项式向量维度设定一致,再运用mod函数求出最终结果。
无线通信信道编码matlab仿真
现给出循环码及卷积码的编解码程序,理解各程序,完成以下习题。
将程序运行结果及各题目的解答写入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、对抽样信号进⾏均匀量化,改变量化级数和信号⼤⼩,根据MATLAB仿真获得量化误差和量化信噪⽐。
2、对抽样信号进⾏A律压缩、均匀量化,改变量化级数和信号⼤⼩,根据MATLAB仿真获得量化误差和量化信噪⽐。
3、限失真信源编码:采⽤A律13折线编码⼆、程序和仿真图1.close all;fs=1000;t=0:1/fs:1;x=0.99*sin(2*pi*t);plot(t,x);hold on;M=8;delta=2/M;y_level=floor(abs(x/delta)); signal=sign(x);for k=1:1000;for i=0:7;ifx(1,k)>=-1+i*delta&x(1,k)<=-1+(i+1)*delta; Q=signal.*(y_level*delta+delta/2);end;end;end;plot(t,Q,'r');grid on;title('原信号与均匀量化信号');close all;fs=32;t=0:1/fs:1;x=sin(2*pi*t);subplot(2,1,1);plot(t,x);hold on;stem(t,x,'filled','r');title('采样样值和8级均匀量化后的样值');grid on; M=8; deta=2/M;y_level=fix(abs(x/deta));signal=sign(x);Q=signal.*(y_level*deta+deta/2);Q_error=x-Q;S=mean(x.^2);N=mean(Q_error.^2);stem(t,Q,'filled','b');legend('输⼊信号','采样量值','量化后量值'); subplot(2,1,2); stem(t,Q_error,'filled','r');title('量化误差图');grid on;3.clear all;fs=2000;t=0:1/fs:1;x=sin(2*pi*t);c=[0 0 0 0 0 0 0 0];for k=2:1:8;[a,b,c(k)]=PCM(x,k);end;n=2:1:8;plot(n,c(2:8),'b');title('均匀量化信噪⽐编码位数变化'); xlabel('编码位数'); ylabel('量化信噪⽐');grid on;hold on;SNR_T=n*6.02+1.76;n=2:1:8;plot(n,SNR_T,'r-o');legend('仿真值','理论值');4.clear all;fs=2000;t=0:1/fs:1;x=sin(2*pi*t);M=0:5:50;c=[0 0 0 0 0 0 0 0 0 0];for k=1:1:11;y=x/(10^(M(k)/20));[a,b,c(k)]=PCM(y,8);end;plot(M,c);c=[0 0 0 0 0 0 0 0 0 0];for k=1:1:11;y=x/(10^(M(k)/20));[a,b,c(k)]=PCM(y,12);end;hold on;plot(M,c,'-ro');title('量化信噪⽐随信号衰减的变化情况');xlabel('信号衰减(dB)');ylabel('量化信噪⽐(dB)');grid on;legend('均匀量化(8 bits)','均匀量化(12 bits)');5.clear all;A=87.6;tc=1/32000;t=0:tc:1;%%x=0.99*sin(2*pi*t);V=max(x);figure(1);subplot(3,1,1);plot(t,x);title('压缩前信号');hold on;grid on;%%x1=compand(x,A,V,'A/compressor');plot(t,x1,'r');title('A律压缩后信号');legend('压缩前信号','A律压缩后信号'); %%f=1/32;t1=0:f:1;y1=downsample(x1,f/tc);subplot(3,1,2);stem(t1,y1,'b');title('A律压缩信号样值');hold on;grid on;%%[index,y2]=quantiz(y1,-6/8:2/8:6/8,-7/8:2/8:7/8); stem(t1,y2,'r','filled'); title('A律压缩信号样值和8级均匀量化的样值'); xlabel('t(s)');ylabel('幅值');legend('A律压缩信号样值','8级均匀量化样值'); %%%%%%%%% subplot(3,1,3);stem(t1,y2-y1,'r','filled');xlabel('t(s)');title('量化误差');grid on;6.close all;A=1;L1=[8,12];tc=1/200000;t=0:tc:1;x0=sin(2*pi*t);r=0:5:50;sqnr=zeros(1,length(r));for j=1:2L=L1(j);for i=1:length(r)A1=1/(10^(r(i)/20));x=A1*x0;f=1/2000;t1=0:f:1;y1=downsample(x,f/tc);M=2^L;[index,y2]=quantiz(y1,-(M-1)/M:2/M:(M-1)/M, -1:2/M:1); sqnr(i) =10*log10(mean(y1.^2)./mean((y1-y2).^2)); endif j == 1plot(r,sqnr,'r o --');hold on;elseplot(r,sqnr,'r o -');title('量化信噪⽐随信号衰减变化的曲线');hold on;endend%%%%%%%%snr1 = 6.02*8+1.76;snr2 = 6.02*12+1.76;for i = 1:11s1(i)=snr1-5*(i-1);endfor i = 1:11s2(i)=snr2-5*(i-1);endplot (r,s1,'k :');grid on;hold on;plot (r,s2,'k--');grid on;%%%%%%%%%%%%L=L1(1);A1=87.6;for i=1:length(r)x=x0/(10^(r(i)/20));xmax=max(abs(x));x1=zeros(1,200001);for j=1:200001if abs(x(j))<=1/A1x1(j)=A1*x(j)/(1+log(A1));elsex1(j)=sign(x(j))*(1+log(A1*abs(x(j))))/(1+log(A1));endendf=1/2000;t1=0:f:1;y1=downsample(x1,f/tc);yy=downsample(x,f/tc);M=2^L;[index,y2]=quantiz(y1,-(M-1)/M:2/M:(M-1)/M, -1:2/M:1);x2=zeros(1,2001);for k=1:2001if abs(y2(k))<=1/(1+log(A1))x2(k)=y2(k)*(1+log(A1))/A1;elsex2(k)=sign(y2(k))/A1*exp(abs(y2(k))*(1+log(A1))-1);endendsqnr(i)=10*log10(mean(yy.^2)./mean((yy-x2).^2));endplot(r,sqnr,'b*-');grid on;title('量化信噪⽐随信号衰减变化的曲线');xlabel('信号的衰减dB');ylabel('量化信噪⽐');axis([0,50,0,80]);legend('均匀量化(8bits)','均匀量化(12bits)','均匀量化理论值(8bits)','均匀量化理论值(8bits)','A 律压缩量化(8bits)' );。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信道编码仿真实践
XX
温州大学物理与电子信息工程学院
摘要:本文通过阐述通信系统的基础理论,着重分析信道理论及信道编码方式,采用蒙特卡罗计算机仿真方法,
利用MATLAB 提供的可视化工具Simulink 建立了信道编码的仿真模型,详细讲述了各编码方式的设计。
在给定仿
真条件下,运行了仿真程序,对几种基本信道编码进行了仿真性能测试和讨论,并从实际角度出发,对扩频通信中
的信道编码进行了初步仿真,得出了信道编码就是在发送端的信息码元序列中,以某种确定的编码规则,加入监督
码元,在接受端再利用该规则进行检查识别,从而发现错误、纠正错误。
关键词:通信系统;信道;信噪比;误码率;信道编码
The Simulation Practice of the Channel Coding
XX
College of physics and electronic information engineering of Wenzhou University
Abstract: This article through the elaboration communications system basic theory, analyzes the channel theory and the channel coding way emphatically, uses the Monte Carlo computer simulation method, provided visualization tool Simulink using MATLAB to establish the channel coding simulation model, in detail narrated each encoding method design.In assigns under the simulation condition, moved the simulated program, has carried on the simulation performance test and the discussion to in the binary bipolarity communications system several kind of basic channel coding, and embarks from the actual angle, has carried on the preliminary simulation to in the wide frequency correspondence channel coding, obtained has used the cascade code in the binary bipolarity wide frequency communications system, could realize the channel multiplying and the error code performance win-win conclusion.
Key words: Communications system; Channel; Signal-to-noise ratio; Error rate; Channel coding
1 背景知识
数字信号在传输中往往由于各种原因,使得在传送的数据流中产生误码,从而使接收端产生图象跳跃、不连续、出现马赛克等现象。
所以通过信道编码这一环节,对数码流进行相应的处理,使系统具有一定的纠错能力和抗干扰能力,可极大地避免码流传送中误码的发生。
信道编码的本质是增加通信的可靠性。
但信道编码会使有用的信息数据传输减少,信道编码的过程是在源数据码流中加插一些码元,从而达到在接收端进行判错和纠错的目的。
在带宽固定的信道中,总的传送码率也是固定的,由于信道编码增加了数据量,其结果只能是以降低传送有用信息码率为代价了。
利用信道编译码,可以显著改善信息在传输过程中的错误概率指标,有效增强系统抗干扰能力,提高数字通信系统的可靠性。
信道编码一般分为两类:分组编码和卷积编码。
2、基本原理
2.1 分组编码
在分组编码中,二进制信源输入序列被划分为长度k的码字组。
每个长度k的码字被映射为
长度n 的码字,映射关系是相互独立的,编码器的输出仅仅与当前k 个信源输入比特有关,而与以前的序列无关。
从而由长度n 的码字组构成分组编码后的二进制信道输入序列,编码速率为k/n 比特/次,记为(n,k )分组码。
在卷积编码中,也是把k 个信息比特编成长度为n 的信道输入,但该信道输入不但与当前k 个信源输入比特有关,而且还与编码器前(L-1)k 个输入有关。
本次仿真选用以下几种基本信道编码:(7,4)汉明码、(2,1,3)卷积码、级联码 ( 外编码采用(7,4)汉明码,交织编码采用(7,4)卷积交织编码,内编码采用(2,1,3)卷积码 ) ,分别进行性能测试,另外,还特别对级联码中的两种交织方式:卷积交织和循环等差交织进行仿真性能测试比较。
2.2 卷积编码
卷积码是一种有记忆的编码,在任意给定的时间单元处,编码器的n 个输出不仅与此时间单元的k 个输入有关,而且也与前m 个输入有关。
卷积码通常表示为:(n,k,m )。
本次仿真采用(2,1,3)卷积码,性能参数如下:
生成矩阵G : 1 0 1 1 1 1 1 1
编码个数: n=2 信息码个数: k=1 约束长度: N=m+1=4 卷积码的码率:n k R c / =1/2
MATLAB 源程序见附录中程序2。
仿真结果如图12了不同信噪比条件下,发送100000比特的二进制双极性(2,1,3)卷积编码通信系统的蒙特卡罗仿真结果,以及未编码系统的仿真结果和未编码系统的理论值曲线。
从仿真结果可见,(2,1,3)卷积编码可以降低二进制双极性通信系统的误码率,从而提高通信的有效性。
需要特别指出的是,仿真时每发送一个码组前后都会将卷积器清零,对此我们可以认为是系统在发送端为同步校准而插入比特0的操作,在接收端这些插入的0比特又会被系统自动去掉。
为方便比较,图11(2,1,3)卷积编码系统仿真结果、(7,4)汉明编码系统仿真结果、未编码系统仿真结果和未编码系统的理论值曲线绘制在一起。
图13相同信噪比条件下,按照仿真结果误码率从高到低顺序依次为:未编码系统、(7,4)汉明编码系统、(2,1,3)卷积编码系统,从而可以得出(2,1,3)卷积编码纠错能力优于(7,4)汉明编码的结论,与理论结论相符。
3、系统仿真模型的搭建与参数设置
Bernoulli Binary Generator 参数设置
Binary Synnetric Channel 参数设置
4、仿真结果分析
1、
注意:由于噪声是随机给定的,所以图有一定的误差。
但如果经过蒙特卡洛方法运算,运算10^6次后,结果应是:1、在未编码下,BPSK误比特率小于QPSK;
2、编码后,BPSK误比特率小于QPSK;
2、
由图可知:1.QPSK在AWGN下的性能:QPSK_hamm的误码率小于QPSK_UC
2. 8PSK在AWGN下的性能:8PSK_hamm的误码率大于8PSK_UC(有误)
3. 在AWGN下的性能,QPSK_hamm的误码率小于8PSK_hamm的误码率
4. 在AWGN下的性能,QPSK_UC的误码率小于8PSK_UC的误码率
3、
小结:红色线为CRC-8检错性能,黑色线为CRC-16检错性能。
由图可知,CRC-16的检测性能更好一些
5、结论
(7,4)汉明编码可以降低二进制双极性通信系统的误码率,从而提高通信的有效性。
未编码系统、(7,4)汉明编码系统、(2,1,3)卷积编码系统,从而可以得出(2,1,3)卷积编码纠错能力优于(7,4)汉明编码的结论,与理论结论相符。
本文阐述了对二进制双极性通信系统进行蒙特卡罗计算机仿真的具体方法,给出了二进制双极性通信系统的蒙特卡罗仿真模型以及仿真流程图。
从仿真为实际应用服务的角度出发,仿真测试了级联码 ( 外编码采用(7,4)汉明码,内编码采用(2,1,3)卷积码 ) 对双用户二进制双极性扩频通信系统误码性能改善情况,得出了在二进制双极性扩频通信系统中采用级联码,能够实现信道复用和误码性能双赢的结论。