• 大小: 10KB
    文件类型: .cpp
    金币: 2
    下载: 1 次
    发布日期: 2021-06-13
  • 语言: C/C++
  • 标签: 编码  译码  C语言  

资源简介

汉明码的编码译码的C语言实现程序.此程序是基于C语言对线性分组码中的汉明码的程序实现

资源截图

代码片段和文件信息

# include “stdio.h“
# include “time.h“
# include “stdlib.h“
# define A 4000
# define M 4
# define N 7

/*****************************************************************************************************************/
// 该函数是初始化函数
// 作用:随机产生信源,并将信源存放到数组b中,初始化数组e,使它的初值是0
// 入口参数:bb(信源)ee(陪首集)
// 出口参数:k1(代表信源个数)
/*****************************************************************************************************************/

int init(int bb[A/M][M]int ee[A/M][N])                   
{
int i=0jk1;
printf(“\n 随机产生%d个二元(%d%d)汉明码的信源:“A/4NM); 
    srand( (unsigned)time( NULL ) ); 
    for( i = 0; i < A/4; i++ )
       for( j = 0; j < M; j++ )
          { 
           bb[i][j]=rand()%2;
          }
    for(i=0;i    for(j=0;j ee[i][j]=0;
k1=A/4;
return k1;
}

/*****************************************************************************************************************/
// 该函数是输出函数
// 作用:输出生成矩阵
// 入口参数:g(生成矩阵)
// 出口参数:没有
/*****************************************************************************************************************/

void print1(int g[M][N])           
{
int ij;
printf(“\n 生成矩阵是:\n             “);
for(i=0;i {
for(j=0;j printf(“%d “g[i][j]);
printf(“\n             “);
}
}

/*****************************************************************************************************************/
// 该函数是输出函数
// 输出校验矩阵
// 入口参数:h(校验矩阵)
// 出口参数:没有
/*****************************************************************************************************************/

void print2(int h[N-M][N])       
{
int ij;
printf(“\n 校验矩阵是:\n             “);
for(i=0;i {
for(j=0;j printf(“%d “h[i][j]);
printf(“\n             “);
}
}

/*****************************************************************************************************************/
// 该函数是求码字函数
// 作用:求出要传输的的码字
// 入口参数:n(信源个数)gg(生成矩阵)cc(信源生成的码字)bb(信源)
// 出口参数:没有
/*****************************************************************************************************************/

void SYard(int nint gg[M][N]int cc[M][N]int bb[A/M][M])   
{
int ijkt;
for(i=0;i {
for(j=0;j {
t=0;
for(k=0;k t+=bb[i][k]*gg[k][j];
cc[i][j]=t%2;     // %2是为了让它们之和小于2
}
}
}

/*****************************************************************************************************************/
// 该函数是模拟信道函数
// 作用:改变要传输的码字,
//  咐:码字经过该信道后,不产生错误的概率是70%产生一位错误的概率是21%,两位错误的概率是6%,三位错误的概率是3%
// 入口参数:n(信源个数)rr(接收到的码字)cc(发送的码字)
// 出口参数:q(产生一位随机错误的码字个数)
/*****************************************************************************************************************/

int Channel(int nint rr[A/M][N]int cc[A/M][N])  
{
int aijka1a2a3q=0;  // k代表经过信道后码字会错几位a1,a2,a3表示具体的错误位置
srand( (unsigned)time( NULL ) );
for(i=0;i {   
a=r

评论

共有 条评论