在探索如何使用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,是否可以反转序列?
1条答案
按热度按时间oaxa6hgo1#
代码至少存在以下问题:
未初始化值
它有时会输出x^0项设置为0的多项式。
第一次执行
xo << 1 | xi & 1 ;
时,xo
没有初始化也没有赋值。相反:
语言?
文章被标记为C,但使用了
#include <cstdio>
。最好使用C编译器来编译C代码。