我有一个1KHZ三角波发生器,我正在使用模拟输入从PIC微控制器进行测量。三角波的频率源和模拟捕获是独立的频率源。ADC捕获速度为100ksps,精度为12[编辑:10]可用位。
为了生成真正的随机数,我想估计模拟样本中包含的熵。我已经确定的熵的两个来源是开尔文噪声和频率源偏移。
从捕获的波形中,我可以每秒连续区分大约两个频率,并且我将平均每秒捕获一个开氏输入阈值扰乱事件。所以我的估计大约是每秒两比特的熵。
有人能想出一种方法来证明更大的熵估计是合理的吗?
根据S.O.上已经发布的类似问题的答案,我将添加以下澄清:
我对熵源的其他想法并不特别感兴趣,因为我仍然需要回答这些替代源的相同问题。
对数据本身进行自相关或其他随机性测量的分析并不是正确的答案,因为它们会非常乐观。
我取得了一些进步,可能会对其他人有所帮助。
主要资源http://en.wikipedia.org/wiki/Johnson%E2%80%93Nyquist_noise
引脚电容将可测量的热噪声量限制在ADC带宽内的20uV。对于各种各样的控制器来说,这应该或多或少是相同的。在信号和引脚之间使用约10K的电阻器。较小的值将减少噪声,但会增加可能的采样率。
信号不需要是随机的。它只需要在至少几个离散输入步长的范围内均匀分布即可。请注意,在与输入相同的时钟域上向GPIO输出可能不满足此要求。
使用动态范围为3.3V的10b ADC,每个离散步长为3mV。每个样本的熵约为20uV/3mV=每个样本0.006位。
还要注意,这不需要模拟输入。你可以用数字输入来做,但仓的大小会大得多(1V?),答案更像是每个样本0.000018位。因此,每毫秒获取一个输入样本,生成一个64位的随机种子大约需要一个小时。
NIST出版物SP800-90B建议将最小熵作为熵度量。然而,测试熵源的最小熵是不平凡的。参见NIST SP800-90B,了解进行此类测试的一种方法。
如果我们谈论的是"物理学"熵,那么您的问题就偏离了主题。但我们可以很容易地对模拟信号进行采样,将其转换为数字波形,然后在信息理论背景下讨论入口复制。
测量数字信号中熵的一种简单而准确的方法是尝试使用可用的最佳方法对其进行压缩。压缩比越高,信息内容就越小。
如果您的目标是生成随机位以生成种子(如其他答案中所暗示的),那么一种有用的方法是使用通用压缩算法压缩从环境中采样的随机性(键盘敲击、鼠标移动、模拟系统),然后丢弃字典。剩下的将具有重要的信息内容。