信道编码实验报告
- 格式:docx
- 大小:1.25 MB
- 文档页数:8
信道编码实验报告引言:信道编码是一种常用的通信技术,用于增强数据传输的可靠性和效率。
通过在发送端对数据进行编码,并在接收端进行解码,可以有效地纠正或检测在信道传输过程中产生的错误。
本实验旨在研究不同的信道编码方法,并分析它们在不同信道条件下的性能。
一、实验目的: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 的主要目的是深入理解和应用信息论与编码的相关知识,通过实际操作和数据分析,进一步掌握信源编码和信道编码的原理及方法,提高对信息传输效率和可靠性的认识。
二、实验原理(一)信源编码信源编码的目的是减少信源输出符号序列中的冗余度,提高符号的平均信息量。
常见的信源编码方法有香农编码、哈夫曼编码等。
香农编码的基本思想是根据符号出现的概率来分配码字长度,概率越大,码字越短。
哈夫曼编码则通过构建一棵最优二叉树,为出现概率较高的符号分配较短的编码,从而实现平均码长的最小化。
(二)信道编码信道编码用于增加信息传输的可靠性,通过在发送的信息中添加冗余信息,使得在接收端能够检测和纠正传输过程中产生的错误。
常见的信道编码有线性分组码,如汉明码等。
三、实验内容与步骤(一)信源编码实验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编解码以及差分双相码的变换与反变换过程更加熟悉,真正理解了他们各自编解码的原理。
信息论与编码实验报告姓名:学号:院系:班级:指导教师:实验2 信道编码----(7,4)循环码一、实验目的1.掌握循环码的编码原理(生成多项式、校验多项式等)2.掌握VB开发环境的使用(尤其是程序调试技巧)3.掌握VB的编程技巧二、实验环境1.计算机2.Windows 2000 或以上3.VB三、实验内容根据信道编码——循环码的编码原理,制作(7,4)循环码的码字生成器软件。
要求软件有简单的用户界面,当输入信息码字时,软件能够输出相应的循环码字。
实验结果要求:1、g(x)= x3+ x2+1;2、当输入m(x)= x3+x2时电路工作过程中各寄存器的状态。
四、实验原理1、实验原理循环码定义:设CH是一个[n.k]线性分组码,C1是其中的一个码字,若C1的左(右)循环移位得到的n 维向量也是CH中的一个码字,则称CH是循环码。
循环码的生成多项式和生成矩阵:全0码字除外)称为生成多项式,用g(x)表示。
可以证明生成多项式g(x)具有以下特性:(1)g(x)是一个常数项为1的r=n-k次多项式;(2)g(x)是的一个因式;(3)该循环码中其它码多项式都是g(x)的倍式。
为了保证构成的生成矩阵G的各行线性不相关,通常用g(x)来构造生成矩阵,这时,生成矩阵G(x)可以表示成为其中,因此,一旦生成多项式g(x)确定以后,该循环码的生成矩阵就可以确定,进而该循环码的所有码字就可以确定。
显然,上式不符合形式,所以此生成矩阵不是典型形式,不过,可以通过简单的代数变换将它变成典型矩阵。
2、实验方法循环码的编码方法在编码时,首先需要根据给定循环码的参数确定生成多项式g(x),也就是从的因子中选一个(n-k)次多项式作为g(x);然后,利用循环码的编码特点,即所有循环码多项式A(x)都可以被g(x)整除,来定义生成多项式g(x)。
根据上述原理可以得到一个较简单的系统循环码编码方法:设要产生(n,k)循环码,m(x)表示信息多项式,则其次数必小于k,而·m(x)的次数必小于n,用·m(x)除以g(x),可得余数r(x),r(x)的次数必小于(n-k),将r(x)加到信息位后作监督位,就得到了系统循环码。
实验七信道编码仿真实现一、实验目的理解信道编码的思想,掌握信道编码的编程实现原理及技术。
二、实验原理信道编码的基本思想信道编码的对象:是信源编码器输出的信息序列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)。
福建农林大学计算机与信息学院信息工程类信息论与编码课程实验报告实验项目列表实验名称1:信源建模一、实验目的和要求(1)进一步熟悉信源建模;(2)掌握MATLAB程序设计和调试过程中数值的进制转换、数值与字符串之间的转换等技术。
二、实验内容(1)假设在一个通信过程中主要传递的对象以数字文本的方式呈现。
(2)我们用统计的方式,发现这八个消息分别是由N1,N2,…,N8个符号组成的。
在这些消息是中出现了以下符号(符号1,符号2,…,符号M)每个符号总共现了(次数1,次数2,…,次数M)我们认为,传递对象的信源模型可表示为:X为随机变量(即每次一个字符);取值空间为:(符号1,符号2,…,符号M);其概率分布列为:(次数1/(N1+…+N8),…,次数M/( N1+…+N8))三、实验环境硬件:计算机软件:MATLAB四、实验原理图像和语声是最常用的两类主要信源。
要充分描述一幅活动的立体彩色图像,须用一个四元的随机矢量场X(x,y,z,t),其中x,y,z为空间坐标;t 为时间坐标;而X是六维矢量,即表示左、右眼的亮度、色度和饱和度。
然而通常的黑白电视信号是对平面图像经过线性扫描而形成。
这样,上述四元随机矢量场可简化为一个随机过程X(t)。
图像信源的最主要客观统计特性是信源的幅度概率分布、自相关函数或功率谱。
关于图像信源的幅度概率分布,虽然人们已经作了大量的统计和分析,但尚未得出比较一致的结论。
至于图像的自相关函数,实验证明它大体上遵从负指数型分布。
其指数的衰减速度完全取决于图像类型与图像的细节结构。
实际上,由于信源的信号处理往往是在频域上进行,这时可以通过傅里叶变换将信源的自相关函数转换为功率谱密度。
功率谱密度也可以直接测试。
语声信号一般也可以用一个随机过程X(t)来表示。
语声信源的统计特性主要有语声的幅度概率分布、自相关函数、语声平均功率谱以及语声共振峰频率分布等。
实验结果表明语声的幅度概率分布可用伽玛(γ)分布或拉普拉斯分布来近似。
信息论与编码实验报告一、实验目的1.了解信息论与编码的基本概念和原理。
2.学习如何通过信息论与编码方法实现对数据的压缩和传输。
3.掌握信息论与编码实验的实验方法和实验技能。
4.提高实验设计、数据分析和报告撰写的能力。
二、实验内容1.通过对输入信源进行编码,实现对数据的压缩。
2. 比较不同编码方法的压缩效果,包括Shannon-Fano编码和霍夫曼编码。
3.通过传输信道对编码后的数据进行解码,还原原始信源。
4.分析并比较不同编码方法的传输效果,包括码率和传输质量。
三、实验原理1.信息论:熵是信息论中衡量信源不确定性的指标,熵越小表示信源的可预测性越高,在编码过程中可以压缩数据。
2. 编码方法:Shannon-Fano编码通过分治的方法将输入信源划分为不同的子集,分别进行编码;霍夫曼编码则通过构建最佳二叉树的方式,将较常出现的信源符号编码为较短的二进制码,较少出现的信源符号编码为较长的二进制码。
3.传输信道:信道可能存在误码和噪声,通过差错控制编码可以在一定程度上保障传输数据的正确性和完整性。
四、实验步骤1. 对给定的输入信源进行Shannon-Fano编码和霍夫曼编码。
2.计算编码后的码率,分析不同编码方法的压缩效果。
3.将编码后的数据传输到信道,模拟信道中的误码和噪声。
4.对传输后的数据进行解码,还原原始信源。
5.比较不同编码方法的传输质量,计算误码率和信噪比。
五、实验结果与分析1. 编码结果:通过对输入信源进行编码,得到了Shannon-Fano编码和霍夫曼编码的码表。
2.压缩效果:计算了不同编码方法的码率,比较了压缩效果。
3.传输结果:模拟信道传输后的数据,对数据进行解码,还原原始信源。
4.传输质量:计算了误码率和信噪比,分析了不同编码方法的传输质量。
六、实验总结通过本次实验,我深刻理解了信息论与编码的基本概念和原理,并掌握了信息论与编码实验的实验方法和实验技能。
在实验过程中,我遇到了一些困难,比如对编码方法的理解和实验数据的处理。
实验七信道编码仿真实现班级: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函数求出最终结果。
信道编码实验实验报告院系: 物理与机电工程系专业:09级电子信息工程学生:王皇学号: 20090662129指导老师: 邱思杰日期: 2012年5月18日评语:成绩:签名:日期:实验五:信道编码实验一、实验目的:1、理解信道编码的原理,2、利用仿真软件编写(7,4)线性分组码的编码和译码过程。
二、实验原理:信道编码:信道编码以提高信息传输的可靠性为目的,是要使从信源发出的信息经过信道传输后,尽可能准确地、不失真地再现在接收端。
信道编码可以有效的降低通信系统的误码率。
它是按照一定的规律给信息增加冗余度,使不带规律的原始数字信息变换为具有一定规律的数字信息,信道译码则利用这些规律性鉴别是否发生了错误,或进而纠正错误。
具体的说,信道编码就是在发送端被传输的信息码元序列中,以一定的编码规则附加一些监督码元,接收端利用这些监督码元进行译码,译码的结果可发现错误或者纠正错误,使系统的错误概率降低。
信道编码模型如下图:线性分组码是信道编码的一种。
监督元仅与本组信息有关的码称为分组码。
若监督码元与信息码元之间的关系可用线性方程来表示,即监督码元是信息码元的线性组合,则称为线性码。
在(7,3)线性分组码中,监督码元与信息码元之间的关系可用如下线性方程组表示:线性分组码具有封闭性:码字集中任意两个码字对应位模2加后得到的组合仍然是该码字集中的一个码字。
因此,线性分组码的最小码距必等于码字集中非全0码字的最小重量。
线性分组码的监督矩阵H 由r 行n 列组成,r=n-k ,且这r 行是线性无关的。
监督矩阵具有形式: ,其中 为 的单位矩阵。
P 是 的矩阵。
线性分组码的典型生成矩阵为: ,其中 是 的单位矩阵。
生成矩阵可以由监督矩阵确定。
信道编码器数字调制器有噪声信道(容量C)数字解调器信道编码器输入二进制信息}{ib 比特速率b R 将 位信息分为一组k编码输出}{i d 比特速率k n R R b c /=长度为 比特的码字n比特信息k 监督位k n -长度为 比特的码字n解调输出}{ˆid 比特速率cR 长度为的信息组k输出}{ˆib 比特速率bR 图9.1.1 有信道编码器和译码器的数字通信系统信道误比特率 ,信息误比特率}{ˆii c d d P ≠=}{ˆii b b b P ≠=C cR <ce P P <且⎪⎪⎩⎪⎪⎨⎧++=+=++=+=4505614562463a a a a a a a a a a a aa 0,),()(min 0≠∈=i k n A A W d i i []r PI H =r I r r ⨯k r ⨯][Tk P I G =k I k k ⨯由生成矩阵生成的码是系统码: 线性分组码的译码 :若发送码字:接收码字: 发送码字和接收码字之差:B-A=E 或B+A=E 错误图样 : 码字与监督矩阵约束关系: 若传输发生错误则 ,此时: 伴随式: ,是1行r 列矩阵,它与错误图样有对应关系,而与发送码字无关。
无线通信基础课程设计报告
(信道编码)
小组成员:
指导老师:
完成时间:
无线通信系统课程设计报告
实验摘要:数字信号在传输中往往由于各种原因,使得在传送的数据流中产生误码,从
而使接收端产生图象跳跃、不连续等现象。
信道编码通过对数码流进行相应的处理,使系统具有一定的检错和纠错能力,可极大地避免码流传送中误码的发生。
提高数据传输可靠性,降低误码率是信道编码的任务。
实验名称:信道编码
实验目标:本实验的目标是领会信道编码的基本思想。
并通过比较有无信道编码模块的
不同系统误码率性能,感受信道编码技术对于提高系统性能的重要意义。
实验原理:打开“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一无所知到能够对这款软件有个基本的掌握,并且能够用它做出一些小的程序,我觉得这个过程很珍贵很值得珍惜,我从这个试验中得到了提高,不仅仅是知识上的而且是能力上的提高。
信道编码实验的实际操作,巩固了我对课本知识的认知,将原有的虚无缥缈的理论带入实际进行演示,使得我能够更好的理解课程中的元素。
此外,实验也锻炼了我的动手能力和纠错能力,遇见的诸多不顺、问题,在疑惑、改进、解决中,我也得到了升华和探索科学的喜悦。
当然,这与老师无微不至的关心和细致入微的讲解也是分不开的。
感谢这门课,也非常感谢老师的教导。
我相信无论以后做什么实验,只要我用心去研究它去学习他它,最后的结果肯定不会差的。