You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于24阶多项式的32位Fibonacci LFSR实现故障排查求助

24位LFSR实现问题及修正方案

我需要基于多项式 x^24 + x^23 + x^22 + x^20 + x^19 + x^18 + x^17 + x^16 + x^15 + x^13 + x^12 + x^8 + x^7 + x^6 + 1 实现线性反馈移位寄存器(LFSR),参考了Fibonacci型LFSR的C代码实现方式。

我使用uint32_t作为所有数据类型,函数调用时将LFSR初始化为start_state,核心实现代码如下:

bit = ((lfsr >> 7) ^ (lfsr >> 8) ^ (lfsr >> 9) ^ (lfsr >> 11) ^ (lfsr >> 12) ^ (lfsr >> 13) ^ (lfsr >> 14) ^ (lfsr >> 15) ^ (lfsr >> 16) ^ (lfsr >> 18) ^ (lfsr >> 19) ^ (lfsr >> 23) ^ (lfsr >> 24) ^ (lfsr >> 25))& 1u;

lfsr = (lfsr >> 1) | (bit << 31);

但程序运行后陷入无限循环,无法正常终止。我设置了do{...} while (lfsr != start_state );的循环逻辑,理论上经过约1700万次迭代后应该回到初始状态并结束循环,这说明我在多项式到32位序列的映射上存在错误。以下是最简示例代码:

void lfsr_fib(uint32_t lfsr)
{
    uint32_t bit;
    uint32_t period = 0;

    do
    {
        /*
        polynomial: x^24 + x^23 + x^22 + x^20 + x^19 + x^18 + x^17 + x^16 + x^15 + x^13 + x^12 + x^8 + x^7 + x^6 + 1
        */

        bit = ((lfsr >> 7) ^ (lfsr >> 8) ^ (lfsr >> 9) ^ (lfsr >> 11) ^ (lfsr >> 12) ^ (lfsr >> 13) ^ (lfsr >> 14) ^ (lfsr >> 15) ^ (lfsr >> 16) ^ (lfsr >> 18) ^ (lfsr >> 19) ^ (lfsr >> 23) ^ (lfsr >> 24) ^ (lfsr >> 25))& 1u;

        lfsr = (lfsr >> 1) | (bit << 31);
   
        ++period;
        printf("%d\n", period);

    } while (lfsr != start_state );
}

更新:修正方案

老师指出之前的错误——原本应该使用24位的初始值,却误设置成了32位。同时给出修正提示:保留32位初始值,将移位更新代码:

lfsr = (lfsr >> 1) | (bit << 31);

替换为:

lfsr = (lfsr >> 1) | (bit << 24);

内容的提问来源于stack exchange,提问作者Rico1990

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 00:01:05