我需要设计和构建一个8位伪随机数发生器。我看过可能的方法;使用背景噪音,用户输入等。我想知道是否有人可以给我一些建议从哪里开始,因为这对我有很大的帮助。
答案 0 :(得分:2)
答案 1 :(得分:0)
对于简单的8位PRNG,您可以使用Linear Feedback Shift Register之类的东西。这在软件或硬件中实现起来非常简单。
答案 2 :(得分:0)
我的计划是使用温度传感器。当在ADC中处理温度时,我将放大产生的噪声。这将为我提供我需要的随机8位数,它将用作stdlib(C编程)中PRNG的“种子”。 你觉得怎么样?
答案 3 :(得分: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