【问题标题】:Correct way to generate random numbers生成随机数的正确方法
【发布时间】:2014-10-20 08:33:05
【问题描述】:

在“第 8 讲,白噪声和功率谱密度”的第 3 页上,提到 rand 和 randn 创建伪随机数。如果我错了,请纠正我:随机数序列是对于同一个种子,两个序列永远不会真正精确的序列。

然而,伪随机数是确定性的,即如果从同一个种子生成,两个序列是相同的。

我如何创建随机数而不是伪随机数,因为我的印象是 Matlab 的 rand 和 randn 函数用于生成完全独立的随机数?但是,幻灯片提到它们会创建伪随机数。谷歌搜索创建随机数返回 rand 和 randn() 函数。

区分随机数和伪随机数的原因是我需要比较密码学的性能(A)随机具有白噪声特性和(B)伪随机信号具有白噪声特性。因此,(A)必须不同于(B)。我将不胜感激任何代码以及生成随机数和伪随机数的正确方法。

【问题讨论】:

  • 不就是rand(n)命令比如randomGenerator=rand(2)
  • 我认为用软件生成实际随机数是不可能的... Matlab 中的伪随机信号发生器将具有白噪声特性,并且大多数统计软件模拟使用伪随机数。所以rand和randn是在Matlab中生成随机数的正确方法
  • 你需要使用“真”RNG vs pseudo RNG,还是pseudo RNG vs quasi-random RNG?
  • 我的意思是,那里有一篇学术论文展示了如何在“石头剪刀布”对抗人类时选择获胜策略,展示了即使人类也不是随机数生成器!
  • @SKM 从您发布的文章中可以清楚地看出,您可以不对 TRNG 使用 any 代码。为此,您需要一些专用于该任务的硬件。如果您必须使用软件来完成,那么我认为您最好从random.org 之类的网络服务中获取信息(如下面的答案中所述)

标签: matlab random


【解决方案1】:

“真实”随机数的生成是一项棘手的练习,您可以查看关于 RNG 的 Wikipedia 和随机性测试 (http://en.wikipedia.org/wiki/Random_number_generation)。此链接提供基于大气噪声的 RNG (http://www.random.org/)。

【讨论】:

  • +1 for random.org 我认为提供 TRNG 的网络服务是购买专用于该任务的硬件的唯一选择。
  • @Kostya:在您提供的链接中,右侧有一个工具可以输出某个范围内的单个随机数。我应该怎么做才能得到一个时间序列的随机数?
  • @SKM:看看网页上的数字部分,那里列出了几个选项
【解决方案2】:

如上所述,用计算机软件创建真正的随机数确实很困难(可能是不可能的)。互联网上有许多项目提供由物理过程生成的真实随机数(例如 Kostya 提到的那个)。一个特别有趣的是来自柏林 HU 的this。

话虽如此,对于您想要执行的实验,Maltab 的伪 RNG 非常好。 Matlab 的算法包括 Mersenne Twister,它是最著名的伪 RNG 之一(我建议您在谷歌上搜索 Mersenne Twister 的属性)。请参阅 Maltab rng 文档here。

由于您没有提及要模拟哪种类型的系统,解决您的问题的一种简单方法是对流程 A 使用好的 RNG(Mersenne Twister),而对流程 B 使用不太好的 RNG。

【讨论】:

  • 感谢您指出 Matlab 用于 Psuedo RNG 的算法。
  • 在这篇文章“非线性系统识别:蒸汽蒸馏中试装置的 PRBS 和随机高斯扰动的比较,2013 年 IEEE 第三届国际系统工程与技术会议,2013 年 8 月 19-20 日,马来西亚”中作者比较了随机高斯白信号和伪随机二进制序列之间的性能。因此,可能有一种方法可以从 rand()、randn() 生成随机高斯信号和伪随机信号。我进退两难。你能建议一种方法来生成这些吗?
  • @SKM 不幸的是,这篇论文是付费的,我无法阅读。看看这个 matlab 函数awgn。希望对您有所帮助。
猜你喜欢
  • 2013-04-14
  • 2013-10-10
  • 1970-01-01
  • 2015-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
相关资源
最近更新 更多