#include #include #include #include #include #define MAX_RANDOM 2147483647 // Maximum value of random() #define NODES 18432 // Maximum of number of code/check nodes #define J 11 // Maximum degree of bit nodes #define K 8 // Maximum degree of check nodes int max_size_M; int max_size_N; int n; // length int k; // dimension int nk; // redundancy float rate; // code rate int M,N; // Size of parity-check matrix // --------------- // NODE STRUCTURES // --------------- struct parent_node { int size; int index[J]; // indexes of children }; struct child_node { int size; int index[K]; // indexes of parents }; struct parent_node code_node[NODES]; struct child_node check_node[NODES]; double init_snr, final_snr, snr_increment; double sim, num_sim, ber, fer, ber_rand, amp, tmp; int error; int data_int; int i,j, i2a, j2a, i3a, j3a, i4a, j4a, i5a, j5a, i6a, j6a, i7a, j7a, i8a, j8a, i2b, j2b, i3b, j3b, i4b, j4b, i5b, j5b, i6b, j6b, i7b, j7b, i8b, j8b, l, pa, qa, ta, ua, va, wa, pb, qb, tb, ub, vb, wb, i2, i3, j2, j3, pause; int max_cycle, nb_cycle[100]; char filename[40]; FILE *fp; // ----------- Functions declaration ------------------- double max(double x,double y); double min(double x,double y); // ----------- End of functions declaration ------------------------- main(int argc, char *argv[]) { // Command line processing if (argc != 5) { printf("Usage: %s length(n) dimension(k) file_parity-check cycle_max_length\n", argv[0]); exit(0); } sscanf(argv[1],"%d", &n); sscanf(argv[2],"%d", &k); sscanf(argv[3],"%s", filename); sscanf(argv[4],"%d", &max_cycle); nk = n-k; rate = (float) k / (float) n; max_cycle = min(10,2*(int)(max_cycle/2)); printf("CYCLE ENCOUNTER FOR BINARY SPARSE MATRIX\n"); printf("Cycles length counter up %d\n", max_cycle); printf("\nn=%d, k=%d, n-k=%d, and rate = %lf\n\n",n,k,nk,rate); if ((fp = fopen(filename,"r")) != NULL) { fscanf(fp, "%d %d", &N, &M); fscanf(fp, "%d %d", &max_size_N, &max_size_M); for (i=0; i=4){ for (pb=0;pb=6){ for (ta=0;ta=8){ for (ua=0;ua=10){ for (va=0;vay) maximum = x; return(maximum); } double min(double x,double y) { double minimum; minimum = y; if (x