我想使用仅含有静态噪声的.wav 文件生成一定范围内(1 到 26)的随机数。
结果需要可重复。
Windows 7 中是否有任何服务/程序/方法可以实现此目的?
答案1
尝试 Pythonscipy
模块,
import scipy.io.wavfile as sio
data = sio.read(FILENAME)
data = data[1].astype('float')
data -= data.min()
data *= 25.0*data.max()
data += 1
数据现在是一个向量,可以保存或用于进一步处理等。
例如,如果你只想将输出保存为 csv(逗号分隔值)文件,则可以使用
import csv
fout = open('output.csv', 'w')
wrt = csv.writer(fout)
wrt.writerow(data)
fout.close()
答案2
我使用 AM 无线电波或俗称的白噪声创建了真正的随机数文件。我在 Linux 中完成了这项工作,因此如果您想要这样做,请按照以下步骤操作。
- 使用具有 AM 功能的收音机。
- 将频率置于无线电频道之间的某个位置 - 您应该会得到来自无线电波和其他磁干扰的白噪声。
- 使用 Linux 发行版(基于 Debian/RedHat)- 我使用过 Ubuntu。
- 安装“sox”(捆绑)应用程序,其中有一个名为“rec”的小应用程序供您使用。
安装 sox 后,将麦克风放在扬声器上,以便它们可以录制“白噪音”,然后使用此命令:
rec -c 1 -r 8000 -t wav -e signed-integer randomWAVfile
简而言之:
- -c 1(您正在使用一个频道)
- -r 8000(采样率为 8000 Hz)
- -t wav (将文件格式化为 wav)
- -e 有符号整数(同时读取 16 位)
- randomWAVfile(文件名 - 根据个人喜好)
您将得到一个带有随机噪声的文件,该文件被“格式化”为 wav 文件(它包含 14 位的 wav 标头 - 如果我没记错的话)。
要剥离标题并“删除”潜在的重复项,请使用 Rick Van Reinn 用 C 语言编写的这个程序。
这不是一个大问题,但请注意,该程序中的转换不正确,并且你的 gcc 将开始抱怨。
源代码链接: Openfortress 源代码
通过程序推送文件:
cat randomWAVfile | ./noise-filter > randomBits
您将获得 TRNG 文件。
我通过此链接了解到了这一点。唯一不同的是,创建原始教程的人使用的是旧版 Linux,该版本使用 OSS(开放声音系统)而不是 alsa 进行操作。
原始帖子: Openfortress 原文链接
答案3
如果文件是 PCM 编码的,那么您可以使用 Python 的wave
模块读取文件中的样本,然后将值折叠到范围内。