信道编码实验报告
信道编码实验报告

信道编码实验报告引言:信道编码是一种常用的通信技术,用于增强数据传输的可靠性和效率。
通过在发送端对数据进行编码,并在接收端进行解码,可以有效地纠正或检测在信道传输过程中产生的错误。
本实验旨在研究不同的信道编码方法,并分析它们在不同信道条件下的性能。
一、实验目的:1.了解信道编码的概念和基本原理;2.掌握常用的信道编码方法和相关算法;3.通过实验验证不同信道编码方法的性能;4.分析信道编码在不同信道条件下的适用性。
二、实验原理:1.信道编码概述:信道编码主要分为前向纠错编码(Forward Error Correction, FEC)和自动重传请求(Automatic Repeat reQuest, ARQ)两类。
其中,FEC方法通过在数据流中引入冗余信息,使接收端能够检测和纠正一定数量的错误。
而ARQ方法则是通过接收端向发送端发送请求进行重传,从而实现数据的可靠传输。
2.常用的信道编码方法:在实验中,我们主要研究了以下几种常用的信道编码方法:(1)奇偶校验编码:奇偶校验编码是最简单的一种编码方式,它通过在数据末尾添加一个校验位来实现错误检测。
若校验位与数据位中的奇偶性不一致,则认为出现错误。
(2)海明码编码:海明码是一种通过添加冗余位来实现错误检测和纠正的编码方法。
通过在数据位中插入冗余位,接收端可以检测到并纠正一定数量的错误。
(3)卷积码编码:卷积码是一种递归线性均匀的编码方法,通过引入冗余信息来增强信号的可靠性。
它具有较好的纠错性能,广泛应用于无线通信领域。
三、实验过程:1.实验环境准备:在实验中,我们使用了Matlab软件进行信道编码的仿真实验。
通过编写相应的算法和程序,可以模拟不同的信道编码方法,并分析它们的性能。
2.编写奇偶校验编码程序:首先,我们编写了奇偶校验编码的程序,通过向数据流中添加校验位实现错误检测。
然后,对不同的信道条件进行仿真实验,并记录不同错误率下的传输性能。
3.编写海明码编码程序:接下来,我们编写了海明码编码的程序,通过插入冗余位实现错误检测和纠正。
信源编码的实验报告

一、实验目的1. 理解信源编码的基本原理和过程。
2. 掌握几种常见的信源编码方法,如哈夫曼编码、算术编码等。
3. 分析不同信源编码方法的编码效率。
4. 培养动手实践能力和分析问题、解决问题的能力。
二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.73. 实验工具:PyCharm IDE三、实验内容1. 哈夫曼编码2. 算术编码四、实验步骤1. 实验一:哈夫曼编码(1)读取信源数据,统计每个字符出现的频率。
(2)根据字符频率构建哈夫曼树,生成哈夫曼编码表。
(3)根据哈夫曼编码表对信源数据进行编码。
(4)计算编码后的数据长度,并与原始数据长度进行比较,分析编码效率。
2. 实验二:算术编码(1)读取信源数据,统计每个字符出现的频率。
(2)根据字符频率构建概率分布表。
(3)根据概率分布表对信源数据进行算术编码。
(4)计算编码后的数据长度,并与原始数据长度进行比较,分析编码效率。
五、实验结果与分析1. 实验一:哈夫曼编码(1)信源数据:{a, b, c, d, e},频率分别为{4, 2, 2, 1, 1}。
(2)哈夫曼编码表:a: 0b: 10c: 110d: 1110e: 1111(3)编码后的数据长度:4a + 2b + 2c + 1d + 1e = 4 + 2 + 2 + 1 + 1 = 10(4)编码效率:编码后的数据长度为10,原始数据长度为8,编码效率为10/8 = 1.25。
2. 实验二:算术编码(1)信源数据:{a, b, c, d, e},频率分别为{4, 2, 2, 1, 1}。
(2)概率分布表:a: 0.4b: 0.2c: 0.2d: 0.1e: 0.1(3)编码后的数据长度:2a + 2b + 2c + 1d + 1e = 2 + 2 + 2 + 1 + 1 = 8(4)编码效率:编码后的数据长度为8,原始数据长度为8,编码效率为8/8 = 1。
六、实验总结1. 哈夫曼编码和算术编码是两种常见的信源编码方法,具有较好的编码效率。
信息论与编码实验2-实验报告

信息论与编码实验2-实验报告信息论与编码实验 2 实验报告一、实验目的本次信息论与编码实验 2 的主要目的是深入理解和应用信息论与编码的相关知识,通过实际操作和数据分析,进一步掌握信源编码和信道编码的原理及方法,提高对信息传输效率和可靠性的认识。
二、实验原理(一)信源编码信源编码的目的是减少信源输出符号序列中的冗余度,提高符号的平均信息量。
常见的信源编码方法有香农编码、哈夫曼编码等。
香农编码的基本思想是根据符号出现的概率来分配码字长度,概率越大,码字越短。
哈夫曼编码则通过构建一棵最优二叉树,为出现概率较高的符号分配较短的编码,从而实现平均码长的最小化。
(二)信道编码信道编码用于增加信息传输的可靠性,通过在发送的信息中添加冗余信息,使得在接收端能够检测和纠正传输过程中产生的错误。
常见的信道编码有线性分组码,如汉明码等。
三、实验内容与步骤(一)信源编码实验1、选取一组具有不同概率分布的信源符号,例如:A(02)、B (03)、C(01)、D(04)。
2、分别使用香农编码和哈夫曼编码对信源符号进行编码。
3、计算两种编码方法的平均码长,并与信源熵进行比较。
(二)信道编码实验1、选择一种线性分组码,如(7,4)汉明码。
2、生成一组随机的信息位。
3、对信息位进行编码,得到编码后的码字。
4、在码字中引入随机错误。
5、进行错误检测和纠正,并计算错误纠正的成功率。
四、实验结果与分析(一)信源编码结果1、香农编码的码字为:A(010)、B(001)、C(100)、D (000)。
平均码长为 22 比特,信源熵约为 184 比特,平均码长略大于信源熵。
2、哈夫曼编码的码字为:A(10)、B(01)、C(111)、D (00)。
平均码长为 19 比特,更接近信源熵,编码效率更高。
(二)信道编码结果在引入一定数量的错误后,(7,4)汉明码能够成功检测并纠正大部分错误,错误纠正成功率较高,表明其在提高信息传输可靠性方面具有较好的性能。
信息论与编码实习报告

信息论与编码实习报告一、引言信息论与编码是通信工程、计算机科学和电子工程等领域的重要基础课程。
本次实习旨在通过实际操作,深入理解和掌握信息论与编码的基本原理和技术,提高我们的实际操作能力和问题解决能力。
二、实习内容1、信息论基础:实习的第一部分,我们通过自学和讨论的方式,深入学习了信息论的基本概念和原理,包括信息的度量、熵、信道容量等。
2、编码理论:在这一阶段,我们重点学习了线性编码、循环编码、哈夫曼编码等编码方法,并了解了编码的效率及其可靠性。
3、模拟与数字通信系统:我们通过模拟软件,设计和实现了简单的模拟通信系统,同时,也通过实验箱,了解了数字通信系统的基本原理和技术。
4、无线通信和网络:在这一部分,我们重点学习了无线通信和网络的基础知识,包括无线信道模型、无线调制解调技术、无线网络协议等。
5、实习项目:最后,我们根据所学的知识,完成了一个实习项目——设计并实现一个具有高可靠性和高效率的通信系统。
三、实习收获通过这次实习,我们收获颇丰。
首先,我们对信息论与编码的基本概念和原理有了更深入的理解和掌握,能够更好地将理论知识应用到实际中。
其次,我们提高了自己的实际操作能力和问题解决能力,能够在实践中发现和解决问题。
最后,我们了解了通信系统的基本原理和技术,对未来的学习和工作有了更好的准备。
四、结论本次实习是我们学习信息论与编码的重要环节,我们通过实际操作,深入理解和掌握了信息论与编码的基本原理和技术,提高了自己的实际操作能力和问题解决能力。
我们也发现了自己的不足之处,将在未来的学习和工作中更加努力,不断提高自己的能力和水平。
信息论与编码曹雪虹课后习题答案随着科技的发展,信息已经成为现代社会中不可或缺的一部分。
在大学中,信息论与编码作为一门重要的学科,已经成为了计算机科学、通信工程、电子工程等专业的必修课程。
而在这门课程中,曹雪虹教授的教材《信息论与编码》被广泛使用。
本文将介绍一些该教材的课后习题答案,以帮助读者更好地掌握信息论与编码的相关知识。
数字通信_信道编码

