Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Running 'convolutional-fec.exe' #44

Open
gvanem opened this issue Apr 7, 2022 · 0 comments
Open

Running 'convolutional-fec.exe' #44

gvanem opened this issue Apr 7, 2022 · 0 comments

Comments

@gvanem
Copy link

gvanem commented Apr 7, 2022

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant