我在 MATLAB 中使用 RS(160,80) 实现了一个简单的 RS 纠错方案。基本流程如下:
我生成一条长度为 80 且每个符号 8 位的消息,并生成长度为 160 的 RS 代码。
生成 RS 代码后,我添加/异或另一个代码长度为 160 的 Galois 字段。(该字段仅包含 00000000 和 00000001)。这是为了模拟在方案中添加错误。这会生成我的嘈杂代码。
现在,我采用另一个 GF 字段(与上面 [00000000 00000001] 的类型相似),它有 < 40 个符号,与我用来创建噪声的符号不同。我在上一步中将其添加/异或到生成的嘈杂代码中。
最后,我通过 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 - 修复代码擦除,这不是我产生的那种错误,输入是文件的形式(严重混淆这里发生的事情)
简单的 RS 纠错示例- 感觉更清晰,但只接受字符串作为输入。我觉得我可以修改它以适合我的用例,但我不确定如何添加噪音。我不确定如何通过此实现生成 RS(160, 80) 代码,也无法告诉如何生成自定义 GF 字段以添加噪声。
任何帮助将不胜感激(特别是如果您可以向我指出适合我的用例的实现,或者帮助修改上述可行的资源之一)
谢谢!