aboutsummaryrefslogtreecommitdiff
path: root/src/ldpc_enc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ldpc_enc.c')
-rw-r--r--src/ldpc_enc.c246
1 files changed, 128 insertions, 118 deletions
diff --git a/src/ldpc_enc.c b/src/ldpc_enc.c
index 3652a6a..b9eba46 100644
--- a/src/ldpc_enc.c
+++ b/src/ldpc_enc.c
@@ -1,4 +1,4 @@
-/*
+/*
FILE...: ldpc_enc.c
AUTHOR.: Bill Cowley, David Rowe
CREATED: Sep 2016
@@ -7,140 +7,150 @@
LDPC codes.
*/
+#include <errno.h>
+#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
-#include <stdint.h>
#include <string.h>
-#include <errno.h>
-#include "mpdecode_core.h"
#include "ldpc_codes.h"
+#include "mpdecode_core.h"
#include "ofdm_internal.h"
int opt_exists(char *argv[], int argc, char opt[]) {
- int i;
- for (i=0; i<argc; i++) {
- if (strcmp(argv[i], opt) == 0) {
- return i;
- }
+ int i;
+ for (i = 0; i < argc; i++) {
+ if (strcmp(argv[i], opt) == 0) {
+ return i;
}
- return 0;
+ }
+ return 0;
}
-int main(int argc, char *argv[])
-{
- FILE *fin, *fout;
- int arg, sd, i, frames, codename, testframes, Nframes, data_bits_per_frame, parity_bits_per_frame;
- struct LDPC ldpc;
- int unused_data_bits;
-
- if (argc < 2) {
- fprintf(stderr, "\n");
- fprintf(stderr, "usage: %s InputOneBytePerBit OutputFile [--sd] [--code CodeName] [--testframes Nframes] [--unused numUnusedDataBits]\n", argv[0]);
- fprintf(stderr, "\n");
- fprintf(stderr, "usage: %s --listcodes\n\n", argv[0]);
- fprintf(stderr, " List supported codes (more can be added via using Octave ldpc scripts)\n");
- fprintf(stderr, "\n");
- exit(0);
- }
-
- /* todo: put this in a function file to share with ldpc_dec.c */
-
- if ((codename = opt_exists(argv, argc, "--listcodes")) != 0) {
- ldpc_codes_list();
- exit(0);
- }
-
- /* set up LDPC code */
-
- int code_index = 0;
- if ((codename = opt_exists(argv, argc, "--code")) != 0)
- code_index = ldpc_codes_find(argv[codename+1]);
- memcpy(&ldpc,&ldpc_codes[code_index],sizeof(struct LDPC));
- fprintf(stderr, "Using: %s\n", ldpc.name);
-
- data_bits_per_frame = ldpc.NumberRowsHcols;
- parity_bits_per_frame = ldpc.NumberParityBits;
-
- unsigned char ibits[data_bits_per_frame];
- unsigned char pbits[parity_bits_per_frame];
- float sdout[data_bits_per_frame+parity_bits_per_frame];
-
- if (strcmp(argv[1], "-") == 0) fin = stdin;
- else if ( (fin = fopen(argv[1],"rb")) == NULL ) {
- fprintf(stderr, "Error opening input bit file: %s: %s.\n",
- argv[1], strerror(errno));
- exit(1);
- }
-
- if (strcmp(argv[2], "-") == 0) fout = stdout;
- else if ( (fout = fopen(argv[2],"wb")) == NULL ) {
- fprintf(stderr, "Error opening output bit file: %s: %s.\n",
- argv[2], strerror(errno));
- exit(1);
- }
-
- sd = 0;
- if (opt_exists(argv, argc, "--sd")) {
- sd = 1;
- }
-
- unused_data_bits = 0;
- if ((arg = opt_exists(argv, argc, "--unused"))) {
- unused_data_bits = atoi(argv[arg+1]);
+int main(int argc, char *argv[]) {
+ FILE *fin, *fout;
+ int arg, sd, i, frames, codename, testframes, Nframes, data_bits_per_frame,
+ parity_bits_per_frame;
+ struct LDPC ldpc;
+ int unused_data_bits;
+
+ if (argc < 2) {
+ fprintf(stderr, "\n");
+ fprintf(stderr,
+ "usage: %s InputOneBytePerBit OutputFile [--sd] [--code CodeName] "
+ "[--testframes Nframes] [--unused numUnusedDataBits]\n",
+ argv[0]);
+ fprintf(stderr, "\n");
+ fprintf(stderr, "usage: %s --listcodes\n\n", argv[0]);
+ fprintf(stderr,
+ " List supported codes (more can be added via using Octave ldpc "
+ "scripts)\n");
+ fprintf(stderr, "\n");
+ exit(0);
+ }
+
+ /* todo: put this in a function file to share with ldpc_dec.c */
+
+ if ((codename = opt_exists(argv, argc, "--listcodes")) != 0) {
+ ldpc_codes_list();
+ exit(0);
+ }
+
+ /* set up LDPC code */
+
+ int code_index = 0;
+ if ((codename = opt_exists(argv, argc, "--code")) != 0)
+ code_index = ldpc_codes_find(argv[codename + 1]);
+ memcpy(&ldpc, &ldpc_codes[code_index], sizeof(struct LDPC));
+ fprintf(stderr, "Using: %s\n", ldpc.name);
+
+ data_bits_per_frame = ldpc.NumberRowsHcols;
+ parity_bits_per_frame = ldpc.NumberParityBits;
+
+ unsigned char ibits[data_bits_per_frame];
+ unsigned char pbits[parity_bits_per_frame];
+ float sdout[data_bits_per_frame + parity_bits_per_frame];
+
+ if (strcmp(argv[1], "-") == 0)
+ fin = stdin;
+ else if ((fin = fopen(argv[1], "rb")) == NULL) {
+ fprintf(stderr, "Error opening input bit file: %s: %s.\n", argv[1],
+ strerror(errno));
+ exit(1);
+ }
+
+ if (strcmp(argv[2], "-") == 0)
+ fout = stdout;
+ else if ((fout = fopen(argv[2], "wb")) == NULL) {
+ fprintf(stderr, "Error opening output bit file: %s: %s.\n", argv[2],
+ strerror(errno));
+ exit(1);
+ }
+
+ sd = 0;
+ if (opt_exists(argv, argc, "--sd")) {
+ sd = 1;
+ }
+
+ unused_data_bits = 0;
+ if ((arg = opt_exists(argv, argc, "--unused"))) {
+ unused_data_bits = atoi(argv[arg + 1]);
+ }
+
+ testframes = Nframes = 0;
+
+ if ((arg = (opt_exists(argv, argc, "--testframes")))) {
+ testframes = 1;
+ Nframes = atoi(argv[arg + 1]);
+ fprintf(stderr, "Nframes: %d\n", Nframes);
+ }
+
+ frames = 0;
+ int written = 0;
+
+ while (fread(ibits, sizeof(char), data_bits_per_frame, fin) ==
+ data_bits_per_frame) {
+ if (testframes) {
+ uint16_t r[data_bits_per_frame];
+ ofdm_rand(r, data_bits_per_frame);
+
+ for (i = 0; i < data_bits_per_frame - unused_data_bits; i++) {
+ ibits[i] = r[i] > 16384;
+ }
+ for (i = data_bits_per_frame - unused_data_bits; i < data_bits_per_frame;
+ i++) {
+ ibits[i] = 1;
+ }
}
-
- testframes = Nframes = 0;
- if ((arg = (opt_exists(argv, argc, "--testframes")))) {
- testframes = 1;
- Nframes = atoi(argv[arg+1]);
- fprintf(stderr, "Nframes: %d\n", Nframes);
+ encode(&ldpc, ibits, pbits);
+
+ if (sd) {
+ /* map to BPSK symbols */
+ for (i = 0; i < data_bits_per_frame - unused_data_bits; i++)
+ sdout[i] = 1.0 - 2.0 * ibits[i];
+ for (i = 0; i < parity_bits_per_frame; i++)
+ sdout[i + data_bits_per_frame - unused_data_bits] =
+ 1.0 - 2.0 * pbits[i];
+ written += fwrite(
+ sdout, sizeof(float),
+ data_bits_per_frame - unused_data_bits + parity_bits_per_frame, fout);
+ } else {
+ written += fwrite(ibits, sizeof(char), data_bits_per_frame, fout);
+ written += fwrite(pbits, sizeof(char), parity_bits_per_frame, fout);
}
- frames = 0;
- int written = 0;
-
- while (fread(ibits, sizeof(char), data_bits_per_frame, fin) == data_bits_per_frame) {
- if (testframes) {
- uint16_t r[data_bits_per_frame];
- ofdm_rand(r, data_bits_per_frame);
-
- for(i=0; i<data_bits_per_frame-unused_data_bits; i++) {
- ibits[i] = r[i] > 16384;
- }
- for(i=data_bits_per_frame-unused_data_bits; i<data_bits_per_frame; i++) {
- ibits[i] = 1;
- }
-
- }
-
- encode(&ldpc, ibits, pbits);
-
- if (sd) {
- /* map to BPSK symbols */
- for (i=0; i<data_bits_per_frame-unused_data_bits; i++)
- sdout[i] = 1.0 - 2.0 * ibits[i];
- for (i=0; i<parity_bits_per_frame; i++)
- sdout[i+data_bits_per_frame-unused_data_bits] = 1.0 - 2.0 * pbits[i];
- written += fwrite(sdout, sizeof(float), data_bits_per_frame-unused_data_bits+parity_bits_per_frame, fout);
- }
- else {
- written += fwrite(ibits, sizeof(char), data_bits_per_frame, fout);
- written += fwrite(pbits, sizeof(char), parity_bits_per_frame, fout);
- }
-
- frames++;
- if (testframes && (frames >= Nframes)) {
- goto finished;
- }
+ frames++;
+ if (testframes && (frames >= Nframes)) {
+ goto finished;
}
+ }
- finished:
+finished:
- fprintf(stderr, "written: %d\n", written);
- fclose(fin);
- fclose(fout);
+ fprintf(stderr, "written: %d\n", written);
+ fclose(fin);
+ fclose(fout);
- return 1;
+ return 1;
}