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

📄 gallager ldpc.c

📁 Gallager LDPC码构造法
💻 C
字号:
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
#define print printf("\n");
main()
{
 int H[40][40]={0};
 int a[40]={0};
 int miu,rou,n,lumda;
 int ok=0,i,j,k,t;
 int generate_rand_number();
 randomize();
 printf("please input the n (n variable nodes):");
 scanf("%d",&n);
 print
 printf("please input the lumda (column weight):");
 scanf("%d",&lumda);
 print
 printf("please input the miu (H0 array<the number of row>):");
 scanf("%d",&miu);
 print
 printf("please input the rou (row weight):");
 scanf("%d",&rou);
 print

    for(;ok!=1;)
       {                                   /*判断H0是否符合miu miu*rou*/
         if(n/miu-rou==0)
            break;
            printf("It is not right of the miu and the rou!(miu*rou=n)\n");
         printf("please input the miu:");
         scanf("%d",&miu);
         print
         printf("please input the rou:");
         scanf("%d",&rou);
         print
       }


    for(i=0;i<miu;i++)                      /*H0矩阵*/
      {
           k=i*rou;
        for(j=0;j<(i*rou+rou);j++)
          {
            if(j==k)
                {
                  H[i][j]=1;
                    k++;
                }
          }

       }
   

    //for(i=0;i<n;i++)                    /*产生n个数*/
       // {
       //   a[i]=i;
       //   printf("%d ",a[i]);
       // }
    //print
    //print
    //generate_rand_number(a,n);

    //for(i=0;i<n;i++)
        //printf("%d ",a[i]);
    //print
    //getch();

    for(k=1;k<lumda;k++)
      {
         for(i=0;i<n;i++)                    /*产生n个数*/
        {
          a[i]=i;
          printf("%d ",a[i]);
        }
        print

         generate_rand_number(a,n);
         for(j=0;j<n;j++)
           for(i=0;i<miu;i++)
             {
               t=a[j];
               H[i+miu*k][j]=H[i][t];
             }

             for(i=0;i<miu*lumda;i++)               /*显示结果*/
                for(j=0;j<n;j++)
                   {
                     printf("%d ",H[i][j]);
                     if(j==n-1) print

                   }
         generate_rand_number(a,n);    /*产生n个随机数,并交换它们的下标,以产生,n个不重复的随机数*/
         print
       }

     
     getch();
}

int generate_rand_number(int b[],int m)       /*产生随机数,原理,在n个数挑任何两个交换*/
{
 int i,t,swap,number=999,j;
 randomize();
   for(j=0;j<number;j++)
    for(i=0;i<m;i++)
        {
        t=rand()%m;
        swap=b[i];
        b[i]=b[t];
        b[t]=swap;
        //printf("t=%d swap=%d b[%d]=%d b[%d]=%d\n",t,swap,i,b[i],t,b[t]);
        }
  //for(i=0;i<m;i++)
    //printf("%d ",b[i]);
    //printf("\n");
  //getch();
 return(0);
} 

⌨️ 快捷键说明

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