信息论与编码实验指导书

上传人:xia****ian 文档编号:164234083 上传时间:2022-10-24 格式:DOC 页数:23 大小:159.52KB
收藏 版权申诉 举报 下载
信息论与编码实验指导书_第1页
第1页 / 共23页
信息论与编码实验指导书_第2页
第2页 / 共23页
信息论与编码实验指导书_第3页
第3页 / 共23页
资源描述:

《信息论与编码实验指导书》由会员分享,可在线阅读,更多相关《信息论与编码实验指导书(23页珍藏版)》请在装配图网上搜索。

1、信息论与编码实验指导书前 言当前,信息论与编码已经成为电子信息类专业高年级学生必修的专业基础课。尽管各个院校开设课程名称有所不同,但都是以香农信息论为核心内容的。这是一门理论性和系统性很强的课程。涉及多个学科,需要广泛数学知识。为了能透彻掌握信息论基本概念和分析方法,做实验进行实践练习是不可缺少的环节。通过综合性、验证性实验,可以加深对理论和概念的理解,增强分析和解决实际问题的能力。为此,河北工业大学信息学院编写了信息论与编码实验指导书,由于可供参考的实验指导书有限,本书的不妥和错误之处,恳请读者予以批评指正。 马 杰 2008年2月目 录 实验一 信息熵与图像熵计算- 1实验二 Huffma

2、n 编码实验- 6实验三 算术编码实验- 11实验四 CRC校验编码实验-17实验一 信息熵与图像熵计算(2学时)一、实验目的 1复习MATLAB的基本命令,熟悉MATLAB下的基本函数。2复习信息熵基本定义, 能够自学图像熵定义和基本概念。 二、实验内容 1能够写出MATLAB源代码,求信源的信息熵。 2根据图像熵基本知识,综合设计出MATLAB程序,求出给定图像的图像熵。三、实验仪器、设备 1计算机系统最低配置 256M内存、P4 CPU。2Matlab仿真软件 7.0 / 7.1 / 2006a 等版本Matlab软件。四、实验原理 1 MATLAB中数据类型、矩阵运算、图像文件输入与输

3、出知识复习。2 利用信息论中信息熵概念,求出任意一个离散信源的熵(平均自信息量)。自信息是一个随机变量,它是指某一信源发出某一消息所含有的信息量。所发出的消息不同,它们所含有的信息量也就不同。任何一个消息的自信息量都代表不了信源所包含的平均自信息量。不能作为整个信源的信息测度,因此定义自信息量的数学期望为信源的平均自信息量:信息熵的意义:信源的信息熵H是从整个信源的统计特性来考虑的。它是从平均意义上来表征信源的总体特性的。对于某特定的信源,其信息熵只有一个。不同的信源因统计特性不同,其熵也不同。3学习图像熵基本概念,能够求出图像一维熵和二维熵。图像熵是一种特征的统计形式,它反映了图像中平均信息

