C decoder output correct now
authordrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 13 Sep 2016 05:38:51 +0000 (05:38 +0000)
committerdrowe67 <drowe67@01035d8c-6547-0410-b346-abe4f91aad63>
Tue, 13 Sep 2016 05:38:51 +0000 (05:38 +0000)
git-svn-id: https://svn.code.sf.net/p/freetel/code@2860 01035d8c-6547-0410-b346-abe4f91aad63

codec2-dev/src/ldpc_dec.c

index 805b479433d7306aaf1e6e8f9c570e45a600581b..912e5e7f74c217449c172460096038704e018c31 100644 (file)
@@ -24,7 +24,7 @@
       [X] test mode or file I/O (incl stdin/stdout)\r
       [X] Octave code to generate include file\r
           + MAX_ITER as well\r
-      [ ] check into SVN\r
+      [X] check into SVN\r
       [ ] enc/dec running on cmd line\r
       [ ] fsk_demod modified for soft decisions\r
       [ ] drs232 modified for SD\r
@@ -51,7 +51,8 @@ int main(int argc, char *argv[])
 {    \r
     int         CodeLength, NumberParityBits, max_iter;\r
     int         i, j, r, num_ok, num_runs;\r
-    \r
+    char        out_char[CODELENGTH];\r
+\r
     /* derive some parameters */\r
 \r
     max_iter   = MAX_ITER;\r
@@ -60,7 +61,7 @@ int main(int argc, char *argv[])
        \r
     if (argc < 2) {\r
         fprintf(stderr, "usage: %s --test\n", argv[0]);\r
-        fprintf(stderr, "usage: %s InOneSDSymbolPerDouble OutOneBitPerInt\n", argv[0]);\r
+        fprintf(stderr, "usage: %s InOneSDSymbolPerDouble OutOneBitPerByte\n", argv[0]);\r
         exit(0);\r
     }\r
 \r
@@ -115,22 +116,37 @@ int main(int argc, char *argv[])
         if (strcmp(argv[1], "-")  == 0) fin = stdin;\r
         else if ( (fin = fopen(argv[1],"rb")) == NULL ) {\r
             fprintf(stderr, "Error opening input SD file: %s: %s.\n",\r
-                    argv[2], strerror(errno));\r
+                    argv[1], strerror(errno));\r
             exit(1);\r
         }\r
         \r
         if (strcmp(argv[2], "-") == 0) fout = stdout;\r
         else if ( (fout = fopen(argv[2],"wb")) == NULL ) {\r
             fprintf(stderr, "Error opening output bit file: %s: %s.\n",\r
-                    argv[3], strerror(errno));\r
+                    argv[2], strerror(errno));\r
             exit(1);\r
         }\r
 \r
         double *input_double  =  calloc(CodeLength, sizeof(double));\r
 \r
-        while(fread(input_double, sizeof(double), CodeLength, fin) == 1) {\r
+        while(fread(input_double, sizeof(double), CodeLength, fin) == CodeLength) {\r
             run_ldpc_decoder(DecodedBits, ParityCheckCount, input_double);\r
-            fwrite(DecodedBits, sizeof(int), CodeLength, fout);\r
+\r
+            /* default is all zeros - just in case we don't get a decode */\r
+\r
+            memset(out_char, sizeof(out_char), 0);\r
+\r
+            /* extract output bits from ouput iteration that solved all paritry equations */\r
+\r
+            for (i=0;i<max_iter;i++) {\r
+                if (ParityCheckCount[i] == NumberParityBits) {\r
+                    for (j=0; j<CodeLength; j++) {\r
+                        out_char[j] = DecodedBits[i+j*max_iter];                  \r
+                    }\r
+                }\r
+            }\r
+\r
+            fwrite(out_char, sizeof(char), CodeLength, fout);\r
         }\r
 \r
         free(input_double);\r