Это очень интересный вопрос. На самом деле, проще всего, на мой взгляд, использовать регистр сдвига с линейной обратной связью . Вы можете найти множество примеров и реализаций, гуглящих вокруг ( здесь - это вопрос другого SO).
Вот краткая демонстрация Matlab, основанная на этом коде :
b = lfsr(20)
function r = lfsr(size)
persistent state;
if (isempty(state))
state = uint32(1);
end
if (nargin < 1)
size = 1;
end
r = zeros(size,1);
for i = 1:size
r(i) = bitand(state,uint32(1));
if (bitand(state,uint32(1)))
state = bitxor(bitshift(state,-1),uint32(142));
else
state = bitshift(state,-1);
end
end
end