aboutsummaryrefslogtreecommitdiff
path: root/src/ldpc_noise.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ldpc_noise.c')
-rw-r--r--src/ldpc_noise.c130
1 files changed, 67 insertions, 63 deletions
diff --git a/src/ldpc_noise.c b/src/ldpc_noise.c
index c641dac..a4c398c 100644
--- a/src/ldpc_noise.c
+++ b/src/ldpc_noise.c
@@ -1,4 +1,4 @@
-/*
+/*
FILE...: ldpc_enc.c
AUTHOR.: Don Reid
CREATED: Aug 2018
@@ -7,71 +7,75 @@
of LDPC code with PSK modem.
*/
+#include <errno.h>
+#include <math.h>
+#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
-#include <stdint.h>
#include <string.h>
-#include <math.h>
-#include <errno.h>
int main(int argc, char *argv[]) {
- FILE *fin, *fout;
- float datain, dataout;
-
- if (argc < 3) {
- fprintf(stderr, "\n");
- fprintf(stderr, "usage: %s InputFile OutputFile NodB\n", argv[0]);
- fprintf(stderr, "\n");
- exit(1);
- }
-
- 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);
- }
-
- double NodB = atof(argv[3]);
- double No = pow(10.0, NodB/10.0);
- double sum_xx = 0; double sum_x = 0.0; long n = 0;
-
- fprintf(stderr, "Uncoded PSK Eb/No simulation:\n");
- fprintf(stderr, "No = % 4.2f dB (%4.2f linear)\n", NodB, No);
- fprintf(stderr, "Eb = % 4.2f dB (%4.2f linear)\n", 0.0, 1.0);
- fprintf(stderr, "Eb/No = %4.2f dB (%4.2f linear)\n", -NodB, pow(10,-NodB/10.0));
-
- while (fread(&datain, sizeof(float), 1, fin) == 1) {
-
- // Gaussian from uniform:
- double x = (double)rand() / RAND_MAX;
- double y = (double)rand() / RAND_MAX;
- double z = sqrt(-2 * log(x)) * cos(2 * M_PI * y);
-
- double noise = sqrt(No/2) * z;
- dataout = datain + noise;
-
- fwrite(&dataout, sizeof(float), 1, fout);
-
- // keep running stats to calculate actual noise variance (power)
-
- sum_xx += noise*noise;
- sum_x += noise;
- n++;
- }
-
- fclose(fin);
- fclose(fout);
-
- double noise_var = (n * sum_xx - sum_x * sum_x) / (n * (n - 1));
- fprintf(stderr, "measured double sided (real) noise power: %f\n", noise_var);
-
- return 0;
+ FILE *fin, *fout;
+ float datain, dataout;
+
+ if (argc < 3) {
+ fprintf(stderr, "\n");
+ fprintf(stderr, "usage: %s InputFile OutputFile NodB\n", argv[0]);
+ fprintf(stderr, "\n");
+ exit(1);
+ }
+
+ 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);
+ }
+
+ double NodB = atof(argv[3]);
+ double No = pow(10.0, NodB / 10.0);
+ double sum_xx = 0;
+ double sum_x = 0.0;
+ long n = 0;
+
+ fprintf(stderr, "Uncoded PSK Eb/No simulation:\n");
+ fprintf(stderr, "No = % 4.2f dB (%4.2f linear)\n", NodB, No);
+ fprintf(stderr, "Eb = % 4.2f dB (%4.2f linear)\n", 0.0, 1.0);
+ fprintf(stderr, "Eb/No = %4.2f dB (%4.2f linear)\n", -NodB,
+ pow(10, -NodB / 10.0));
+
+ while (fread(&datain, sizeof(float), 1, fin) == 1) {
+ // Gaussian from uniform:
+ double x = (double)rand() / RAND_MAX;
+ double y = (double)rand() / RAND_MAX;
+ double z = sqrt(-2 * log(x)) * cos(2 * M_PI * y);
+
+ double noise = sqrt(No / 2) * z;
+ dataout = datain + noise;
+
+ fwrite(&dataout, sizeof(float), 1, fout);
+
+ // keep running stats to calculate actual noise variance (power)
+
+ sum_xx += noise * noise;
+ sum_x += noise;
+ n++;
+ }
+
+ fclose(fin);
+ fclose(fout);
+
+ double noise_var = (n * sum_xx - sum_x * sum_x) / (n * (n - 1));
+ fprintf(stderr, "measured double sided (real) noise power: %f\n", noise_var);
+
+ return 0;
}