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