1、 没实验一 绘制二进熵函数曲线(2 个学时)一、实验目的:1. 掌握 Excel的数据填充、公式运算和图表制作2. 掌握 Matlab绘图函数3. 掌握、理解熵函数表达式及其性质二、实验要求:1. 提前预习实验,认真阅读实验原理以及相应的参考书。2. 在实验报告中给出二进制熵函数曲线图三、实验原理:1. Excel的图表功能2. 信源熵的概念及性质 )(1)(1 .log)( 1logl)()()( 10 ,102QHPQPHbnXappxXHppxPi ii 四、实验内容:用 Excel 或 Matlab 软件制作二进熵函数曲线。具体步骤如下:1、启动 Excel 应用程序。2、准备一组数据
2、 p。在 Excel 的一个工作表的 A 列(或其它列)输入一组p,取步长为 0.01,从 0 至 100 产生 101 个 p(利用 Excel 填充功能) 。3、取定对数底 c,在 B 列计算 H(x) ,注意对 p=0 与 p=1 两处,在 B 列对应位置直接输入 0。Excel 中提供了三种对数函数 LN(x),LOG10(x)和 LOG(x,c),其中 LN(x)是求自然对数, LOG10(x)是求以 10 为底的对数,LOG(x,c)表示求对数。选用 c=2,则应用函数 LOG(x,2)。在单元格 B2 中输入公式:=-A2*LOG(A2,2)-(1-A2)*LOG(1-A2,2)
3、双击 B2 的填充柄,即可完成 H(p)的计算。4、使用 Excel 的图表向导,图表类型选 “XY 散点图” ,子图表类型选“无数据点平滑散点图” ,数据区域用计算出的 H(p)数据所在列范围,即$B$1:$B$101。在“系列” 中输入 X 值(即 p 值)范围,即$A$1:$A$101 。在 X 轴输入标题概率,在 Y 轴输入标题信源熵。实验二:香农编码软件实现(2 个学时)1、实验目的(1)了解香农编码的基本原理及其特点;(2)熟悉掌握香农编码的方法和步骤;(3)掌握 C 语言或者 Matlab 编写香农编码的程序。2、实验报告要求(1)简要总结香农编码的基本原理与特点(2)写出香农编
4、码的基本步骤,画出实现香农编码的程序流程图(3)实现香农编码的 Matlab 或者 C 源程序3、实验内容(1)根据香农编码的方法和步骤,用香农编码编写程序(2)用编写的源程序验证书中例题的正确性。实验三: Huffman 编码软件实现(2 个学时)1、实验目的(1)进一步熟悉 Huffman 编码过程;(2)掌握 C 语言递归程序的设计和调试技术(或者使用 Matlab) 。2、实验要求(1)输入:信源符号个数 r、信源的概率分布 P;(2)输出:每个信源符号对应的 Huffman 编码的码字。3、实验内容(1)算法1、从键盘输入组成信源 C 的字符个数 N;2、从键盘输入信源 C 和组成信
5、源的字符所对应的概率数组 P;3、用 函数来对信源进行二进制编码;先对 P 按从大到小进行排序,Hufman与此同时要把 C 中相应的字符的位置做相应的调换;用 数组来记录编码:count在进行记录编码时是从数组 的最后一个开始存储的,而且,每进行一次编count码所记录下来的两个编码 是按从数组的最后一个元素开始服从 countm-k-j、1,0countm-k-j-1,其中 k 表示编码所进行的次数, j 表示每次编码都只有 ;最1,0后用函数 来输出编码。int()pr(2)部分伪代码:(一)节点信息结构体struct HuffNodeint weight;/信源符号的概率int par
6、ent;int lchild;int rchild;(二)算法void Huffman(int weight, int n, HuffNode hn, HuffCode hc)for(i = 0; i != 2*n - 1; +i) /create Huffman Node,step 1for(i = 0; i != n-1; +i) /create Huffman Node, step 2for(j = 0; j != n+i; j+) if(hnj.weight min1 在此逆序存储 Huffman 编码int tempmaxlen; for(i = 0; i != n; +i)int
7、parent = hni.parent;while(hnchild.parent != 0) 4、实验报告(1)简要总结 Huffman 编码的原理与特点(2)写出 Huffman 编码的基本步骤,画出实现 Huffman 编码的程序流程图(3)给出 Huffman 编码的源程序,并给出实验过程中的测试结果(4)总结实验过程遇到的问题及解决方法实验四 循环码的编码和译码程序设计一、实验目的:1通过实验了解循环码的工作原理。2了解生成多项式 g(x)与编码、译码的关系。3了解码距 d 与纠、检错能力之间的关系。4分析(7.3) 循环码的纠错能力。二、实验要求:1、编、译码用上述的计算法程序框图编
8、写。2、计算出所有的码字集合,可纠错误图样 E(x)表和对应的错误伴随式表。3、考查和分析该码检、纠一、二位错误的能力情况。4、整理好所有的程序清单,变量名尽量用程序框图所给名称,并作注释。5、出示软件报告.三、实验设计原理1、循环码编码原理设有一(,)循环码,码字Cn-1CrCr-1C0,其中 r=n-k。码字多项式为: C(x)= Cn-1xn-1+Cn-2xn-2+C1x+C0。码字的生成多项式为: g(x)=gr-1xr-1gr-2xr-2+g1x+g0待编码的信息多项式为: m(x)=mK-1xK-1+m0xn-k.m(x)=Cn-1xn-1+Cn-Kxn-K对于系统码有: Cn-1
9、=mK-1,Cn-2=mK-2,Cn-K=Cr=m0设监督多项式为: r(x)=Cr-1Xr-1+C1x+C0根据循环码的定义,则有:C(x)=xn-Km(x)+r(x)=q (x).g(x)Xn-Km(x)=q(x).g(x)+r(x)r(x)=Rg(x)xn-Km(x)即监督多项式是将多项式 xn-Km(x)除以 g(x)所得的余式。编码过程就是如何根据生成多项式完成除法运算求取监督多项式的过程。 设循环码(7.3) 码的字多项式为:C(x)=C6x6+C5x5+C4x4+C3x3+C2x2C1x+C0 (n=7)生成多项式为: g(x)=x4+x2+x+1信息多项式为: m(x)=m2x
10、2+m1x+m0 (k=3), 设 m(x)=x2+x监督多项式为: r(x)= Cr-1Xr-1+C1x+C0根据循环码的定义:生成多项式的倍式均是码字,编码实际上是做 xn-km(x)除以 g(x)的 运算求得 r(x)。编码程序框图见图 4.1(a)左,二进制多项式除法示意图见图 4.1(b)。2、译码原理设 R(x)为接收码字多项式,E(x) 为错误图样多项式,S(x)为伴随式,则根据循环码的性质有:S(x)=g(x)R(x)=g(x)E(x)当 R(x)=C(x)时,有 E(x)=0,S(x)=0当 R(x)不等于 C(x)时,有 E(x)为非 0,S(x)为非 0(a)编码计算程序
11、框图 (b)二进制多项式除法示意图图 4.1 编码计算程序框图及多项式除法示意图译码过程如下:计算每一种可能被纠的错误图样 E(x)的伴随式,Si(x)=g(x)E(x) 本地作数据表存储好。根据已接收码字多项式 R(x),计算相应的伴随式:S(x)= g(x)R(x)将实际接收码字求出的 S(x)与本地存储的各 Si(x)相比较,查出两者相等的那个唯一匹配的 Si(x),找出并得到相应的错误图样 E(x)。(4) 纠错: C(x)=R(x)+E(x)否则由 S(x)找不出唯一匹配的 Si(x),则报出错信息,表示出现不可纠错的错误图样,即码元出错的个数超出该循环码的纠错能力。译码流程图 4.
12、2 所示:111 .商数g(x): 10111| 1100000 .xrm(x)+ 10111 .第一步11110+ 10111 .第二步10010+ 10111 .第三步101 .余式:x 2+1编码步骤:、n-k=r=7-3=4,用 x4乘 m(x)的运算实际上相当于在信息码 110后附上 4个0,变为 1100000、用 xrm(x)=x4(x2+x)=x6+x5除以 g(x),如图(a)所示,得到监督余式 r(x)=x2+1。、编出相应的发送码字为:C(x)=xrm(x)+r(x)C=1100000+101=11001014、按上述步骤,将得到下述码表:信息位 监督位000 00000
13、01 0111010 1110011 1001100 1011101 1100110 0101111 0010除法子程序NNYYC x nkm(x),DC,r=n-kGg(x)系数设循环变量 B=KC 的第 B+r 位=0?C+GCG 右移一位BB+1B=0?DC+D码字 D 输出六、完成实验报告(1)简要总结循环码编译码原理与特点(2)写出循环码的基本步骤,画出实现循环码的程序流程图(3)给出循环码的源程序,并给出实验过程中的测试结果(4)总结实验过程遇到的问题及解决方法YN初始化可纠错误图样种类总数=N,i=0Gg(x)系数CE i(x)系数,D0调除法子程序求 Rg(x)Ei(x)SiCi=i+1i=N?将所有的 EI(x)系数=Ei及对应 SI 造表存储待用YNNNNYY初始化Gg(x) 系数,i=0,N 赋值输入接收矢量 R(x)的系数R,CR(x) 系数调除法子程序求 Rg(x)R(x)SiC,S=0?S=SI?i=i+1,i=N?出现不可纠的错误图样报错,转下一 R(x)译码i=0,C=R+EiR(x)元错输出转下一 R(x)译码译码流程一 译码流程二图 4.2 译码程序流程图