⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hamming.cpp

📁 1.汉明编码的硬件实现vhdl语言 2.测试用
💻 CPP
字号:
//编写生成(7,4,3)的hamming码具有编码、译码功能的程序

//虽然学了一段时间的C,但是这是第一个自己完成的小程序,看来还是有点压力好啊!缺点是很明显的:1、全篇只用一个main,没有模块化,重用性差;2、不能处理不合法的输入,健壮性差。特点:能识别出错位置并纠错。


#include <iostream.h>
int main()
{
 cout<<"Please enter a code for send( 4 bit ): "<<endl; 
 int sendCode;
 cin>>sendCode;
 
 //产生code
 int code[4] = {0};
 code[0] = sendCode / 1000;
 int send1 = sendCode % 1000;
 code[1] = send1 / 100;
 int send2 = send1 % 100;
 code[2] = send2 / 10;
 code[3] = send2 % 10;

 //测试
 int i = 0;
 for( i = 0; i < 4; i++ ){
  cout<<code[i];
 }

 //产生校验矩阵
 int H[3][7] = {
  {0,0,0,1,1,1,1},
  {0,1,1,0,0,1,1},
  {1,0,1,0,1,0,1}};
 //产生生成矩阵
 int G[4][7] = {
  {1,1,0,1,0,0,1},
  {0,1,0,1,0,1,0},
  {1,0,0,1,1,0,0},
  {1,1,1,0,0,0,0}};

 int codeword[7] = {0};
 int errorcode[7] = {0};
  
 //产生发送码字
 int j = 0;
 cout<<"Your codeword for send is: ";
 for( j = 0; j < 7; j++ ){
  codeword[j] = (G[0][j]*code[0])^
       (G[1][j]*code[1])^
       (G[2][j]*code[2])^
       (G[3][j]*code[3]);
  cout<<codeword[j];
  errorcode[j] = codeword[j];
 }

 //给出出错位数,得到错误码
 cout<<" Please enter the error site: ";
 int errorSite;
 cin>>errorSite;
 errorcode[ errorSite - 1 ] = ( codeword[ errorSite - 1 ] + 1 ) % 2;
 cout<<" The error codeword is: " ;
 for( j = 0; j < 7; j++ ){
  cout<< errorcode[j] ;
 }

 //算出错误位并译码
 cout<< " The error site is: " ;
 int error_site[3] = {0};
 for( i = 0; i < 3; i++ ){
  error_site[i] = (H[i][0]*errorcode[0])^
      (H[i][1]*errorcode[1])^
      (H[i][2]*errorcode[2])^
      (H[i][3]*errorcode[3])^
      (H[i][4]*errorcode[4])^
      (H[i][5]*errorcode[5])^
      (H[i][6]*errorcode[6]);
  cout<<error_site[i];
 }

 errorSite = error_site[0] *4 + error_site[1] * 2 + error_site[2];
 cout<<errorSite;

 
 
 codeword[ errorSite - 1 ] = ( errorcode[ errorSite - 1 ] + 1 ) % 2;
 int correct_code[7] = {0};
 correct_code[0] = codeword[6];
 correct_code[1] = codeword[5];
 correct_code[2] = codeword[4];
 correct_code[3] = codeword[2];
 correct_code[4] = codeword[3];
 correct_code[5] = codeword[1];
 correct_code[6] = codeword[0];
 cout<< "The correct code is : " ;
 for( i = 0; i < 4; i++ ){
  cout<<correct_code[i];
 }
 cout<<" isn't it? " ;
 
 
 return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -