【发布时间】:2017-07-12 05:21:34
【问题描述】:
我在 MATLAB 中使用 RS(160,80) 实现了一个简单的 RS 纠错方案。基本流程如下:
我生成一个长度为 80 且每个符号 8 位的消息,并生成一个长度为 160 的 RS 代码。
生成 RS 码后,我添加/XOR 另一个码长为 160 的 Galois 字段。(该字段仅包含 00000000 和 00000001)。这是为了模拟在方案中添加错误。这会生成我的嘈杂代码。
1234563我在上一步中将其添加/异或到生成的嘈杂代码中。
最后,我通过 RS 解码器运行它来检索我的原始消息。
我的 MATLAB 函数:
function RSKeyExchange(dev1, dev2)
dev1_fp = zeros(1,160);
dev2_fp = zeros(1,160);
for i=1:160
dev1_fp(i) = str2double(dev1.key(i));
dev2_fp(i) = str2double(dev2.key(i));
end
n = 160; % total code length
k = 80; % message length - actual message for syncronisation
m = 8; % order (2^m)
% therefore, RS decoder can detect t = n-k = 80 errors
% and correct t/2 = 40 errors
msg = gf(randi([1 255],1 ,80), m);
code = rsenc(msg, n, k);
noise_add = gf(dev1_fp, 8);
noise_remove = gf(dev2_fp, 8);
noisy_code = code + noise_add;
% noisy_code is now transmitted from dev1 to dev2 (sender to receiver)
decommited_code = noisy_code + noise_remove;
[rxcode, cnumerr] = rsdec(decommited_code, n, k);
fprintf('Number of errors corrected: %d\n', cnumerr);
end
现在我一直在寻找将其移植到 Java 的方法。我查找了库,但不确定如何准确移植我的特定用例。
Zxing - 仅将 QR 码和 Aztec 码作为输入
-
Backblaze - JavaReedSolomon - 修复代码擦除,这不是我产生的那种错误,输入是文件的形式(严重混淆这里发生的事情)
Simple RS error correction example - 感觉更清晰一些,但只接受字符串作为输入。我觉得我可以修改它以适合我的用例,但我不确定如何添加噪音。我不知道如何通过此实现生成 RS(160, 80) 代码,我也不知道如何生成自定义 GF 字段以添加噪声。
任何帮助都将不胜感激(尤其是如果您可以指出适合我用例的实现,或者帮助修改上述可行的资源之一)
谢谢!
【问题讨论】:
标签: java matlab error-correction reed-solomon galois-field