




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实践教案 兰州理工大学 计算机与通信学院 2012 年秋季学期 计算机通信课程设计 题 目: (7,4 )汉明码编译码软件设计 专业班级: 11 级通信工程二班 姓 名: 王海霞 学 号: 11250231 指导教师:王维芳 成 绩: 1 / 31 摘要 汉明码是一种能自动检错并纠正一位错码的线性纠错码,用于信道编码与译码中,高通 信系统抗干扰的能力。本次课设主要是( 7,4 )汉明码的编译码软件设计 ,该软件可以对输入 的多个四位信息码进行编码 , 对于接收的多个七位信息码可以进行译码 , 从而译出四位信息位 当接收到的信息码有一位错误时 , 可以纠正这一位错码 ,进而译出正确的信息码组 ,
2、 整个程序 使用 C 语言编写 . 关键词: 汉明码、编码、译码、检错、纠错 2 / 31 目录 一、C 语言简介 1 1.1什么是 C 语言 1 1.2 C 语言的特点 1 1.3 运行 C 程序的步骤与方法 2 二、汉明码编码 3 2.1 汉明码编码原理 3 2.2 监督矩阵 6 2.3 生成矩阵 7 三、汉明码纠错检错 8 3.1 汉明距离 8 3.2 汉明码纠错原理 8 四、汉明码编译码的实现过程 9 4.1 编码过程 9 4.2 译码过程 10 五、软件设计及测试分析 11 5.1 程序流程图 11 5.1.2 编码程序流程图 11 5.1.3 译码程序流程图 12 5.2 软件运行
3、分析 14 5.2.1 主程序运行分析 14 5.2.2 编码运行分析 16 5.2.3 译码运行分析 17 5.3 软件分析 18 总结 18 参考文献 19 附录 20 1 / 31 一、 C 语言简介 1.1 什么是 C 语言 C语言是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编语言的特点。 它由美国贝尔研究所的 D.M.Ritchie 于 1972 年推出。1978后,C语言已先后被移植到大、 中、 小及微型机上。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设 计语言,编写不依赖计算机硬件的应用程序。它的应用范围广泛, 具备很强的数据处理能力, 不仅仅
4、是在软件开发上,而且各类科研都需要用到 C 语言,适于编写系统软件,三维,二维 图形和动画。具体应用比如单片机以及嵌入式系统开发。 1.2 C 语言的特点 一种语言之所以能存在和发展,并具有较强的生命力,总是有不同于其他语言的特点。 主要的优缺点介绍如下。 优点 简洁紧凑、灵活方便。 C 语言一共只有 32 个关键字, 9 种控制语句,程序书写 形式自由,区分大小写。把高级语言的基本结构和语句与低级语言的实用性结 合起来。 C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是 计算机最基本的工作单元。 运算符丰富。 C 语言的运算符包含的范围很广泛,共有34 种运算符。 C 语言把
5、括号、赋值。强制类型转换等都作为运算符处理。从而使 C 语言的运算类型极 其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其它高级语言中 难以实现的运算。 数据类型丰富。 C 语言的数据类型有:整型、实型、字符型、数组类型、指针 类型、结构体类型、共用体类型等。能用来实现各种复杂的数据结构运算。并 引入了指针概念,使程序效率更高。另外 C 语言具有强大的图形功能,支持多 种显示器和驱动器。且计算功能、逻辑判断功能强大。 C 是结构式语言。结构式语言的显著特点是代码及数据的分隔化,即程序的各 个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰, 便于使用、维护以及调试。 C
6、 语言是以函数形式提供给用户的,这些函数可方 便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。 语法限制不太严格,程序设计自由度大。虽然C 语言也是强类型语言,但它的 1 / 31 语法比较灵活,允许程序编写者有较大的自由度。 允许直接访问物理地址, 对硬件进行操作。 由于 C 语言允许直接访问物理地址, 可以直接对硬件进行操作,因此它既具有高级语言的功能,又具有低级语言的 许多功能,能够像汇编语言一样对位、字节和地址进行操作,而这三者是计算 机最基本的工作单元,可用来写系统软件。 生成目标代码质量高,程序执行效率高。一般只比汇编程序生成的目标代码效 率低 10 20%。
7、 适用范围大,可移植性好。 C 语言有一个突出的优点就是适合于多种操作系统, 如 DOS、 UNIX、 windows 98 windows NT;也适用于多种机型。 C 语言具有强大 的绘图能力,可移植性好,并具备很强的数据处理能力,因此适于编写系统软 件,三维,二维图形和动画,它也是数值计算的高级语言。 缺点 C 语言的缺点主要表现在数据的封装性上,这一点使得 C 在数据的安全性上有 很大缺陷,这也是 C 和 C+的一大区别。 C语言的语法限制不太严格, 对变量的类型约束不严格, 影响程序的安全性, 对数组 下标越界不作检查等。从应用的角度, C 语言比其他高级语言较难掌握。 1.3 运行
8、 C 程序的步骤与方法 为了使计算机能按照人的意志进行工作,必须根据问题的要求,编写出相应的程序。为 了使计算机能执行高级语言源程序,必须先用一种称为“编译程序”的软件,把源程序翻译 成二进制形式的“目标程序”,然后再将该目标程序与系统的函数库以及其他目标程序连接 起来,形成可执行的目标程序。 在编好一个 C 源程序后如何上机运行呢?在纸上写好一个程序后, 要经过这样几个步骤: 上机输入与编辑源程序 对源程序进行编译 与库函数连接 运行目标程序。以上过程如 图 2 所示。图中实线表示操作流程,虚线表示文件的输入输出。例如,编辑后得到源程序文 件 f.c ,然后在进行编译时再将源程序文件 f.c
9、 输入,经过编译得到目标程序文件 f.obj ,再 将目标程序 f.obj 输入内存,与系统提供的库函数等连接,得到可执行的目标程序 f.exe , 最后把 f.exe 调入内存再使之运行。 2 / 31 开始 编辑 编译 有错? 可执行目标 程序 连接 无 源程序 f.c 目标程序 f.obj 库函数和其 他目标程序 执行 结果正确? 结束 图 1 C 语言运行流程图 、汉明码编码 2.1 汉明码编码原理 Hamming码中文称作汉明码。汉明码是由汉明于 1950 年提出的,具有纠正一位错误能力 的线性分组码它的突出特点是: 编译码电路简单,易于硬件实现;用软件实现编译码算法时, 软件效率高
10、;而且性能比较好 . 一般来说,若汉明码长为 n,信息位数为 k,则监督位数 r=n-k 。若希望用 r 个监督位构 造出 r 个监督关系式来指示一位错码的 n 种可能位置,则要求 2r 1 n或 2r 1 k r 1(1) 面以( 7,4)汉明码为例说明原理: 3 / 31 设汉明码( n,k )中 k=4,为了纠正一位错码,由式( 1)可知,要求监督位数 r3。若 取 r=3, 则 n=k+r=7。我们用 a6a5a4a3a2a1a0来表示这 7个码元,用 s 1s 2s 3的值表示 3 个监督关 系式中的校正子,则 s 1s 2s 3的值与错误码元位置的对应关系可以规定如表 1 所列。
11、表1 校正子和错码位置的关系 s1s2s3 错码位置 s 1s 2s3 错码位置 001 a0 101 a4 010 a1 110 a5 100 a2 111 a6 011 a3 000 无错码 则由表 1 可得监督关系式: s1a6a5a4a2(2) s 2a6a5a3a1(3) s 3a6a4a3a0(4) 在发送端编码时,信息位 a6a5a4a3的值决定于输入信号,因此它们是随机的。监督位 a2 、 a1 、a0应根据信息位的取值按监督关系来确定,即监督位应使式( 2)- 式(4)中s1、s2、s3 的值 6 为 0(表示编成的码组中应无错码) a6a5a4a20 a6a5a3a10(5
12、) a6a4a3a00 式(5)经过移项运算,接触监督位 a2 a6 a5 a4 a1 a6 a5 a3( 6) a0 a6 a4 a3 由上面方程可得到表 2所示的16个许用码组。在接收端收到每个码组后, 计算出s1 、s2 、 s 3,如果不全为 0,则表示存在错误,可以由表 1 确定错误位置并予以纠正。举个例子,假 设收到码组为 0000011,可算出s1s2s3 011 ,由表 1可知在a5上有一误码。通过观察可以看 出,上述( 7,4)码的最小码距为 dmin 3 ,纠正一个误码或检测两个误码。如果超出纠错 能力则反而会因“乱纠”出现新的误码 . 表 2 ( 7,4 )汉明码的许用码
13、组 信息位 监督位 信息位 监督位 a6a5a4a3 a2a1a0 a6a5a4a3 a2a1a0 4 / 31 0000 000 1000 111 0001 011 1001 100 0010 101 1010 010 0011 110 1011 001 0100 110 1100 001 0101 101 1101 010 0110 011 1110 100 0111 000 1111 111 a6 式(5)其等价形式为: 111 110 101 010 101 100 a5 a4 a3 a2 7) a1 a0 式( 6)还可以简记为 H AT 0T 或 A HT 0(8) 其中 1110
14、100 H 1 1 0 1 0 1 0 1011001 A a6 a5 a4 a3 a2 a1 a0 0 0 0 0 11 10 01 100 010 001 所以有 PIr 9) 式(6)等价于 a1 a0 a5 a4 a3 a5 a4 a3 10) 其中 Q为 P 的转置,即 Q PT( 11) 5 / 31式( 10)表示 ,信息位给定后,用信息位的行矩阵乘矩阵 Q就产生出监督位。 我们将 Q的左边加上一个 kk 阶单位方阵,就构成一个矩阵 G 1 0 001 1 1 G I kQ 0 1 001 1 0 (12) 0 0 101 0 1 0 0 010 1 1 G称为生成 矩 阵, 因
15、为由它 可以 产 生整个码组, 即有 a6 a5 a4 a3 a2 a1 a0 a6 a5 a4 a3 G (13) 或者 A a6 a 5 a4 a3 G (14) 式(13) 即汉明码的编码原理 2.2 监督矩阵 上面有提到过,线性码是指信息位和监督位满足一组线性代数方程的码 1a61a51a40a31a20a10a00 1a61a50a41a30a21a10a00 (15) 1a60a51a41a30a20a11a00 我们可以将式( 15)表示成如下的矩阵形式 a5 1110100 a4 0 1101010 a3 0 1011001 a2 a1 a0 0 a6 16) 式( 16)还可
16、以简记为 H AT0T或 A HT 0,其中 1 1 1 0 1 0 0 H 1 1 0 1 0 1 0 1 0 1 1 0 0 1 A a3 6 a5 a4 a2 a1 a0 ,0 00 上角“ T”表示将矩阵转置。例如 HT是H的转置,即 HT的第一行为 H的第一列,第二行为第 6 / 31 我们将 H称为监督矩阵 (parity check matrix). 只要监督矩阵 H给定,编码时监督位和信 息位的关系就完全确定了。由( 15)和(16) 都可以看出, H的行数就是监督关系式的数目 r ,H 的每一行中的“ 1”的位置表示相应码元之间存在的监督关系。式( 15)中的 H矩阵可以分为
17、 两部分。 1110100 H 1 1 0 1 0 1 0 PIx(17) 1011001 式中: P为r k阶矩阵; I r为r r 阶单位方阵。 2.3 生成矩阵 由代数理论可知, H矩阵的的各行应该是线性无关的, 否则将得不到 r 个线性无关的监督关 系式,从而也得不到 r个独立的监督位。若一矩阵可以写成 PI x 的矩阵形式,则其各行一定 是线性无关的。因为容易验证 I r的各行是线性无关的,故 PI x 的各行也是线性无关的。 类似于式( 5)改成式( 16)那样,式( 6)可以改写成 a2 a1 a0 11 10 01 a5 a4 18) a3 或者 a2 a1 a0 6 a5 a
18、4 11 11 a3 3 1 0 01 a6 a5 a4 a3 Q 19) 其中, Q为一个k r 阶矩阵,它为P的转置,即 Q PT 20) 式( 19)表示,在信息位给定后,用信息位的行矩阵乘矩阵Q就产生出监督位。 GI kQ 我们将Q的左边加上一个 k k 阶单位方阵,就构成一个矩阵 G 1 1 1 0 (21) 0 1 1 1 10001 01001 00101 00010 7 / 31 G称为生成矩阵( generator matrix ),因为由它可产生整个码组,即有 a6a5a4a3a2a1a0a6a5a4a3 GA( 22) 因此,如果找到了码的生成矩阵 G,则编码的方法就完全
19、确定。具有 I kQ 形式的生成矩 阵称为典型生成矩阵。由典型生成矩阵得出的码组 A 中,信息位不变,监督位附加于其后, 这种码称为系统码。 与 H 矩阵相似,也要求 G矩阵的各行是线性无关的。因为由式( 22)可以看出,任一码 组 A 都是 G的各行的线性组合。 G共有 K 行,若它们线性无关,则可组合出 2k 种不同的码组 A,它恰是有 k 为信息位的全部码组;若 G 的各行有线性相关的,则不可能由 G 生成 2k 种不 同码组了。实际上, G 的各行本身就是一个码组。因此,如果已有 k 个线性无关的码组,则 可以用其作为生成矩阵 G,并由它生成其余的码组。 三、汉明码纠错检错 3.1 汉
20、明距离 两个码字之间, 对应位取之不同的个数, 称为汉明距离,用d 表示。一个码的最小距离 dmin 定义为d min mind(ci,cj), i j ,ci.cj (n,k) ,两个码字之间的距离表示了它们之间差 别的大小。 3.2 汉明码纠错原理 一般来说接收码组与 A不一定相同。若设接收码组为一 n 列的行矩阵 B,即 B b6 b5 b4 b3 b2 b1 b0( 23) 则发送码组和接收码组之差为 B A E( 24) 8 / 31 E就是传输中产生的错码行矩阵 E e6 e5 e4 e3 e2 e1 e0(25) 若e1 0 ,表示接收码元无错误,若 e1 1 ,则表示该接收码元
21、有错。式( 24)可改写 成 B A E( 26) 若 E=0,即接收码组无错 , 则 B A E A,将它代人式( 8),该是仍成立,即有 B HT 0( 27) 当接收码组有错时, E 0,将 B带入式( 26)后,该式不一定成立。在未超过检错能 力时,式( 27)不成立。假设此时式( 26)的右端为 S, 即 B HT S( 28) 将 B A E代入式( 28),可得 S (A E)HT A HT E HT 由式( 8)可知,所以S E HT(29 ) 此处 S与前面的 s 1s 2s 3有着一一对应关系,则 S能代表错码位置。 因此,纠错原理即,接收端收到码组后按式( 28)计算出
22、S,再根据表 1 判断错码情况, 进行差错纠正。 四、汉明码编译码的实现过程 4.1 编码过程 由H 与 G的分块表示的矩阵形式 H P: In k (31) P QT ( 32) Q PT( 33) G I k : Q(34) 则有 G HT 0 或 H GT 0( 35) 已知生成矩阵 : 9 / 31 1000111 0100110 G 0010101 0001011 根据以上几式可求出监督矩阵 : 1110100 H 1 1 0 1 0 1 0 (36) 1011001 最后可以根据输入的四位信息位和生成矩阵相乘得到编码矩阵。即 C mG( 37) 所有的编码情况如表 1 所示。 4.
23、2 译码过程 对于译码过程来说,同样由上知道监督矩阵 H: 1110100 H 1 1 0 1 0 1 0 HT: 1011001 根据监督矩阵,将矩阵的行和列调换,可求出监督矩阵的转置矩阵 111 110 HT 101 011 100 010 001 再根据式( 28)即 B HT S求出伴随式,由伴随式式可以知道错码的位置及及纠正错码, 具体的错码位置如表 1 所示。纠正了接收码后可以提取出其中的四位信息位 . 10 / 31 五、软件设计及测试分析 5.1 程序流程图 5.1.1 主程序流程图 主程序一开始就有欢迎界面,并对该编译器做了简单的介绍,同时为方便用户使用,对 用户的操作也进行
24、了补充说明,接着给用户显示出了选择提示语句,可以选择编码器、译码 器、退出。当用户做出选择后便会进入各自的子程序,执行相应的功能,如果用户输入错误, 还会给出错误提示。主程序的流程图如图 3 所示。 图2 主程序流程图 5.1.2 编码程序流程图 在程序进入编码子程序时,它首先提示用户输入需要编码的码组个数,根据用户选择的个数 接着要求用户输入编码的信息码组,信息码组与生成矩阵相乘便会得到相应的编码,其流程 图如图 4 所示 开始 11 / 31 把生成矩阵赋给一个11 / 31 二维数组 G 图 3 编码程序流程图 5.1.3译码程序流程图 对于译码程序,因为信息在传输过程中会遇到噪声干扰,
25、所以接收码组会出现错码、丢 码或多码现象。 又因为很难判断丢码或多码的具体位置, 所以这两种情况处理起来比较复杂, 在这暂不进行译码,只做出判断。对于错码,可以纠正一位错误,发现两位错误。 在译码的过程中,要用到监督矩阵的转置矩阵,所以先求生成矩阵对应的监督矩阵,再进行 转置,然后提示输入接收码组,输入的接收码组中有可能丢失码位,故而先判断,再进行纠 检错,输出正确的码组,最后提取出正确的信息组。其流程图如图5 所示。 开始 根据生成矩阵求监督矩阵12 / 31 H 输出监督矩阵 H 图 4 译码程序流程图 13 / 31 5.2 软件运行分析 5.2.1 主程序运行分析 图 5 主界面运行图
26、 从程序一开始就运行主界面,主界面有对该软件的简单介绍,接着就给出了选择功能。 用户输入不同的序号可以执行不同的功能, 主界面仿真结果如图 5 所示。输入“ 1”后按回车 键执行编码功能,如图 6所示;输入“ 2”后按回车键执行译码功能, 如图 7所示;输入“ 3” 后按回车键执行退出如图 8 所示;输入其它系统会显示错误提示信息,如图 9所示。 图6 选择编码功能 14 / 31 图7 选择译码功能 图8 执行退出功能 图 9 输入错误时错误提示 15 / 31 5.2.2 编码运行分析 执行编码程序时,为了满足用户的不同需求,可以先输入用户需要的编码的信息组数, 再根据用户输入的信息组数决
27、定输入信息码的多少,输入完按回车键就完成了一次编码。例 如用户一次需要对连续的四个四位信息组进行编码,信息组为 ( 1011010100011001),根据表 2 可知,编码后的结果为 ( 101100101010010001011100110)0,仿真过程如图 10 和图 11 所示。 图 10 输入信息组数后系统界面 图 11 编码后的系统界面 16 / 31由运行的界面可知,软件还可以持续操作,当用户再做出选择,可以执行相应的功能,整个 体系就是按照这个思想联系在一起的。 5.2.3 译码运行分析 对于信道编码程序而言,由于信道干扰,接收码组的长度不一,当接收码组中出现丢码 时,系统会给
28、出提示,对这种情况系统无法译码只给出提示要求重新输入,例如输入 (01100011101112),2 作为输入的结束标志, 因为信息码组只有十三位, 传输过程丢了一位, 系统会给出提示,如图 12 所示;如果接收码组没有丢码,系统可以纠正一位错码,发现两位 错码,例如输入上面编码后的 4 个接收码组,并故意输错第二个码组的 a1位和第四个码组的 a0 位和 a1位,即输入( 10110010101111000101110011112)(2 为结束标志),以验证系统运行的 正确性。运行界面如图 13 所示。为了体现软件的持续操作,我们从编码结束后再选择译码。 图 12 输入有丢码的接收码组时系统
29、运行界面 17 / 31 图 13 译码运行界面 5.3 软件分析 根据软件运行情况分析来看,该软件最终实现的功能有: (1)对数量不等的信息组编码; (2)对数量不等的接收码组纠正一位错误,发现两位错误; (3)对输入的接收码组判断是否有丢码; (4)循环使用编码器和译码器; (5)对操作失误做出提示。 与最初的设计目标相比,该软件的不足方面有: (1)使用编码器的时候,如果输入有误,系统没有给出明确提示; (2)当接收码组中有丢失位时,不能译码; (3)显示界面不够人性化。 总之,软件在可靠性方面已做出验证,达到了要求。 C 语言比起其它语言要难学,更稳 定,C 程序的稳定性就证明了该软件
30、具有很好的稳定性。实用性方面,由于该软件只对四位 信息组编码,编码后有七位;对七位接收码组译码,提取信息位后是四位。其它码并不适应 该软件,所以它的适用范围受到了限制。 总结 18 / 31 通过这次为期两周的计算机通信课程设计, 我的题目是(7,4 )汉明码的编译码软件设计 汉明码是差错控制编码的重要一种。汉明码的编码与译码纠错能力较强,是实际应用中比较 流行的差错控制编码方法之一。 虽然课设刚开始我就要去实习,但是每天晚上回到宿舍我就开始做课设,因从我很及时 的完成了课设,在这期间我查阅了许多的书籍以及网上的资料,通过这次课设,巩固了以前 所学过的知识,而且学到了很多在书本上所没有学到过的
31、知识。通过这次课程设计使我懂得 了理论与实际相结合的必要性,只有理论知识是远远不够的,只有把所学的理论知识与实践 相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独 立思考的能力。 在设计中也得到很多见识,获得或理解知识时的欣喜与在一个问题上的纠结都是很宝贵 的,在这种情绪的反复中,认识到学习就是这样一个过程。不管过程怎样,以小见大的反射 出以后学习的态度。互相交流可以加深学习,找出问题,相互弥补不足,在资料的采集方面 提高了不少效率,也提高的每个个体的兴奋度,真切体会集体学习给我们带来的益处,学习 是快乐的。 这次课程设计带给我的不仅仅是学识上的精进还有个人能力
32、素养的提升,也督促培养了个人 独立思考、善于查阅并应用相关资料书籍的能力。经过这次课程设计,我收获很多。我会在 以后的学习生活中继续保持这种求真务实的精神,努力学好理论知识,更好的为实践服务。 参考文献 1 潘新民编计算机通信技术电子工业出版社 2003, 7 2 吴玲达、李国辉、杨冰等编计算机通信原理与技术国防科技大学出版社2003, 3 3 曹志刚、钱压生编现代通信原理清华大学出版社 1992, 2 4 樊昌兴、通信原理 1 孙丽华编信息论与纠错编码电子工业出版社 2005, 3 编国 防工业出版社 1999,10 5 唐朝京著信息论与编码基础国防科技大学出版社 2003, 1 6 宋祖顺
33、著现代通信原理 M 电子工业出版 2001,2 7 傅祖芸著信息论 - 基础理论与应用 M 电子工业出版社 2002 8 谭浩强著 C程序设计(第二版) 清华大学出版社 1999,12 9 王连相著 C/C+程序设计教程中国铁道出版社 2006, 8 19 / 31 附录 ( 7,4 )码编译器整体程序: #include #include int main() /*G :生成矩阵 H :监督矩阵 HT :监督矩阵对应的转置矩阵 */ /*M:输入信息序列 C :编码输出序列 Input :输入接收码序列 B :译码输出序列 S : 伴随式 */ int Q,N 。/* 定义开始*/ int
34、i,j,s,r,k,t,p,u,m。 intG47=1,0,0,0,1,1,1,0,1,0,0,1,1,0,0,0,1,0,1,0,1, 0,0,0,1,0,1,1 。 int IR33=1,0,0,0,1,0,0,0,1。 intH37,C107,M104,B207,Input100,HT73,P10, S1003 。/* 定义结束 */ printf(n 您好!欢迎使用汉明码编译器! n) 。 printf(nn本编译器针对( 7,4)码,所采用的生成矩阵 G=n) 。 for(i=0 。i4 。 i+) for(j=0 。 j7 。j+) printf( %d,Gij) 。 printf
35、(n) 。 printf( 编译码过程都是针对二进制码组,除了系统要求选择功能,其他情况下禁止输 入除 0,1 以外的数。请在使用的过程中严格按照编译器要求的格式输入数据。nn) 。 printf( 现在请输入您所选择的编译器所对应的序号 , 按回车键继续 :n) 。 printf(n1. 编码器 2. 译码器 3. 退出 n) 。 printf(n 我选择: ) 。 scanf(%d,&Q) 。 if(Q=0) 20 / 31 Q+=4。 while(Q) if(Q=1|Q=2|Q=3)break 。 else printf( 对不起,您输入有误,请重新输入 ) 。 scanf(%d,&Q)
36、 。 while(Q=1|Q=2|Q=3) if(Q=1)/* 编码程序 */ printf(n 请输入您需要编码的信息组数 ) 。 scanf(%d,&N) 。 , 码组间用空格分 /* 求监督码 */ printf(nn 请输入您需要编码的 %d组四位二进制信息组 开,按回车键确认。 n,N) 。/* 输入信息码 */ printf(n 信息组 m=)。 for(i=0 。iN。 i+) scanf(%1d%1d%1d%1d,&Mi3,&Mi2,&Mi1,&Mi0) for(i=0 。iN。 i+) Ci2=Mi3Mi2Mi1。 Ci1=Mi3Mi2Mi0。 Ci0=Mi3Mi1Mi0。
37、for(j=0 。j2 。i-)/* 输出编码结果 */ Cji=Mji-3 。 printf(n 您所输入的信息组编码结果 c=) 。 for(j=0 。j=0 。i-) 21 / 31 printf(%d,Cji) 。 printf(nn) 。 printf(n 接下来您想: nn) 。/* 选择功能 */ printf(1. 用编码器 2. 用译码器 3. 退出 nn) 。 printf( 我想: ) 。 scanf(%d,&Q) 。 else if(Q=2)/* 译码程序 */ for(i=0 。i3 。 i+)/* 求监督矩阵 */ for(j=0 。 j4 。j+) Hij=Gji
38、+4 。 for(j=4 。 j7 。j+) Hij=IRij-4 。 printf(n 监督矩阵 H=n) 。/* 输出监督矩阵 */ for(i=0 。i3 。 i+) for(j=0 。 j7 。j+) printf( %d,Hij) 。 printf(n) 。 t=1 。 while(t!=2)/* 输入接收码组 */ p=1。 printf(n 请输入总位数为 7 的倍数的接收码组 , 每位用空格隔开, 每组 位数为 7 的倍数 , 以十进制 2 作为结束标志 ! 按回车键确认 n) 。 while(p) for(i=0 i+) 22 / 31 scanf(%d,&Inputi) 。
39、 if(Inputi=2)break 。 k=i%7。 if(k=0)p=0 。t=2 。 else p=1。 k=-k+7 。 printf( 您接收到的码组丢失了 %d位, 系统不能判断丢失位的具 体位置,请重新输入 n,k) 。 u=i/7 。 i=0 。 for(r=0 。r=0 。j-,i+) Brj=Inputi 。 printf(n 将接收码组每七位分为一个码组,如下: n) 。 for(i=0 。 iu 。i+) for(j=0 。 j7 。 j+) printf( %1d,Bi6-j) 。 printf(n) 。 for(i=0 。i3 。i+)/* 求监督矩阵 H的转置矩阵
40、 */ for(j=0 。 j7 。j+) HTji=Hij 。 for(i=0 。 iu 。i+) 23 / 31 for(m=0 。m3。m+) for(j=0 。 j7 。 j+) s+=(Bi6-j*HTjm) 。 if (s%2=1)s=1 。 else s=0。 Si2-m=s 。 s=0。 printf(nn伴随式 S=n) 。/* 输出伴随式 */ for(j=0 。j=0 。i-) printf( %1d,Sji) 。 printf(n) 。 printf(n) 。 for(i=0 。i=0 。j-) printf(%1d,Bij) 。 printf( 请您再次确认! ) 。 24 / 31 ,+i) 。 ,+i) 。 printf( 译出的信息序列为: ) 。 for(j=6 。 j2 。 j-) printf(%d,Bij)。break 。 case 2: Bi0=1Bi0 。 printf(nn 您接收的第 %d 个码组有错误,正确的码组应为: i- 。 for(j=6 。j=0 。j-) printf(%1d,Bij) 。 printf( 译出的信息序列为: ) 。 for(j=6 。 j2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025综合物流服务合同范本
- 2025届高三数学“8+3+3”小题期末专项练(10)复数与平面向量(新高考地区专用)解析版
- 2025赠与合同协议书范本
- 2025租赁合同终止的方法
- 2025年农科院作物学笔试题
- 2025年牙科综合治疗机合作协议书
- 2025年高、低能校正磁铁项目合作计划书
- 2025年麻疹、风疹、腮腺炎联合疫苗合作协议书
- 2025年金融担保服务项目合作计划书
- 2025年碳纤维预浸布项目合作计划书
- 实验室设备维护与保养试题及答案
- 2024年铁总服务有限公司招聘笔试真题
- 运动素质知到课后答案智慧树章节测试答案2025年春浙江大学
- 【MOOC】工程伦理导论-浙江大学 中国大学慕课MOOC答案
- DL-T5024-2020电力工程地基处理技术规程
- 2024年上海市普通高中学业水平等级性考试化学试卷(含答案)
- 离合器-汽车毕业设计-设计说明书
- 中国民间美术年画-完整版PPT
- 2022年《趣味接力跑》教案
- 级配碎石旁站监理记录表.模板
- 国电南自PSL 641U线路保护测控装置技术说明书V1.1
评论
0/150
提交评论