0

该问题似乎非常适合 GPU、FPGA 等(因为它非常并行);但我现在正在寻找一种基于 CPU 且在某种程度上独立于架构的解决方案。我认为一个好的答案可能只是一些未实现的伪代码,但我的程序是纯 C++20,所以答案应该与该上下文相关(例如,不要假设像 Python 这样非常高级的东西,不要使用编译器特定的内在函数或程序集)。我并不期待令人兴奋的性能,但我确实希望答案比我已经拥有的三个实现快得多(在这个文件):一种非常幼稚的方法,没有生成器矩阵,以及一种幼稚的“将输入向量与密集生成器矩阵相乘”方法。答案应该适用于任意码字和输入长度,但重要的码字长度在 2000 位以下,小输入长度并不重要。

一些预备知识:所讨论的二进制数的加法和乘法分别定义为“异或”(XOR)和“与”逻辑/按位运算。这扩展到二进制矩阵乘法。

汉明码是旧的和众所周知的二进制线性块错误检测/纠正码。每个码字是一串位,其中一些位位置被指定为奇偶校验位,用于错误检测和纠正,而其余位是数据位,如果没有错误,它们只是输入位的副本。我们只考虑奇偶校验位位于传统的二次幂位置的汉明码(即,基于 1 的编号:位 1、位 2、位 4、位 8,...)。因此,每个可能的代码都可以使用它的长度n(代码字中的位数)或它的等级k(代码字中的数据位数)来确定。汉明码可以称为(n, k),例如,(7, 4)(40, 34)

每个代码都有一个生成矩阵,一个二进制矩阵,输入向量可以与该矩阵相乘以获得一个代码字。因此,某个代码的代码字集合正是生成矩阵的行的线性组合集合。

所需的程序基本上是一个编码器:它以一(n, k)对作为输入来提供代码(是的,这是多余的 - 本质上只需要一对)和一个任意二进制消息,将消息分成k-bits long sub-消息并输出一系列 - 位n长码字,每个码字编码一个子消息。

我希望在这里得到一个利用特定于我们的生成器矩阵的属性的答案(例如,生成器矩阵的特殊表示和特殊的向量矩阵乘法算法),所以这里是一些代码的生成器矩阵的示例:

汉明码(3, 1)(只有代码字000111):

111

汉明码((5, 2)只有代码字0000011100和):1001101111

11100
10011

汉明码(6, 3)

111000
100110
010101

(注意每个生成矩阵如何包含所有较小代码的生成矩阵。)

汉明码(150, 142)(所有零都留空,所以那些会更突出):

111
1  11
 1 1 1
11 1  1
1      11
 1     1 1
11     1  1
   1   1   1
1  1   1    1
 1 1   1     1
11 1   1      1
1              11
 1             1 1
11             1  1
   1           1   1
1  1           1    1
 1 1           1     1
11 1           1      1
       1       1       1
1      1       1        1
 1     1       1         1
11     1       1          1
   1   1       1           1
1  1   1       1            1
 1 1   1       1             1
11 1   1       1              1
1                              11
 1                             1 1
11                             1  1
   1                           1   1
1  1                           1    1
 1 1                           1     1
11 1                           1      1
       1                       1       1
1      1                       1        1
 1     1                       1         1
11     1                       1          1
   1   1                       1           1
1  1   1                       1            1
 1 1   1                       1             1
11 1   1                       1              1
               1               1               1
1              1               1                1
 1             1               1                 1
11             1               1                  1
   1           1               1                   1
1  1           1               1                    1
 1 1           1               1                     1
11 1           1               1                      1
       1       1               1                       1
1      1       1               1                        1
 1     1       1               1                         1
11     1       1               1                          1
   1   1       1               1                           1
1  1   1       1               1                            1
 1 1   1       1               1                             1
11 1   1       1               1                              1
1                                                              11
 1                                                             1 1
11                                                             1  1
   1                                                           1   1
1  1                                                           1    1
 1 1                                                           1     1
11 1                                                           1      1
       1                                                       1       1
1      1                                                       1        1
 1     1                                                       1         1
11     1                                                       1          1
   1   1                                                       1           1
1  1   1                                                       1            1
 1 1   1                                                       1             1
11 1   1                                                       1              1
               1                                               1               1
1              1                                               1                1
 1             1                                               1                 1
11             1                                               1                  1
   1           1                                               1                   1
1  1           1                                               1                    1
 1 1           1                                               1                     1
11 1           1                                               1                      1
       1       1                                               1                       1
1      1       1                                               1                        1
 1     1       1                                               1                         1
11     1       1                                               1                          1
   1   1       1                                               1                           1
1  1   1       1                                               1                            1
 1 1   1       1                                               1                             1
11 1   1       1                                               1                              1
                               1                               1                               1
1                              1                               1                                1
 1                             1                               1                                 1
11                             1                               1                                  1
   1                           1                               1                                   1
1  1                           1                               1                                    1
 1 1                           1                               1                                     1
11 1                           1                               1                                      1
       1                       1                               1                                       1
1      1                       1                               1                                        1
 1     1                       1                               1                                         1
11     1                       1                               1                                          1
   1   1                       1                               1                                           1
1  1   1                       1                               1                                            1
 1 1   1                       1                               1                                             1
11 1   1                       1                               1                                              1
               1               1                               1                                               1
1              1               1                               1                                                1
 1             1               1                               1                                                 1
11             1               1                               1                                                  1
   1           1               1                               1                                                   1
1  1           1               1                               1                                                    1
 1 1           1               1                               1                                                     1
11 1           1               1                               1                                                      1
       1       1               1                               1                                                       1
1      1       1               1                               1                                                        1
 1     1       1               1                               1                                                         1
11     1       1               1                               1                                                          1
   1   1       1               1                               1                                                           1
1  1   1       1               1                               1                                                            1
 1 1   1       1               1                               1                                                             1
11 1   1       1               1                               1                                                              1
1                                                                                                                              11
 1                                                                                                                             1 1
11                                                                                                                             1  1
   1                                                                                                                           1   1
1  1                                                                                                                           1    1
 1 1                                                                                                                           1     1
11 1                                                                                                                           1      1
       1                                                                                                                       1       1
1      1                                                                                                                       1        1
 1     1                                                                                                                       1         1
11     1                                                                                                                       1          1
   1   1                                                                                                                       1           1
1  1   1                                                                                                                       1            1
 1 1   1                                                                                                                       1             1
11 1   1                                                                                                                       1              1
               1                                                                                                               1               1
1              1                                                                                                               1                1
 1             1                                                                                                               1                 1
11             1                                                                                                               1                  1
   1           1                                                                                                               1                   1
1  1           1                                                                                                               1                    1
 1 1           1                                                                                                               1                     1

请注意,在大多数生成器矩阵的所有零中,零的数量相对较少,而且这些矩阵肯定有一个模式,甚至是形状。

我在这里的所有相关领域都很薄弱,所以请尝试纠正我犯的任何可能的错误。

4

0 回答 0