信道编码实验人:学号: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 调制上一步得到的是二进制的信息比特流,需要采用一定的调制方案,将二进制的信息比特映射成适合信道传输的符号。
信道编码实验

实验报告册课程:通讯系统原理教程实验: 信道编码实验评语:成绩:签名:日期:实验五:信道编码实验一、实验目的: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 编程都能达到实验要求的结果,证明实验过程的正确性,说明达到实验的预期目的。
信道编码实验报告

一、作业内容实现对给定模拟信号 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编解码以及差分双相码的变换与反变换过程更加熟悉,真正理解了他们各自编解码的原理。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
无线通信基础课程设计报告
(信道编码)
小组成员:
指导老师:
完成时间:
无线通信系统课程设计报告
实验摘要:数字信号在传输中往往由于各种原因,使得在传送的数据流中产生误码,从
而使接收端产生图象跳跃、不连续等现象。
信道编码通过对数码流进行相应的处理,使系统具有一定的检错和纠错能力,可极大地避免码流传送中误码的发生。
提高数据传输可靠性,降低误码率是信道编码的任务。
实验名称:信道编码
实验目标:本实验的目标是领会信道编码的基本思想。
并通过比较有无信道编码模块的
不同系统误码率性能,感受信道编码技术对于提高系统性能的重要意义。
实验原理:打开“Channel_Coding_74.vi”前面板如图1所示,打开程序框图并理解参与
信道编码的整个数据流。
程序包含上下两个独立的部分如图2所示,下面部分是生成误码率曲线如图1(b),其结构和上面部分类似,你只需要关注上面部分程序即可;上面部分代码大致可由做7个模块组成,每一模块完成一项功能。
你负责的是这个实验的“编码和解码”功能。
这些模块为:
1、读取图片
LabVIEW提供了一个能够读取JPEG格式的图像并输出图像数据的模块。
提供的还原像素图.vi完成图像数据到一维二进制数据的转换(图像数据→十进制二维数组→二进制一维数组),输出信源比特流。
(a)实验操作部分(b)误码率曲线
图1 前面板
2、信道编码
我们的下一个目标是对信源比特流进行信道编码。
信道编码方案很多,线性分组码、卷积码、LDPC码等等;这里我们采用简单的(7,4)线性分组码。
图2 程序框图
线性分组码是一类重要的纠错码。
在(n ,k )线性分组码中,常用到能纠正一位错误的汉明码。
其主要参数如下:
码长:
21m
n =-; 信息位:21m
k m =--; 校验位:m n k =-; 最小距离: d = 3; 纠错能力: t = 1;
本次实验需要用到的是(7,4)分组码,属系统码,前四位为信息位,后三位为冗余位。
3、BPSK 调制
上一步得到的是二进制的信息比特流,需要采用一定的调制方案,将二进制的信息比特
映射成适合信道传输的符号。
这里我们采用最简单的BPSK 调制:将信息0映射为幅值为1的信号,信息1映射为幅值为-1的信号,如图3所示。
(1,0)=0
图3 BPSK 映射图
4、加高斯白噪声
根据给定的信噪比(dB),信号功率和编码速率,计算高斯白噪声的功率,生成和信号数组相同长度的高斯白噪声数组,叠加到信号上,模拟信号经过加性高斯白噪声信道的情况。
在本模块中你需要设定信噪比。
5、BPSK 解调
接收端一侧首先要进行BPSK 解调(注意,接收机要想进行BPSK 的解调,还必须找到发送端BPSK 调制时的映射方式)。
6、信道解码
上一步完成后得到二进制数组,本模块根据74码的生成矩阵得到其校验矩阵,并完成74码的解码,得到恢复的信息流。
7、重建图片
将上步得到的信息流转换成二维的JPEG 数组,使用“绘制还原像素图.vi ”重建图片。
实验内容:
任务1
实现汉明(7,4)码的编、解码,即完成encode_74.vi 和decode_74.vi 的设计。
1) 编码
令(7,4)分组码的生成矩阵为矩阵G 如下:
根据生成矩阵,输出码字可按下式计算: 所以有: 信息位冗余位
由以上关系可以得到(7,4)汉明码的全部码字如表1所示。
1000110010001100101110001101G ⎡⎤
⎢⎥
⎢
⎥=⎢⎥⎢⎥⎣⎦
3210321010001100100011(,,,)(,,,)00101110001101b a a a a G a a a a ⎡⎤
⎢⎥
⎢
⎥=∙=∙⎢⎥⎢⎥⎣⎦
63
52
41
30
b a b a b a b a ====2310
1321
0210
b a a a b a a a b a a a =⊕⊕=⊕⊕=⊕⊕
表1 (7,4)汉明码的全部码字
2) 译码
(7,4)汉明码的译码将输入的7位汉明码翻译成4位的信息码,并且纠正其中可能出现的一个错误。
由于生成矩阵G 已知且G = [I k Q ] ,可以得到矩阵Q 的值
110011111101T Q P ⎡⎤⎢⎥
⎢
⎥==⎢⎥⎢⎥⎣⎦
又因为T
P Q =则:
101111100111P ⎡⎤
⎢⎥=⎢⎥
⎢⎥⎣⎦
而校验矩阵H 满足 H =[P I r ] ,则:
101110011100100111001H ⎡⎤
⎢⎥=⎢⎥
⎢⎥⎣⎦
由校正子S = BH T =(A + E )H T = EH T 可以看出校正子S 与错误图样E 是一一对
应的。
通过计算校正子得到对应的错误图样,根据式子A =B + E 便可得到纠正了一位可能错误的信息位,完成解码。
任务2
比较采用编码方式和不采用编码方式,系统的误码率性能,观察并分析实验现象并得出
实验步骤及结果分析:
打开文件“Channel_Coding_74.vi”,对文件进行加噪处理,得到下面的图一
图一
对信号进行加噪和编码我们得到图二
图二
由图一,图二我们可以看到经过信道编码后的图形的清晰度比不编码的图形高很多,同时我们观察误码率同样可以看到不进行信道编码时,信号传输的误比特率比较高,而当进行信道编码后信号传输的误码率明显下降。
我们从这个实验可以很清晰地观察到信道编码的作用。
下面我们观察编码和解码的程序了解编码和解码的过程
编码的程序图三:
图三
从图中我们可以看出,信息流经过统计数值大小,在经过数组重排,将信息流排列成矩阵形式,然后与生成矩阵相乘实现信道编码,然后将相乘的结果进行二进制转换变成二进制数,最后输出一组七位的数据流,即编码后的数据。
译码程序图四:
图四
从程序中我们可以看出,经过编码后的数据流在解码程序里面首先经过排列成矩阵,与校验矩阵相乘生成校验子,即实现编码;然后根据求校验子模的大小,根据模的大小判断出校验矩阵的那一列出现错误,即哪一位信息位出现了解码的错误,实现检错;然后将从公式中输出的数据流与编码输出后的数据流进行异或实现纠错。
实验心得:
通过本次试验我有了以下几方面的收获:
首先是内容上,我通过自己编程,摸索LabVIEW的使用方法,经过自己的努力和他人的帮助掌握了这个软件的基本的用法,其次通过用实验模拟编码过程,我亲身体验了信道编码的实
际的效果,知道信道编码可以降低信号传输的误比特率,让信号传输更加真实有效;同时这让我认为离我们比较遥远的课本知识变得真切起来,让我觉得我们所学的知识的实际用途和存在价值。
最后我知道通过信道编码的具体的流程,通过对试验程序的分析我了解了信息流怎么通过信道,同时信息流又是怎样被编码和解码出来最终到达输出。
其次是动手能力的加强,首先在实验室的操作让我从对LabVIEW一无所知到能够对这款软件有个基本的掌握,并且能够用它做出一些小的程序,我觉得这个过程很珍贵很值得珍惜,我从这个试验中得到了提高,不仅仅是知识上的而且是能力上的提高。
信道编码实验的实际操作,巩固了我对课本知识的认知,将原有的虚无缥缈的理论带入实际进行演示,使得我能够更好的理解课程中的元素。
此外,实验也锻炼了我的动手能力和纠错能力,遇见的诸多不顺、问题,在疑惑、改进、解决中,我也得到了升华和探索科学的喜悦。
当然,这与老师无微不至的关心和细致入微的讲解也是分不开的。
感谢这门课,也非常感谢老师的教导。
我相信无论以后做什么实验,只要我用心去研究它去学习他它,最后的结果肯定不会差的。