我试图理解如何将galois LFSR代码更改为能够指定输出位数作为下面提到的函数的参数。我的意思是我需要不返回LFSR的最后一位作为输出位,而是返回LFSR的任何位(例如第二位或第三位)。我真的很想知道这个问题。任何人都可以提供一些提示如何实现吗?
#include < stdint.h >
uint16_t lfsr = 0xACE1u;
unsigned period = 0;
do {
unsigned lsb = lfsr & 1;
/* Get lsb (i.e., the output bit - here we take the last bit but i need to take any bit the number of which is specified as an input parameter). */
lfsr >>= 1;
/* Shift register */
if (lsb == 1)
/* Only apply toggle mask if output bit is 1. */
lfsr ^= 0xB400u;
/* Apply toggle mask, value has 1 at bits corresponding* to taps, 0 elsewhere. */
++period;
} while (lfsr != 0xACE1u);
答案 0 :(得分:1)
如果您需要位k
(k = 0 ..15)
,则可以执行以下操作:
return (lfsr >> k) & 1;
这会将寄存器k
位向右移位并屏蔽最低有效位。