Hamming(7,4)编译码器
来源:互联网 发布:p2p运营模式数据图表 编辑:程序博客网 时间:2024/06/04 17:47
- 实验目的
加深理解Hamming(7,4)码的编码方法和抗干扰性能。
通过编程实现Hamming(7,4)码的编码算法,进一步掌握按位二进制加法的实现原理。 实验要求
输入:长度为4的任意二进制序列。
输出:输入数据经Hamming(7,4)编码器编码之后,通过二元对称信道模拟器(另一篇博客)(错误概率为0.1)传输后,再经过Hamming(7,4)译码器译码输出得到信宿端的长度为4的二进制序列。代码
- HammingUtil
package com.tanrong.hamming;/** * Created by tanrong.ltr on 16/6/18. */public class HammingUtil { /** * 根据传入的4位二进制序列算出7位汉明码 * 其中前三位为信息码 后三位为监督码 * @param d * @return */ public static int[] encode(int[] d){ if (d.length!=4){ return new int[4]; } // 根据四位信息码算出三位监督码 int p1 = d[0] ^ d[1] ^ d[3]; int p2 = d[0] ^ d[2] ^ d[3]; int p3 = d[1] ^ d[2] ^ d[3]; int[] results=new int[7]; results[0]=d[0]; results[1]=d[1]; results[2]=d[2]; results[3]=d[3]; results[4]=p1; results[5]=p2; results[6]=p3; return results; } /** * 根据传入的7位汉明码算出2进制序列 * * 其中后三位为监督码 * @param d * @return */ public static int[] decode(int[] d){ if (d.length!=7){ return new int[4]; } int c1 = d[4] ^ d[0] ^ d[1] ^ d[3]; int c2 = d[5] ^ d[0] ^ d[2] ^ d[3]; int c3 = d[6] ^ d[1] ^ d[2] ^ d[3]; if (c1 + c2 + c3 == 3) d[3] = 1 ^ d[3]; else if (c1 + c2 == 2) d[0] = 1 ^ d[0]; else if (c1 + c3 == 2) d[1] = 1 ^ d[1]; else if (c2 + c3 == 2) d[2] = 1 ^ d[2]; int[] results=new int[4]; results[0]=d[0]; results[1]=d[1]; results[2]=d[2]; results[3]=d[3]; return results; } /*** * 返回四位的16进制编码 * @param s * @return */ public static int fromHex(String s) { return Integer.parseInt(s, 16) & 0xFFFF; }}
- Main
package com.tanrong.hamming;import com.tanrong.channelCapacity.BSC;import java.util.Scanner;/** * Created by tanrong.ltr on 16/6/18. * */public class Main { private static final double errorProbability=0.1; public static void main(String[] args){ Scanner sc = new Scanner(System.in); System.out.println("请输入长度为4的二进制序列,以空格隔开"); int d[] = new int[4]; for (int i = 0; i < 4; i++) { d[i] = HammingUtil.fromHex(sc.next()); } int[] encodeData=HammingUtil.encode(d); println("编码后",encodeData); BSC bsc=new BSC(errorProbability); int[] transmitedData=bsc.send(encodeData); println("BSC传输后",transmitedData); int[] decodeData=HammingUtil.decode(transmitedData); println("解码结果",decodeData); } private static void println(String message,int[] data){ System.out.println(message); for (int i:data){ System.out.printf(i+" "); } System.out.println(); }}
- BSC
package com.tanrong.channelCapacity;/** * Created by tanrong.ltr on 16/6/18. * https://github.com/chsasank/LDPC-Codes/blob/master/src/ldpc/BSC.java *//** * BSC信道模拟器,当随机数小于错误发生概率时会发生传输错误 */public class BSC { double errorProbability; /** * 设置BSC的错误发生概率 * @param f */ public BSC(double f){ errorProbability = f; } /** * 经BSC传输信号,返回传输后的值 * @param data * @return */ public int[] send(int[] data){ boolean [] x=int2boolean(data); for(int i = 0; i<x.length;i++) if(Math.random()<errorProbability){ x[i] = !x[i]; } return boolean2int(x); } /** * 将Boolean型数组转为整形 * @param data * @return */ private boolean[] int2boolean(int[] data){ boolean [] x=new boolean[data.length]; for (int i = 0; i < data.length; i++) { x[i] = data[i] != 0; } return x; } /** * 将int型数组转为boolean型 * @param data * @return */ private int[] boolean2int(boolean[] data){ int[] x=new int[data.length]; for (int i = 0; i < data.length; i++) { x[i]=data[i]?1:0; } return x; }}
运行结果
0 0
- Hamming(7,4)编译码器
- Hamming(7,4)编译码器
- C++ 实现Huffman编译码器
- 数据结构实习Huffman编译码器(二)
- 4-16译码器
- 译码器
- 译码器
- 数据结构实习之Huffman编译码器(一)
- 数据结构实习之Huffman编译码器(三)
- Verilog 编程实验(4)-7位译码器的设计与实现
- 拼接4-16进制译码器
- FPGA作业3.1:例化2-4译码器
- VHDL实现4线-16线译码器
- hamming
- hamming
- HAMMING
- 2-2 Verilog 7 段译码器(静态显示)
- 2-3 Verilog 7 段译码器(动态显示)
- 结构体字节对齐
- C与lua交互
- 通联量化的公开课
- nginx内置预定义变量
- Hibernate深入学习(一):实体映射文件中的package,auto-import,dynamic-insert,dynamic-update用法
- Hamming(7,4)编译码器
- Java - PAT - 1008. 数组元素循环右移问题 (20)
- 对控件响应事件的四种写法
- TCP/IP网络编程之四书五经
- 直写与回写
- Program4_I
- 快速排序的简洁写法
- 自定义连接池
- CoreText 实现图文混排