一、概念
白噪声(White Noise)
所有频率具有相同能量的随机噪声称为白噪声。白噪声的功率谱密度在整个频域内均匀分布。白噪声是一种功率频谱密度为常数的随机信号或随机过程。换句话说,此信号在各个频段上的功率是一样的,由于白光是由各种频率(颜色)的单色光混合而成,因而此信号的这种具有平坦功率谱的性质被称作是“白色的”,此信号也因此被称作白噪声。相对的,其他不具有这一性质的噪声信号被称为有色噪声。
白噪声的白是对于频域来说的。
理想的白噪声具有无限带宽,因而其能量是无限大,这在现实世界是不可能存在的。实际上,我们常常将有限带宽的平整讯号视为白噪音,因为这让我们在数学分析上更加方便。然而,白噪声在数学处理上比较方便,因此它是系统分析的有力工具。一般,只要一个噪声过程所具有的频谱宽度远远大于它所作用系统的带宽,并且在该带宽中其频谱密度基本上可以作为常数来考虑,就可以把它作为白噪声来处理。例如,热噪声和散弹噪声在很宽的频率范围内具有均匀的功率谱密度,通常可以认为它们是白噪声。
白噪声的概率密度函数(样本统计直方图)均匀分布,因此又称作均匀白噪声或随机噪声。
高斯噪声(Gaussian Noise)
是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声。高斯噪声的所谓高斯是对于幅度的概率密度分布来说的。
高斯白噪声
如果一个噪声,它的幅度分布服从高斯分布,而它的功率谱密度又是均匀分布的,则称它为高斯白噪声。热噪声和散粒噪声属于高斯白噪声。
所谓高斯白噪声中的高斯是指概率分布是正态函数,而白噪声是指它的二阶矩不相关,一阶矩为常数,是指先后信号在时间上的相关性。这是考查一个信号的两个不同方面的问题。
随机序列
随机数学中的概念,是指物理世界中随机出现的事件的不确定序列,它是随机产生,不可预测,不会重复的序列。由随机序列构成的信号称为随机噪声,即均匀白噪声。
伪随机序列
如果一个序列,一方面它是可以预先确定的,并且是可以重复地生产和复制的;一方面它又具有某种随机序列的随机特性(即统计特性),我们便称这种序列为伪随机序列。
伪随机序列具有某种随机特性,但其序列是确定的。它们是通常由数字计算机产生确定序列,然而他们却具有某种随机序列的随机特性。因为同样具有随机特性,无法从一个已经产生的序列的特性中判断是真随机序列还是伪随机序列,只能根据序列的产生办法来判断。伪随机序列系列具有良好的随机性和接近于白噪声的相关函数(δ函数),并且有预先的可确定性和可重复性。这些特性使得伪随机序列得到了广泛的应用,特别是在CDMA系统中作为扩频码已成为CDMA技术中的关键问题。
常用的伪随机序列有:m序列、Gold 序列、Walsh序列等。
伪随机序列是计算机产生各种噪声的基础。
(伪)随机数产生器(RNG)
是指产生(伪)随机序列(通常是整型)的算法或方法。
二、噪声产生方法
产生伪随机序列(白噪声)
关于伪随机序列的产生,目前有以下几种常用的算法:
● 线性同余算法(Matlab 4.0及之前版本采用 <rand函数>)
● Shift-Register 方法
● Lagged-Fibonacci算法(Matlab 5.0及之后版本采用 <rand函数>)
● Monte Carlo 方法
● Mid-square method, 1940s
● Mersenne Twister, 1988
● Combined Generators (Combine the outputs of two or more RNGs, eg, using)
◆ The universal generators
Combine 2 generators: Lagged Fibonacci, Xn+1 = (Xn - k) mod 1677213
◆ The KISS generator (Keep It Simple, Stupid)
Combine three simple generators: congruential generator, 3-shift generator, Multiply-with-carry generator
● Blum-Blum-Shub (BSS) generators, 1986
● The HAVEGE generator
伪随机序列衡量标准
● Fast, especially in simulation 快
● Well distributed (pass all statistical tests known)
● Independent 独立的
● Portable and reproducible 在不同的计算机能重复产生 (for verifying simulation results)
● Long periods (for deterministic RNGs) 长周期
● Unpredictable and irreproducible (for cryptography)
● Security 保密 (for cryptography)
● Large seed spaces (for deterministic RNGs) 种子的选择要够多
伪随机序列的质量检验
拟合优度测试(Goodness-of-fit test),用于测量产生的样本分布与期望分布之间的差异。
有以下几种常用的测试方法:
● Pearson's chi-square test
● The Kolmogorov-Smirov (KS) test (最常用)
● The Anderson and Darling (AD) test
统计检验—— The collision test (碰撞检验)
● Knuth's collection test
● NIST 建议的16种用于检验密码安全的统计测试
◆ Frequency (Monobit) Test
◆ Frequency Test within a Block
◆ Runs Test
◆ Tests for the longest Run of Ones in a Block
◆ Binary Matrix Rank Test
◆ Discrete Fourier Transform (Spectral) Test
◆ Non-overlapping Template Matching Test
◆ Overlapping Template Matching Test
◆ Maurer’s “Universal Statistical” Test
◆ Lampel-Ziv Compression Test
◆ Linear Complexity Test
◆ Serial Test
◆ Approximate Entropy Test
◆ Cumulative Sums (Cusum) Test
◆ Random Excursions Test
◆ Random Excursions Variant Test
● Diehard RNGs examining package (最常用)
◆ Birthday Spacings (三项必测之一,通过此三项测试即可通过其它所有测试)
◆ GCD (三项必测之一)
◆ Gorilla 大猩猩 (三项必测之一)
◆ Overlapping Permutations
◆ Binary Rank nn
◆ Binary Rank 68
◆ Monkey Tests OPSO, OQSO, DNA
◆ Count the 1’s
◆ Count the 1’s specific
◆ Parking Lot
◆ Minimum Distance
◆ Random Spheres
◆ The Squeeze
◆ Overlapping Sums
◆ Runs Up and Down
◆ The Craps
将伪随机数序列转为其它分布
一个RNG的输出是均匀分布(如[0, 2^32-1])的随机整数。但在实际应用中,我们经常使用其它分布的随机数,比如:
● Uniform in [0, 1) (均匀分布)
● Normal (正态分布) (即高斯噪声)
● Exponential (指数分布)
● Gamma (伽玛分布)
● Poisson
● Binomial (二项式分布)
这就需要转换。常用的转换方法有:
● Density distribution function (分布密度函数法)
● The acceptance-rejection method (接受-拒收法)
● The Monty Python Method (拼凑法)
● The Ziggurat method (速度快)
● The alias method for generating discrete variates
● The straightforward table look up method (查表法)
产生正态分布的伪随机序列(高斯白噪声)
依照上节内容,高斯白噪声的产生通常分为两步:先产生均匀分布的白噪声,然后通过均匀分布的白噪声获得高斯白噪声。
目前有以下几种常用的方法:
● Box-Muller 方法(Matlab 4.0及之前版本采用 <randn函数>)
● Ziggurat 方法(Matlab 5.0及之后版本采用 <randn函数>)
(待续……)