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