C语言 如果GF(2)抽头多项式的x^0项设置为零,是否可以反转LFSR的序列?

dpiehjr4  于 2023-06-28  发布在  其他
关注(0)|答案(1)|浏览(94)

在探索如何使用LFSR生成最大周期正向和反向序列时,我在GF(2)本原多项式的定义方面遇到了一些困惑。
当我从这个table中选择一个本原GF(2)多项式时,所有多项式的x^0项都设置为1,一切都按预期工作(见下文)。

#include <cstdio>
#include <cstdint>

uint8_t rev (uint8_t xi)
{
  uint8_t xo ;

  for (auto n = 8 ; n ; -- n)
    {
      xo = xo << 1 | xi & 1 ;

      xi >>= 1 ;
    }

  return xo ;
}

int main (void)
{
  uint8_t const POLY_F = 0x85 ; // x^8 + x^7 + x^2 + 1 : Normal
  uint8_t const POLY_R = 0x43 ; // x^8 + x^6 + x   + 1 : Reversed

  uint8_t lfsr = 0xFF ;

  for (auto n = 1 ; n <= 5 ; ++ n)                    // 1 -> FF
    {                                                 // 2 -> 7B
      printf ("%u -> %02X\n" , n , lfsr) ;            // 3 -> F6
                                                      // 4 -> 69
      lfsr = - (lfsr >> 7) & POLY_F ^ lfsr << 1 ;     // 5 -> D2
    }

  printf ("\n") ;

  for (auto n = 5 ; n >= 1 ; -- n)                    // 5 -> D2
    {                                                 // 4 -> 69
      lfsr = rev (lfsr) ;                             // 3 -> F6
                                                      // 2 -> 7B
      lfsr = - (lfsr >> 7) & POLY_R ^ lfsr << 1 ;     // 1 -> FF

      lfsr = rev (lfsr) ;

      printf ("%u -> %02X\n" , n ,lfsr) ;
    }
}

当我使用这个program生成一个最大长度的GF(2)多项式时,它有时会输出一个x^0项设置为0的多项式。
我不知道如何在x^0项为0时反转序列。
“最大长度”多项式和“本原多项式”是一回事吗?
本原多项式的x^0项可以设为0吗?
如果x^0项为0,是否可以反转序列?

oaxa6hgo

oaxa6hgo1#

代码至少存在以下问题:

未初始化值

它有时会输出x^0项设置为0的多项式。
第一次执行xo << 1 | xi & 1 ;时,xo没有初始化也没有赋值。
相反:

// uint8_t xo ;
uint8_t xo = 0;

语言?

文章被标记为C,但使用了#include <cstdio>。最好使用C编译器来编译C代码。

相关问题