Skip to content

Running 'convolutional-fec.exe' #44

@gvanem

Description

@gvanem

When running this test program on MSVC/clang (x86), all I got was:
expected to decode 4096 bytes, decoded 0 bytes instead

before it exited. The reason is that error-sim.c and scratch->decode() is expecting a number of bytes decoded.
Correct?

But in fact scratch->decode point to functions returning void! Seems that conv_fec27_decode() returns 0 after all.
But I patched them all:

--- a/include/correct/util/error-sim-fec.h 2021-07-12 18:28:28
+++ b/include/correct/util/error-sim-fec.h 2022-04-07 14:45:51
@@ -2,7 +2,7 @@

 #include <fec.h>

-void conv_fec27_decode(void *conv_v, uint8_t *soft, size_t soft_len, uint8_t *msg);
-void conv_fec29_decode(void *conv_v, uint8_t *soft, size_t soft_len, uint8_t *msg);
-void conv_fec39_decode(void *conv_v, uint8_t *soft, size_t soft_len, uint8_t *msg);
-void conv_fec615_decode(void *conv_v, uint8_t *soft, size_t soft_len, uint8_t *msg);
+size_t conv_fec27_decode(void *conv_v, uint8_t *soft, size_t soft_len, uint8_t *msg);
+size_t conv_fec29_decode(void *conv_v, uint8_t *soft, size_t soft_len, uint8_t *msg);
+size_t conv_fec39_decode(void *conv_v, uint8_t *soft, size_t soft_len, uint8_t *msg);
+size_t conv_fec615_decode(void *conv_v, uint8_t *soft, size_t soft_len, uint8_t *msg);

--- a/util/error-sim-fec.c 2021-07-12 18:28:28
+++ b/util/error-sim-fec.c 2022-04-07 14:46:55
@@ -1,29 +1,33 @@
 #include "correct/util/error-sim-fec.h"

-void conv_fec27_decode(void *conv_v, uint8_t *soft, size_t soft_len, uint8_t *msg) {
+size_t conv_fec27_decode(void *conv_v, uint8_t *soft, size_t soft_len, uint8_t *msg) {
     init_viterbi27(conv_v, 0);
     update_viterbi27_blk(conv_v, soft, soft_len / 2 - 2);
     size_t n_decoded_bits = (soft_len / 2) - 8;
     chainback_viterbi27(conv_v, msg, n_decoded_bits, 0);
+    return n_decoded_bits / 8;
 }

-void conv_fec29_decode(void *conv_v, uint8_t *soft, size_t soft_len, uint8_t *msg) {
+size_t conv_fec29_decode(void *conv_v, uint8_t *soft, size_t soft_len, uint8_t *msg) {
     init_viterbi29(conv_v, 0);
     update_viterbi29_blk(conv_v, soft, soft_len / 2 - 2);
     size_t n_decoded_bits = (soft_len / 2) - 10;
     chainback_viterbi29(conv_v, msg, n_decoded_bits, 0);
+    return n_decoded_bits / 8;
 }

-void conv_fec39_decode(void *conv_v, uint8_t *soft, size_t soft_len, uint8_t *msg) {
+size_t conv_fec39_decode(void *conv_v, uint8_t *soft, size_t soft_len, uint8_t *msg) {
     init_viterbi39(conv_v, 0);
     update_viterbi39_blk(conv_v, soft, soft_len / 3 - 2);
     size_t n_decoded_bits = (soft_len / 3) - 10;
     chainback_viterbi39(conv_v, msg, n_decoded_bits, 0);
+    return n_decoded_bits / 8;
 }

-void conv_fec615_decode(void *conv_v, uint8_t *soft, size_t soft_len, uint8_t *msg) {
+size_t conv_fec615_decode(void *conv_v, uint8_t *soft, size_t soft_len, uint8_t *msg) {
     init_viterbi615(conv_v, 0);
     update_viterbi615_blk(conv_v, soft, soft_len / 6 - 2);
     size_t n_decoded_bits = (soft_len / 6) - 16;
     chainback_viterbi615(conv_v, msg, n_decoded_bits, 0);
+    return n_decoded_bits / 8;
 }

But perhaps static void chainback_viterbi() should return this instead?

So running convolutional-fec.exe now gives something more sensible:

test passed, expected error rate=0.00e+00, observed error rate=0.00e+00 @infdB for rate 2 order 6
test passed, expected error rate=8.00e-06, observed error rate=4.00e-06 @4.5dB for rate 2 order 6
test passed, expected error rate=5.00e-05, observed error rate=2.45e-05 @4.0dB for rate 2 order 6

test passed, expected error rate=0.00e+00, observed error rate=0.00e+00 @infdB for rate 2 order 9
test passed, expected error rate=3.00e-06, observed error rate=0.00e+00 @4.5dB for rate 2 order 9
test passed, expected error rate=8.00e-06, observed error rate=2.75e-06 @4.0dB for rate 2 order 9

test passed, expected error rate=0.00e+00, observed error rate=0.00e+00 @infdB for rate 3 order 9
test passed, expected error rate=3.00e-06, observed error rate=0.00e+00 @4.5dB for rate 3 order 9
test passed, expected error rate=5.00e-06, observed error rate=2.25e-06 @4.0dB for rate 3 order 9

test passed, expected error rate=0.00e+00, observed error rate=0.00e+00 @infdB for rate 6 order 15
test passed, expected error rate=3.00e-06, observed error rate=0.00e+00 @3.0dB for rate 6 order 15
test passed, expected error rate=1.00e-05, observed error rate=0.00e+00 @2.5dB for rate 6 order 15

Takes 2 minutes to complete.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions