2013-05-16 9 views
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 

매개 변수는 다음과 같습니다

limit = 16,384 
init = 329 
tap = 7

내가 알고리즘 루프 초기 상태를 다시 발견해야한다 때까지 오른쪽 LFSR을 얻는 경우에? 이 루프는 1에서 16,384 사이의 모든 숫자를 임의의 순서로 생성해야합니까?

내 코드가 잘못되었거나 LFSR 알고리즘을 잘못 이해했지만 임의의 순서로 22 개의 숫자 만 얻으면 초기 상태 (329)가 다시 발견됩니다.

here에 설명되어 있지만 matlab.Thanks에서와 동일하게하고 싶습니다!

답변

1

원시 다항식 만 전체 범위의 난수를 가질 수 있습니다. primplolyes의 경우 here을 확인하거나 LSFR의 더 큰 주문이 필요한 경우 here을 확인하십시오.

관련 문제