29 unsigned int seed,
unsigned int extend_rows)
35 if ( ! ( k > 0 && m > 0 && column_weight > 0 && (random > 0 || rfc > 0) ) )
42 pc_matrix = (
char**)malloc(m*
sizeof(
char*));
43 for (
unsigned int i = 0; i < m; i++)
44 pc_matrix[i] = (
char*)calloc(k,
sizeof(
char));
51 for (
unsigned int i = 0; i < k; ++i ) {
52 for (
unsigned int j = 0; j < column_weight; ++j) {
53 pc_matrix[rand()%m][i] = 1;
71 for (
unsigned int i = m; i < m + extend_rows; i++ )
74 for (
unsigned int j = 1; j < k; j++)
76 if (pc_matrix[row][j - 1])
81 if (pc_matrix[row][k - 1])
92 for (
unsigned int i = 0; i < m; i++)
95 for (
unsigned int j = 0; j < k; j++)
112 pcm = (
int**)malloc(m*
sizeof(
int*));
113 for (
unsigned int i = 0; i < m; i++)
114 pcm[i] = (
int*)malloc((max_weight+2) *
sizeof(
int));
117 int columns = max_weight + 2;
119 for (
unsigned int i = 0; i < m; i++ )
121 for (
unsigned int j = 0; j < k; j++)
128 pcm[i][counter] = k + i;
133 pcm[i][counter] = k + i - 1;
137 if ( counter < columns )
138 for (
int j = counter; j < columns; j++)
154 out = fopen (fname,
"wb");
157 fprintf( out,
"%d ", k);
158 fprintf( out,
"%d ", m);
159 fprintf( out,
"%d\n", columns);
160 for (
unsigned int i = 0; i < m; i++)
162 for (
int j = 0; j < columns; j++)
165 tmp = fwrite(&t,
sizeof(
int), 1, out);
167 fprintf(stderr,
"Cannot write to output file!");
175 fprintf(stderr,
"Cannot open file for writing.");
219 for (
unsigned int i = 0; i < m; i++)
222 for (
unsigned int i = 0; i < m; i++)
int generate_ldgm_matrix(char *fname, unsigned int k, unsigned int m, unsigned int column_weight, unsigned int seed, unsigned int extend_rows)