Operator PseudoRandomNumberGen

Operator Library: Base

PseudoRandomNumberGen 연산자는 선형 피드백 시프트 레지스터(LFSR)를 사용하여 N비트 난수 스트림을 생성합니다. 이러한 LFSR은 균등하게 분포된 이진 난수 시퀀스를 생성합니다. 시퀀스가 반복되기 전까지의 길이는 피드백 시프트 레지스터의 레지스터 수에 의해 정의됩니다. 32비트 길이의 LFSR은 2^32 - 2 값의 시퀀스를 생성합니다. 구현된 난수 생성기는 서로 다른 LFSR을 사용하여 연산자 출력에서 N비트 난수를 생성합니다. 이렇게 하면 시퀀스 길이가 증가하고 비트 간의 상관관계가 방지됩니다. 다음 그림은 유사 난수 생성기의 구현을 보여줍니다.

난수 Quality을 더욱 향상시키기 위해, LFSR은 픽셀 주파수에 의해 클록 소스가 공급되지 않고 프리러닝(free running) 방식으로 작동합니다. 따라서 결과의 타이밍은 비결정적이며, 진정한 난수가 값 생성에 반영되어 Quality이 극적으로 향상됩니다.

LFSR은 앱릿 초기화 시 시드(seed)로 미리 초기화됩니다. 이 시드는 VisualApplets에서 Seed0, Seed1, Seed2 파라미터를 사용하여 정의됩니다. 연산자 인스턴스화 시 기본 시드 값에는 소프트웨어 난수 생성기가 사용됩니다.

사용법

이 연산자는 다양한 Bit Width와 Parallelism를 지원합니다. 그러나 Parallelism과 Bit Width가 높을수록 더 많은 리소스가 필요합니다. 출력 Bit Width는 출력 링크를 사용하여 조정할 수 있습니다.

연산자 입력 링크는 동기화 용도로만 사용됩니다. 입력 링크의 데이터 값은 데이터 출력 생성에 사용되지 않습니다.

파라미터 Min_LFSR_Length는 가장 짧은 LFSR의 길이를 지정하는 데 사용됩니다. 각각의 추가 LFSR마다 레지스터 스테이지가 하나씩 더 추가됩니다. 최대 레지스터 길이는 168입니다.

연산자에 필요한 리소스를 줄이려면 Min_LFSR_Length 파라미터를 줄이십시오. 동일한 Min_LFSR_Length를 사용하는 연산자가 둘 이상인 경우 두 연산자 모두 동일한 시퀀스를 생성합니다. 시드가 다르더라도 시퀀스는 동일하며, 시퀀스의 시작점만 변경됩니다.

Random Number Generator의 Quality

유사 난수 생성기는 진정한 난수 값을 생성할 수 없습니다. 효율적인 생성기 구현과 비결정적 타이밍 추가 덕분에 생성된 값의 Quality은 매우 높습니다. 다음에서는 구현의 Quality을 증명하기 위해 생성기에 적용된 두 가지 테스트 결과를 제시합니다.

  1. 균등 분포 테스트:

    8비트 난수 시퀀스가 생성되고 평균값이 결정됩니다. 평균값은 127.5 부근이어야 합니다. LFSR 이론에 따르면 시퀀스는 항상 균등하게 분포됩니다(모든 레지스터의 값이 0인 경우 제외).

    생성된 값의 히스토그램을 보면(예: microDisplay에서) 균등 분포를 확인할 수 있습니다.

  2. 스펙트럼 테스트:

    스펙트럼 테스트는 생성기의 직렬 상관관계를 테스트합니다. 생성된 시퀀스에서 어떠한 패턴도 보이지 않아야 합니다. 성능이 떨어지는 생성기는 2차원 또는 3차원 공간에서 초평면(hyperplane)을 나타냅니다. VisualApplets 생성기에는 초평면이 전혀 나타나지 않습니다.

    성능이 떨어지는 생성기의 예가 다음 그림에 나와 있습니다. C 프로그래밍 언어의 rand() 함수에 주로 사용되는 유명한 RANDU 생성기입니다.

PseudoRandomNumberGen을 사용한 VisualApplets 시뮬레이션

이 연산자는 VisualApplets에서 완전히 시뮬레이션할 수 있습니다. 그러나 비결정적 하드웨어 구현은 시뮬레이션을 위한 소프트웨어로 구현할 수 없습니다. 따라서 시뮬레이션에서는 Quality이 떨어지는 매우 단순한 난수 생성기가 사용됩니다(MS VisualStudio의 rand() 함수). 시드가 변경되지 않으면 연산자는 항상 동일한 시퀀스를 생성합니다.

I/O Properties

Property Value
Operator Type O
Input Link I, data input
Output Link O, data output

Supported Link Format

Link Parameter Input Link I Output Link O
Bit Width any1 [1, 64]2
Arithmetic {unsigned, signed} unsigned
Parallelism any as I3
Kernel Columns any 1
Kernel Rows any 1
Img Protocol {VALT_IMAGE2D, VALT_LINE1D, VALT_PIXEL0D, VALT_SIGNAL} as I
Color Format any VAF_GRAY
Color Flavor any FL_NONE
Max. Img Width any as I
Max. Img Height any as I

1

부호 없는 회조(gray) 값의 입력 Bit Width 범위는 [1, 64]입니다. 부호 있는 입력의 경우 범위는 [2, 64]입니다. 부호 없는 컬러 입력의 경우 범위는 [3, 63]이며, 부호 있는 컬러의 경우 범위는 [6, 63]입니다.

2 3

Parameters

Min_LFSR_Length
Type static parameter
Default random
Range [3, 168]

이 파라미터는 가장 짧은 LFSR의 길이를 지정합니다. 값이 높을수록 리소스 소비가 증가합니다.

다음 제약 사항에 유의하십시오.

Seed0
Type static/dynamic 읽기/쓰기 매개변수
Default random
Range [0, 2^64 - 1]

연산자 소개에서 설명한 바와 같이, 시드는 LFSR을 미리 초기화하는 데 사용됩니다. 연산자 인스턴스화 시 이 값들은 소프트웨어로 생성된 난수를 사용하여 초기화됩니다. 이 값들은 Acquisition 중에 변경할 수 있습니다. 파라미터 Seed2가 수정되면 세 파라미터의 값이 모두 래치됩니다.

Seed1
Type static/dynamic 읽기/쓰기 매개변수
Default random
Range [0, 2^64 - 1]

연산자 소개에서 설명한 바와 같이, 시드는 LFSR을 미리 초기화하는 데 사용됩니다. 연산자 인스턴스화 시 이 값들은 소프트웨어로 생성된 난수를 사용하여 초기화됩니다. 이 값들은 Acquisition 중에 변경할 수 있습니다. 파라미터 Seed2가 수정되면 세 파라미터의 값이 모두 래치됩니다.

Seed2
Type static/dynamic 읽기/쓰기 매개변수
Default random
Range [0, 2^64 - 1]

연산자 소개에서 설명한 바와 같이, 시드는 LFSR을 미리 초기화하는 데 사용됩니다. 연산자 인스턴스화 시 이 값들은 소프트웨어로 생성된 난수를 사용하여 초기화됩니다. 이 값들은 Acquisition 중에 변경할 수 있습니다. 파라미터 Seed2가 수정되면 세 파라미터의 값이 모두 래치됩니다.

사용 예제

PseudoRandomNumberGen 연산자의 사용법은 다음 예시와 같습니다: