我正在努力实现 ak=7、r=1/2 卷积码和 Viterbi 解码器以进行前向纠错。我想在流模式下操作,以便在整个消息完成之前从流中提取数据。我计划有一个 64 位的历史记录,并提取最旧的 16 位,在代码完成之前保持 48 位未解析。
[编辑] - 我发现代码有一个问题(见下文),但仍然不确定为什么在修复该问题后会出现如此多的错误。此处解释输出的任何输入都会有所帮助。
我在 Phil Karn 的 ka9q 网站上找到了我需要的代码: http ://www.ka9q.net/suitsat/dsp/ 。这为流行的速率 1/2、约束 7 卷积码实现了流式 Viterbi 解码器。我已经编译并运行了测试代码(viterbi27_streamtest.c),但输出看起来不对。我在默认配置(无命令行参数)下运行测试,输出看起来显示接近 50% 的错误。将 eb/n0 值增加到 20dB 会产生类似的输出。下面是输出的前几行,eb/n0 = 3dB。谁能解释这个输出,如果我理解这表明 10000 位中有大约 5000 个错误是正确的?
[编辑] 好的 - 我在代码中发现了一个错误。测试代码的第 132 行在设置后直接清除接收到的数据。不知道为什么。
/* Convolutional encode, add noise */
sr = (sr << 1) | databit;
symbols[sym_p] = noise * rnor() + 127.5 + (parityb(sr & V27POLYA) ? Gain : -Gain);
symbols[sym_p+1] = noise * rnor() + 127.5 + (parityb(sr & V27POLYB) ? Gain : -Gain);
symbols[sym_p] = 0; symbols[sym_p+1] = 0; <<<<<<<<< Here <<<<<<<<<<<
原始结果
Bits = 10000
Decoder memory = 128 ebn0 = 3.00 dB
noise = 22.6543 RMS, data amplitude = +/-32
Total bit errors, chainback from 0 state: 629731
Total bit errors, chainback from best state: 629882
Error counts:
position zero-state best-state
-1 4917 4918
-2 4917 5078
-3 4917 4916
-4 4917 4916
-5 4917 4919
-6 4916 4917
(它有 128 行,数据相似)
删除有问题的行后,仍然会出现位错误,但要少得多:
Bits = 10000
Decoder memory = 128 ebn0 = 3.00 dB
noise = 22.6543 RMS, data amplitude = +/-32
Total bit errors, chainback from 0 state: 33797
Total bit errors, chainback from best state: 33517
Error counts:
position zero-state best-state
-1 4077 4013
-2 3664 3643
-3 3331 3285
-4 2894 2883
-5 2445 2405
-6 2023 2089
-7 1817 1780
-8 1565 1619
-9 1323 1371
-10 1073 1108
-11 918 898
-12 777 786
-13 635 647
-14 525 548
-15 448 429
-16 382 364
-17 311 310
-18 229 248
-19 199 188
-20 183 170
-21 159 136
-22 113 118
-23 106 96
-24 100 85
-25 80 60
-26 72 52
-27 65 42
-28 57 36
-29 53 36
-30 50 36
-31 49 33
-32 44 34
-33 38 34
-34 31 35
-35 31 26
-36 32 24
-37 32 22
-38 31 22
-39 30 22
-40 29 20
-41 26 22
-42 26 20
-43 26 21
-44 25 22
-45 24 21
-46 24 23
-47 25 21
-48 26 23
-49 26 25
-50 27 26
-51 27 27
-52 27 28
-53 28 29
-54 29 29
-55 29 30
-56 29 30
-57 30 30