线性反馈移位寄存器算法

时间:2013-05-16 05:16:33

标签: matlab xor bit-shift

我正在尝试在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

参数是:

limit = 16,384
init = 329
tap = 7

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

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

我希望实现与描述here相同但在matlab.Thanks!

1 个答案:

答案 0 :(得分:1)

只有原始多项式才能得到全范围的随机数。检查here是否为primpolyes,或here如果您需要更大的LSFR顺序