2011-02-03 110 views
0

我需要設計和構建一個8位僞隨機數發生器。我看過可能的方法;使用背景噪音,用戶輸入等。我想知道是否有人可以給我一些建議,從哪裏開始,因爲這對我會有很大的幫助。僞隨機數發生器項目

+0

這裏是一個[隨機數發生器列表](http://en.wikipedia.org/wiki/List_of_pseudorandom_number_generators)得到一些想法。 – 2011-02-03 14:06:23

回答

2

random.org也許是開始您的調查的最佳地點。

下面應該讓你開始從基礎

  1. howstuffworks.com
  2. Construct your own random number generator
+0

我已經看過並通過電子郵件發送了RANDOM.org的創建者。他建議看看Knuth的工作,但他的書太昂貴了,我的知識或編程遠不符合他的工作標準。 – 2011-02-03 13:52:23

0

我的計劃是使用溫度傳感器。當臨時工正在ADC中處理時,我將放大產生的噪音。然後這將給我隨機的8位數字,我需要它作爲stdlib(C編程)中PRNG的'種子'。 你覺得呢?

0

我發現以下工作得很好。這在MSP430彙編中實現,但很容易移植到另一個處理器。我用它來爲合成器項目生成「白色」噪聲,並且輸出中沒有可聽模式。根據你的要求,這可能就足夠了。它使用兩個狀態變量,前一個輸出(8位)和一個16位狀態寄存器。我在網上找到它,http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=95614&highlight=radbrad,它在AVR彙編中列出,並將它移植到MSP。

因爲它使用移位並將最高位從一個寄存器移到另一個寄存器的底部,所以它並不真正適用於C中的高效實現。我希望你發現這個和我一樣有用。

mov.b &rand_out, r13 
mov.b r13,r12 
and.b #66, r13 
jz ClearCarry 
cmp.b #66, r13 
xor.w #1, sr ; invert carry flag 
jmp SkipClearCarry 
    ClearCarry: 
clrc 
    SkipClearCarry: 
rlc.w &rand_state 
rlc.b r12 
mov.b r12,&rand_out 
ret