4、量的多少。图像的一维熵表示图像中灰度分布的聚集特征所包含的信息量,令 Pi Pi表示图像中灰度值为i的像素所占的比例,则定义灰度图像的一元灰度熵为:图像的一维熵可以表示图像灰度分布的聚集特征,却不能反映图像灰度分布的空间特征,为了表征这种空间特征,可以在一维熵的基础上引入能够反映灰度分布空间特征的特征量来组成图像的二维熵。选择图像的邻域灰度均值作为灰度分布的空间特征量,与图像的像素灰度组成特征二元组,记为( i, j ),其中i表示像素的灰度值(0 = i = 255),j表示邻域灰度(0 = j .00001, error(Probablities dont sum to 1.)end% R

5、emove any zero probabilities %zeroProbs = find(array eps);if isempty(zeroProbs), array(zeroProbs) = ; %disp(Removed zero or negative probabilities.)End% Compute the entropyH = -sum(array .* log2(array); % 单位 bit/symbol附2:图像熵计算源代码函数源程序 ImgEntropy.m % Image Entropy calculation % jma, 22/08/2007 % img

6、: input image data% H1,H2 : Output 1&2 order entropyfunction H1,H2 = ImgEntropy(img)% color image transformation I = imread(img);img = rgb2gray(I);imview(I), imview(img);ix,iy = size(img);%compute probs for each scale level in imageP1 = imhist(img)/(ix*iy);temp = double(img);% for the index of image

7、 piexl temp = temp , temp(:,1);% correlation prob matrix between 0 . 255 gray levels CoefficientMat = zeros(256,256);for x = 1:ix for y = 1:iy i = temp(x,y); j = temp(x,y+1); CoefficientMat(i+1,j+1) = CoefficientMat(i+1,j+1)+1; endend% compute the prob of matrix P2 = CoefficientMat./(ix*iy);H1 = 0;

8、H2 = 0;for i = 1:256% calculate 1 ord image entropy if P1(i) = 0 H1 = H1 - P1(i)*log2(P1(i); end% compute 2 ord image entropy for j = 1:256 if P2(i,j) = 0 H2 = H2 - P2(i,j)*log2(P2(i,j); end endendH2 = H2/2; % mean entropy /symbol sprintf(1 ord image entropy is : %d,H1)sprintf(2 ord image entropy is

9、 : %d,H2)函数调用实例 test.m% Information Theory experiment testing file% jma, 22/08/2007% testing Discrete Shannon Entropy % discrete probabilities setprobSet = 0.1 0.2 0.3 0.15 0.25;% call CalEntropy functionH = CalEntropy(probSet);sprintf(Shannon Entropy is: %d,H)% calculate the Image entropyH1,H2 = Im

10、gEntropy(lena.jpg);附3:实验报告固定样式实 验 报 告班级: 姓名: 学号: 组别: 同组人: 课程名称: 实验室: 实验时间: (使用实验报告纸的,以上内容可按照实验报告纸格式填写)实验一 信息熵与图像熵计算一、实验目的:二、实验内容与原理:三、实验器材(设备、元器件、软件工具、平台):四、实验步骤:五、实验数据及结果分析:六、实验结论:七、思考题八、其他:实验总结、心得体会及对本实验方法、手段及过程的改进建议等。实验二 Huffman 编码(2学时)一、实验目的 1复习C+程序基本编写方法,熟悉VC编程环境。2会用VC调试Huffman编码程序。二、实验内容 1复习C+

11、代码基本语法(结构体、树等数据结构定义)2根据Huffman编码源代码,学习算法实现流程,培养自己动手能力,在C+编译器下按步调试跟踪算法。三、实验仪器、设备 1计算机系统最低配置 256M内存、P4 CPU。2C+ 编程软件 Visual C+ 7.0 (Microsoft Visual Studio 2003) Visual C+ 8.0 (Microsoft Visual Studio 2005)四、实验原理 1 Huffman 编码原理:将信源符号按概率从大到小的顺序排列,令p(x1) p(x2) p(xn)给两个概率最小的信源符号p(xn-1)和p(xn)各分配一个码位“0”和“1”

12、,将这两个信源符号合并成一个新符号,并用这两个最小的概率之和作为新符号的概率,结果得到一个只包含(n1)个信源符号的新信源。称为信源的第一次缩减信源,用S1表示。将缩减信源S1的符号仍按概率从大到小顺序排列,重复步骤2,得到只含(n2)个符号的缩减信源S2。重复上述步骤,直至缩减信源只剩两个符号为止,此时所剩两个符号的概率之和必为1。然后从最后一级缩减信源开始,依编码路径向前返回,就得到各信源符号所对应的码字。2Huffman树的编码原理:步骤1: 将各个符号及其出现频率分别作为不同的小二叉树(目前每棵树只有根节点)步骤2: 在步骤1中得到的树林里找出频率值最小的两棵树,将他们分别作为左、右子

13、树连成一棵大一些的二叉树,该二叉树的频率值设为两棵子树频率值之和。步骤3:对上面得到的树林重复步骤2的做法,直到所有符号都连入树中为止。五、实验步骤 1VC环境下,建一个C+控制台应用程序,并把源代码考到该程序目录下。2项目文件中含有一个预编译头文件,一个主函数入口文件和Huffman编码算法文件。3在入口文件中,输入任一个离散信源进行编码调试。4设置好程序断点,仔细分析Huffman树每步的建立过程。5输出离散信源中每个符号的Huffman编码,并与手工运算的结果进行比较。六、实验报告要求 1 按照实验一附3中实验报告样式书写本次实验报告。2 总结C+语言学习心得,并结合Huffman编码实

14、验总结自己的得失,指出今后自己要练习改进之处。根据自己实验情况,对本实验写出建议。七、实验注意事项 1指针数据结构定义typedef structunsigned long weight;int parent, lchild, rchild; HTNode, *HuffmanTree;typedef char* HuffmanCode; / 指向存放数组指针的数组即二维数组 2二叉树生成操作放在数组中(节点n和数组大小m关系为:m=2*n-1)。每次在树中找到两颗最小子树,其函数为Select(HuffmanTree HT, int n, int *s1, int *s2),实际实现的是在数组

15、中找到最小两个元素。另外注意C+的数组起始索引是0,Matlab起始索引是1;程序中为了方便从1开始索引数组,HT0.weight 的大小设为0xffffffffL。为了输出二进制Huffman码,程序最后对每个符号进行深度优先搜索,得到该符号的二进制字符,然后进行字符串拷贝,直到最后输出。八、思考题 根据Huffman算法的C源程序,试着写出Huffman编码的Matlab程序?附1:Huffman编码源代码源代码列表:stdafx.h Huffman.cpp预编译头文件:stdafx.h 以下代码#pragma once#include #include #include #include

16、 #include 控制台应用CPP文件:Huffman.cpp#include stdafx.htypedef structunsigned long weight;int parent, lchild, rchild; HTNode, *HuffmanTree;typedef char* HuffmanCode;HuffmanCode HC;void Select(HuffmanTree HT, int n, int *s1, int *s2);void HuffmanCoding(unsigned long *w, int n)int i;if( n=1 ) return;int m =

17、 2*n - 1;HuffmanTree p;HuffmanTree HT = (HuffmanTree)malloc(m+1)*sizeof(HTNode);memset(HT, 0, sizeof(HTNode) * (m+1);for( p=HT,i=1; iweight = *w;int s1, s2;for( i=n+1; i=m; +i )Select(HT, i-1, &s1, &s2);HTs1.parent = i; HTs2.parent = i;HTi.lchild = s1; HTi.rchild = s2;HTi.weight = HTs1.weight + HTs2

18、.weight;HC = (HuffmanCode)malloc(n+1)*sizeof(char*);char *cd = (char*)malloc(n*sizeof(char);cdn-1 = 0;int start;unsigned long f;for( i=1; i=n; +i )start = n - 1;int c;for( c=i, f=HTi.parent; f!=0; c=f, f=HTf.parent )if( HTf.lchild = c )cd-start = 0;else cd-start = 1;HCi = (char*)malloc(n-start)*size

19、of(char);strcpy(HCi, &cdstart);free( HT );/free( cd );void Select(HuffmanTree HT, int n, int *s1, int *s2)int i;HT0.weight = (unsigned long)(-1l);*s1 = *s2 = 0;for( i=1; i=n; i+ )if( HTi.parent = 0 )if( HTi.weight HT*s1.weight )*s2 = *s1;*s1 = i;else if( HTi.weight HT*s2.weight )*s2 = i;/ 函数测试实例int

20、_tmain(int argc, _TCHAR* argv)const int LEN = 3;int i;unsigned long weightLEN+1; weight0 = 0;weight1 = 1;weight2 = 7;weight3 = 2;HuffmanCoding( weight, LEN );for( i=1; i=LEN; i+ )printf(%sn, HCi);return 0;/ End of Huffman.cpp实验三 算术编码(2学时)一、实验目的 1进一步学习C+语言概念和熟悉VC编程环境。2学习算术编码基本流程, 学会调试算术编码程序。3. 根据给出资料

21、,自学自适应0阶算术编、解码方法。二、实验内容 1复习C+代码基本语法(类和虚函数等面向对象数据结构定义)2根据实验提供的源代码,学习算术编码实现流程,培养实际动手调试能力和相应的编程技巧。三、实验仪器、设备 1计算机系统最低配置 256M内存、P4 CPU。2C+ 编程软件 Visual C+ 7.0 (Microsoft Visual Studio 2003) Visual C+ 8.0 (Microsoft Visual Studio 2005)四、实验原理 1算术编码基本原理是将编码消息表示成实数0和1之间的一个间隔,消息越长,编码表示它的间隔就越小,表示这一间隔所需的二进制位就越多。

22、 算术编码用到两个基本的参数:符号的概率和它的编码间隔。信源符号的概率决定压缩编码的效率,也决定编码过程中信源符号的间隔,而这些间隔包含在0到1之间。编码过程中的间隔决定了符号压缩后的输出。首先借助下面一个简单的例子来阐释算术编码的基本原理。考虑某条信息中可能出现的字符仅有 a b c 三种,我们要压缩保存的信息为 bccb。在没有开始压缩进程之前,假设对 a b c 三者在信息中的出现概率一无所知(采用的是自适应模型),暂认为三者的出现概率相等各为 1/3,将 0 - 1 区间按照概率的比例分配给三个字符,即 a 从 0.0000 到 0.3333,b 从 0.3333 到 0.6667,c

23、 从 0.6667 到 1.0000。进行第一个字符 b编码,b 对应的区间 0.3333 - 0.6667。这时由于多了字符 b,三个字符的概率分布变成:Pa = 1/4,Pb = 2/4,Pc = 1/4。按照新的概率分布比例划分 0.3333 - 0.6667 这一区间,划分的结果可以用图形表示为: +- 0.6667 Pc = 1/4 | +- 0.5834 | | Pb = 2/4 | | | +- 0.4167 Pa = 1/4 | +- 0.3333接着拿到字符 c,现在要关注上一步中得到的 c 的区间 0.5834 - 0.6667。新添了 c 以后,三个字符的概率分布变成 P

24、a = 1/5,Pb = 2/5,Pc = 2/5。用这个概率分布划分区间 0.5834 - 0.6667: +- 0.6667 | Pc = 2/5 | +- 0.6334 | Pb = 2/5 | | +- 0.6001 Pa = 1/5 | +- 0.5834输入下一个字符 c,三个字符的概率分布为:Pa = 1/6,Pb = 2/6,Pc = 3/6。接着来划分 c 的区间 0.6334 - 0.6667: +- 0.6667 | | Pc = 3/6 | | +- 0.6501 | Pb = 2/6 | | +- 0.6390 Pa = 1/6 | +- 0.6334输入最后一个字符

25、 b,因为是最后一个字符,不用再做进一步的划分了,上一步中得到的 b 的区间为 0.6390 - 0.6501,最后在这个区间内随便选择一个容易变成二进制的数,例如 0.64,将它变成二进制 0.1010001111,去掉前面没有太多意义的 0 和小数点,可以输出 1010001111,这就是信息被压缩后的结果,由此完成了一次最简单的算术压缩过程。如何解压缩呢?那就更简单了。解压缩之前仍然假定三个字符的概率相等。解压缩时面对的是二进制流 1010001111,先在前面加上 0 和小数点把它变成小数 0.1010001111,也就是十进制 0.64。这时我们发现 0.64 在分布图中落入字符 b

26、 的区间内,立即输出字符 b,并得出三个字符新的概率分布。类似压缩时采用的方法,我们按照新的概率分布划分字符 b 的区间。在新的划分中,我们发现 0.64 落入了字符 c 的区间,我们可以输出字符 c。同理,我们可以继续输出所有的字符,完成全部解压缩过程。2小数存储方法如果信息内容特别丰富,我们要输出的小数将会很长很长,该如何在内存中表示如此长的小数呢?其实,没有任何必要在内存中存储要输出的整个小数。从上面的例子可以知道,在编码的进行中,会不断地得到有关要输出小数的各种信息。具体地讲,当我们将区间限定在 0.6390 - 0.6501 之间时,我们已经知道要输出的小数第一位(十进制)一定是 6

27、,那么我们完全可以将 6 从内存中拿掉,接着在区间 0.390 - 0.501 之间继续我们的压缩进程。内存中始终不会有非常长的小数存在。使用二进制时也是一样的,我们会随着压缩的进行不断决定下一个要输出的二进制位是 0 还是 1,然后输出该位并减小内存中小数的长度,具体可以参考E1/E2/E3 放大原理,及它们之间关系的描述。3静态模型与自适应模型静态模型上面的简单例子采用的是自适应模型,那么如何实现静态模型呢?其实很简单。对信息 bccb 我们统计出其中只有两个字符,概率分布为 Pb = 0.5,Pc = 0.5。在压缩过程中不必再更新此概率分布,每次对区间的划分都依照此分布即可,对上例也就

28、是每次都平分区间。这样,压缩过程可以简单表示为: 输出区间的下限 输出区间的上限- 压缩前 0.0 1.0 输入 b 0.0 0.5 输入 c 0.25 0.5 输入 c 0.375 0.5 输入 b 0.375 0.4375最后的输出区间在 0.375 - 0.4375 之间,甚至连一个十进制位都没有确定,也就是说,整个信息根本用不了一个十进制位。自适应模型既然使用静态模型可以很好地接近熵值,为什么还要采用自适应模型呢?要知道,静态模型无法适应信息多样性,例如,上面得出的概率分布没法在所有待压缩信息上使用,为了能正确解压缩,我们必须再消耗一定的空间保存静态模型统计出的概率分布,保存模型所用的

29、空间将使我们重新远离熵值。其次,静态模型需要在压缩前对信息内字符的分布进行统计,这一统计过程将消耗大量的时间,使得本来就比较慢的算术编码压缩更加缓慢。另外还有最重要的一点,对较长的信息,静态模型统计出的符号概率是该符号在整个信息中的出现概率,而自适应模型可以统计出某个符号在某一局部的出现概率或某个符号相对于某一上下文的出现概率,换句话说,自适应模型得到的概率分布将有利于对信息的压缩(可以说结合上下文的自适应模型的信息熵建立在更高的概率层次上,其总熵值更小),好的基于上下文的自适应模型得到的压缩结果将远远超过静态模型。自适应模型的阶通常用“阶”(order)这一术语区分不同的自适应模型。前面例子

30、中采用的是 0 阶自适应模型,该例子中统计的是符号在已输入信息中的出现概率,没有考虑任何上下文信息。如果我将模型变成统计符号在某个特定符号后的出现概率,那么,模型就成为了 1 阶上下文自适应模型。举个例子要对一篇英文文本进行编码,已经编码了 10000 个英文字符,刚刚编码的字符是 t,下一个要编码的字符是 h。我们在前面的编码过程中已经统计出前 10000 个字符中出现了 113 次字母 t,其中有 47 个 t 后面跟着字母 h。我们得出字符 h 在字符 t 后的出现频率是 47/113,我们使用这一频率对字符 h 进行编码,需要 -log2(47/113) = 1.266 bit。对比

31、0 阶自适应模型,如果前 10000 个字符中 h 的出现次数为 82 次,则字符 h 的概率是 82/10000,我们用此概率对 h 进行编码,需要 -log2(82/10000) = 6.930 bit。考虑上下文因素的优势显而易见。还可以进一步扩大这一优势,例如要编码字符 h 的前两个字符是 gt,而在已经编码的文本中 gt 后面出现 h 的概率是 80%,那么我们只需要 0.322 bit就可以编码输出字符 h。此时,使用的模型叫做 2 阶上下文自适应模型。最理想的情况是采用 3 阶自适应模型。此时,如果结合算术编码,对信息的压缩效果将达到惊人的程度。采用更高阶的模型需要消耗的系统空间

32、和时间至少在目前还无法让人接受,使用算术压缩的应用程序大多数采用 2 阶或 3 阶的自适应模型。五、实验步骤 项目文件建立步骤同实验二,下面列出对给定序列的算术编码步骤: 步骤1:编码器在开始时将“当前间隔” L, H) 设置为0,1)。 步骤2:对每一事件,编码器按步骤(a)和(b)进行处理 (a)编码器将“当前间隔”分为子间隔,每一个事件一个。 (b)一个子间隔的大小与下一个将出现的事件的概率成比例,编码器选择子间隔对应于下一个确切发生的事件相对应,并使它成为新的“当前间隔”。 步骤3:最后输出的“当前间隔”的下边界就是该给定事件序列的算术编码。 六、实验报告要求 1 按照实验一附3中实验

33、报告样式提交本次实验报告。2 算术编码学习心得,特别是根据自适应模型0阶编码,调整概率分布方法。根据自己实验情况,写出自己的做实验中遇到的具体问题,对本实验提出建议。七、实验注意事项 1. 几个重要概念在实验前一定搞清楚:1)编码概论累加分布;2)编码区间上限和下限迭代算法;3)自适应模型0阶的编码原理。2. 程序设计时注意内容:1)基本概论模型的确定(等概率分布,255个字符);2)自适应调整概率分布;3)E1/E2/E3 放大原理,及它们之间关系(认真阅读参考资料);4)理解从Buffer中写bit和读bit的方法;5)理解字节对齐的方法。八、思考题 能否根据算法流程和C+源代码写出Mat

34、lab下算术编码程序?实验四 CRC校验码编码实验(2学时)一、实验目的 1学习CRC编码基本流程, 学会调试循环冗余校验码编码程序。2掌握CRC校验码的编码原理,重点掌握按字节(Byte)编码方法。二、实验内容 1根据实验原理掌握CRC校验码编码/解码基本流程。2在C+编译器下能够调试编码算法每一个步骤,重点掌握按字节编码的过程。三、实验仪器、设备 1计算机系统最低配置 256M内存、P4 CPU。2C+ 编程软件 Visual C+ 7.0 (Microsoft Visual Studio 2003) Visual C+ 8.0 (Microsoft Visual Studio 2005)

35、四、实验原理 1 CRC校验码介绍CRC 校验的基本思想是利用线性编码理论,在发送端根据要传送的k 位二进制码序列,以一定的规则产生一个校验用的监督码(CRC 码)r 位,并附在信息后边,构成一个新的二进制码序列数共 (k+r) 位,最后发送出去。在接收端,则根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。16位的CRC 码产生的规则是先将要发送的二进制序列数左移16位(乘以216)后,再除以一个多项式,最后所得到的余数既是CRC 码。求CRC码所采用模2 加减运算法则,既是不带进位和借位的按位加减,这种加减运算实际上就是逻辑上的异或运算,加法和减法等价,乘法和除法运算与普

36、通代数式的乘除法运算是一样,符合同样的规律。接收方将接收到的二进制序列数(包括信息码和CRC 码)除以多项式,如果余数为0,则说明传输中无错误发生,否则说明传输有误。2按位计算CRC一个二进制序列数可以表示为求此二进制序列数的CRC 码时,先乘以216后(左移16位),再除以多项式G(X) ,所得的余数就是所要求的CRC 码。可以设:其中Q n (X) 为整数, R n (X) 为16位二进制余数,将上式代入前式得:再设:其中Qn-1(X) 为整数, Rn-1(X) 为16位二进制余数,继续代入前式,多次迭代得到:根据CRC 的定义,很显然,十六位二进制数R0(X) 即是要求的CRC码。3按字

37、节计算CRC对于一个二进制序列数可以按字节表示为下式,其中Bn(X) 为一个字节(共8 位):求此二进制序列数的CRC码时,先乘以216后(左移16位),再除以多项式G(X),所得的余数即是所要求的CRC 码。可以设:其中Qn(X) 为整数, Rn(X) 为16位二进制余数,将上式代入前式得:由于:其中RnH8(X) 是Rn(X)的高八位, RnL8(X)是Rn(X)的低八位,代入前式得到:再设:其中Qn-1(X ) 为整数, Rn-1(X ) 为16位二进制余数,继续代入前式,多次迭代得到:显然,十六位二进制数R0(X)即是要求的CRC码。五、实验步骤 项目文件建立步骤同实验二,下面列出对给

38、定字符串CRC校验主要步骤:步骤1:从主函数入口输入一个字符串,并且确定按字节32位CRC校验编码,编码多项式采用CCITT标准形式多项式。步骤2:调用编码函数,依次读入字符串每个自己,进行模2除法运算。步骤3:将原来字符串左移32位,将除法最后的余式追加到字符串的后32位中去,得到该字符串CRC校验编码结果。步骤4:如果要解码,首先确认编码多项式,然后将接收字符串除以编码多项式。如果能够整除,说明字符串在传输或存储中没有发生错误;否则,表明字符串在传输或存储中产生错误,导致CRC校验失败。六、实验报告要求 1 按照实验一附3中实验报告样式提交本次实验报告。2 要求写出CRC校验编码学习心得,

39、最好是能够结合硬件设计谈一下校验编码的设计体会。根据自己实验情况,写出自己的做实验中遇到的具体问题,对本实验提出建议。七、实验注意事项 1几个重要概念在实验前一定搞清楚:1) 模2 加减法 = 异或(XOR)。2) 多项式的表示方法。3) CRC 校验的基本理论a 可以参考前面文中的推导。b 自己通过一个除法运算推导。4) 常用的两种方法:a Bit 长度运算b Byte 长度运算(可以将字节除法余式表保存下来,通过查表,计算比较快)2. 程序设计时注意内容:1) 注意检查字节输入顺序与多项式的关系a 高字节前,低字节后,采用通常理论推导公式编写程序。b 低字节前,高字节后,采用向右移位方式。(这是数据通信中常用方式,多项式采用反转多项式,添加余式时注意低位在前,高位在后)2) 注意寄存器初始值选择CCITT 和CRC32 如果用在通信中,常采用初始值为0xffff或0xffffffffL,可以开始纠正数字通信中几个bit连续为0的情况。为保持其输出和采用初始值为0xffff或0xffffffffL一致,最后CRC校验值要与0xffff或0xffffffffL进行异或运算(XOR)得到最终CRC校验码。八、思考题 1掌握按字节编码的过程,试着写出CRC校验编码的Matlab程序? 2如何设计FPGA实现CRC校验计算?

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!