我正在使用位翻转解码[Hard_decision]进行一位翻转。
我已经跟随下面的H_matrix:"对于比特翻转算法,沿着Tanner图边传递的消息也是二进制的:比特节点发送一条消息,声明它是一个还是零,每个check节点向每个连接的位节点发送消息,根据check节点可用的信息声明该位的值。如果输入比特值的模2和为零,则校验节点确定满足其奇偶校验方程。如果比特节点接收的大多数消息与其接收值不同,则比特节点改变(翻转)其当前值。重复该过程直到满足所有奇偶校验方程。
更正码字= [10010101]
H矩阵[4] [8] = {{0,1,0,1,1,0,0,1},{1,1,1,0,0,1,0,0},{ 0,0,1,0,0,1,1,1},{1,0,0,1,1,0,1,0}};
ReceivedCodeWord [8] = {1,0,1,1,0,1,0,1}; //错误代码字
我需要[10010101],但我得到的是[10010001] ReceivedCodeWord [8] = {1,0,1,1,0,1,0,1}。
但是对于其他可能的ReceivedCodeWord,我得到了正确的答案。
e.g。 ReceivedCodeWord [00010101]我收到正确的代码字[10010101] ReceivedCodeWord [11010101]我得到了正确的代码字[10010101]。
怀疑:为什么对于ReceivedCodeWord {1,0,1,1,0,1,0,1}我得到[10010001],这是完全错误的。请解释一下。
此处a link
由于
答案 0 :(得分:0)
这是由您使用的线性块代码引起的。首先,该代码不是LDPC码,因为H martix不满足行列约束(例如,第3列和第6列在两个相同的列中具有1)。
(1)收到{1,0,1,1,0,1,0,1}时,支票金额为{0,1,1,0}。如果使用多位翻转解码算法,这意味着在一次迭代期间可以翻转多个位,则第3个变量节点和第6个变量节点将被翻转在一起,因为它们都连接了两个不满足的校验节点,然后第一次迭代后,结果将为{1,0,0,1,0,0,0,1}。在第二次迭代期间,校验和仍然是{0,1,1,0},因此第3个变量节点和第6个变量节点将再次翻转,此过程将在以后的迭代中重复出现。
(2)此代码的最小汉明距离为2,因此此代码可以检测1个错误并纠正0.5个错误。即使您使用单比特翻转解码算法,它也有50%的概率将接收到的码字{1,0,1,1,0,1,0,1}解码为另一个vaild码字{1,0,1,1, 0,0,0,1}。