1

我正在尝试在 Matlab 上编写自己的线性反馈移位寄存器实现,以生成伪随机数字序列。假设我需要以随机顺序生成一个从 1 到 16,384 (2^14) 的序列,我的初始状态是数字 329,抽头是 7。

这是我到目前为止的代码:

function [rndV] = lfsr(limit, init, tap)
    X = -1;
    rndV = init;
    bits = nextpow2(limit);
    while(X ~= init)
        if(X == -1)
            X = init;
        end
        a = bitget(X, bits);
        b = bitget(X, tap);
        X = bitshift(X,1,bits);
        X = bitset(X,1,bitxor(a,b));
        rndV = [rndV X];
    end
end

参数是:

限制 = 16,384
初始化 = 329
抽头 = 7

如果我得到正确的 LFSR,算法是否必须循环直到再次找到初始状态?这个循环是否必须以随机顺序生成 1 到 16,384 之间的所有数字?

我的代码有问题,或者我误解了 LFSR 算法,但我只得到 22 个随机顺序的数字,然后再次找到初始状态 (329)。

我想实现与此处描述的相同但在 matlab 中。谢谢!

4

1 回答 1

1

只有一个原始多项式才能得到全范围的随机数。在此处查看primpolyes,或者如果您需要更大的 LSFR 订单,请查看此处

于 2015-02-02T09:08:32.927 回答