-
Notifications
You must be signed in to change notification settings - Fork 106
Open
Description
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
Labels
No labels