?? 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 + -