我试图了解如何更改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);

最佳答案

如果需要位k (k = 0 ..15),可以执行以下操作:

return (lfsr >> k) & 1;


这会将寄存器k位的位置向右移动,并掩盖最低有效位。

关于c - Galois LFSR-如何指定输出位数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30983389/

10-12 05:17