利用伪随机序列理论产生均匀分布的随机序列
利用伪随机序列理论产生均匀分布的随机序列
进而产生高斯白噪声
摘 要:本文介绍了利用伪随机序列理论产生均匀分布的随机序列,进而产生高斯白噪声。高斯白噪声生成分两步实现。本文介绍这两步中的主流算法,并对其性能进行了分析;讨论了该算法组合的具体实现,包括加入对高斯白噪声均值和方差的控制。
关键词: 均匀分布随机变量 高斯白噪声 线性同余法
目前,为获得参数可调的高斯白噪声,一般采用数字方法产生。数字方法产生分为两步:先产生均匀分布的白噪声,然后通过均匀分布的白噪声获得高斯白噪声。在这两步中均有多种方法可以选择。
1 均匀分布白噪声生成算法的选择
目前,有三种常用的均匀分布白噪声生成算法:线性同余算法、Shift-Register方法和Lagged-Fibonacci算法。
对三种算法的性能进行测试,包括随机数在分布上的均匀性、随机数在随机序列中分布的均匀性和随机序列种子序列的依赖关系等内容。就性能而言,lagged-Fibonacci算法采用乘最好,lagged-Fibonacci算法采用加或减次之,线性同余法又次之。
从实现角度,Shift-Register方法、lagged-Fibonacci算法采用异或和lagged-Fibonacci算法采用加或减只需要移位、异或和加减法等操作,适合FPGA实现。而线性同余算法和lagged-Fibonacci算法采用乘需要乘法操作,适合编程实现。
根据以上判断,结合实际情况,采用线性同余法算法来实现产生均匀分布的随机序列。
2. 均匀分布白噪声产生高斯白噪声算法的选择
目前,比较常用的有地址方法和公式方法。
(1) 查阅相关资料,可以知道两种方法产生高斯白噪声的性能相近。
(2) 从实现角度,前者具体实现时,产生高斯白噪声速度比较快,但需要使用Rom来保存映射关系。为获得较高性能的高斯白噪声,需要大容量的Rom。后者具体实现时,不需要使用大容量的内存,但需要n个均匀白噪声才可以产生一个高斯白噪声,产生速度比较慢。
(3) 根据以上判断,结合实际情况,采用公式方法。
3. 实际使用
综合前面,采用线性同余法算法和公式方法的组合来实现高性能高斯白噪声。并且考虑加入对高斯白噪声的均值和方差的控制!程序流图如下:
(1)均匀白噪声模块中,采用线性同余法。 开始
产生随机数种子
产生一个随机数
N个随机数(近似白噪声)
根据给定的期望与方差产生一般高斯随机数
产生M个点的高斯白噪声序列 计算概率密度
计算概率密度
计算实际的方差与期望,与理论相比较 保存 保存
根据定理,产生标准高斯随机数
这里使用的算法表达式如下:
选取足够大的正整数M和任意自然数n0,a,b,由递推公式:
ni+1=(a*f(ni)+b)mod M i=0,1,…,M-1
生成的数值序列称为是同余序列。当函数f(n)为线性函数时,即得到线性同余序列:
ni+1=(a*ni+b)mod M i=0,1,…,M-1
以下是线性同余法生成伪随机数的程序段:
void uniform(double a,double b,long int *seed)
{ double t;
*seed=2045*(*seed)+1;
*seed=*seed-(*seed/1048576)*1048576;
t=*seed/1048576.0;
t=a+(b-a)*t;
return t;
}
其中种子参数seed可以任意选择, a,b可以是0.01w和0.99w之间的任何整数(w是一个字长)。
应用递推公式产生均匀分布随机数时,式中参数a,b的选取十分重要。
重复操作,获得均匀分布的随机序列。
得到的序列如图:
由公式E(x)= NiixN11得序列的期望,其值为0.505151,与理想值0.5十分接近。
由统计各区间所含序列点数,绘得概率密度曲线如下图:
曲线在0.9与1.1之间波动,与理想曲线接近。
(2)高斯白噪声模块中,采用公式法。
中心极限定理 如果大量的随机变量组成一个随机变量,即
Y= ,且每个随机变量Xi对总量Y的影响足够小,在N趋近于无穷大时,Y(近似)服从正态分布,与Xi的分布律无关。
公式方法取N=12时,分布已经接近高斯分布了。即对产生的12个均匀白噪声按表达式进行操作来获得高斯白噪声。
在获得高斯白噪声后,通过乘法器和加法器实现高斯白噪声方差和均值的调节就得到了参数可调的数字高斯白噪声。因为对高斯分布x,通过变换y=μ+σx,可以获得均值为μ、方差为σ2的高斯分布y。
程序段如下:
//每产生M个高斯点中的一个点需要N_perpoint个均匀分布的随机数。
//N_perpoint越大越精确
//该程序产生M个均值为MeanNeed,方差为SigmaNeed2的高斯随机数
for(i=0;i { gauss[i]=0; s=s+i;//修改每次的种子,使产生不同的变量 for(n=0;n { x[n]=uniform(a,b,&s);//产生均匀分布的随机变量 gauss[i]=gauss[i]+sqrt((float)12/N_perpoint)*x[n]; NiXi1 } gauss[i]=gauss[i]-(float)sqrt((float)12/N_perpoint)* (N_perpoint/2); gauss[i]=(float)(MeanNeed+SigmaNeed*gauss[i]); mean=mean+gauss[i]/M;//计算实际得到噪声的期望 } for(i=0;i sigma=sigma+(gauss[i]-mean)*(gauss[i]-mean)/M; //计算实际得到噪声的方差 产生的高斯白噪声序列如下图:(期望为0,方差为1,序列长度为1000) 得到的序列期望为0.009893,方差为1.028599,与设定值接近。 统计各区间所含序列点数,绘得概率密度曲线如下图: 与理想曲线接近。 由此说明,采用线性同余法算法和公式方法的组合可以产生高斯白噪声。 参考文献: 1. 盛骤 谢式千 潘承毅,概率论与数理统计,高等教育出版社,2008.04 2. 常建平 李海林,随机信号分析,科学出版社,2008.12 3. 程序见CSDN
matlab rand用法
matlab rand用法
Matlab是一种基于数学计算的软件,专为科学家和工程师设计。Rand是Matlab用来生成随机数的函数之一,它可以产生均匀分布的伪随机数。下面就来介绍一下Matlab rand函数的用法。
使用rand函数生成随机数
rand函数可以生成从0到1之间的随机数,输出是一个double类型的向量或矩阵。以下是rand函数的使用方式:
1.生成一个1 × 1 的随机数:
rand
2.生成一个1 × 3的随机数:
rand(1,3)
3.生成一个3 × 3的随机数矩阵:
rand(3,3)
4.使用rand函数生成一定数量的随机数:
rand(1,1000)
在rand函数中,第一个参数代表行数,第二个参数代表列数。如果省略列数,则rand函数默认生成一行随机数。在生成随机数之前,可以使用rand('seed',s)函数来设定随机数生成器的种子,以确保每次都能得到相同的随机数序列。
使用randn函数生成正态分布的随机数
randn函数可以生成服从正态分布的随机数,输出是一个double类型的向量或矩阵。以下是randn函数的使用方式:
1.生成一个1 × 1的随机数:
randn
2.生成一个1 × 3的随机数:
randn(1,3)
3.生成一个3 × 3的随机数矩阵:
randn(3,3)
4.使用randn函数生成一定数量的随机数:
randn(1,1000)
在使用randn函数时,也可以像rand函数一样使用randn('seed',s)函数来设定随机数生成器的种子。如果需要生成均值为m,标准差为s的正态分布随机数,可以使用 m + s * randn()。
总结
在Matlab中,使用rand函数可以生成均匀分布的伪随机数,使用randn函数可以生成服从正态分布的随机数。需要注意的是,在生成随机数之前可以使用rand('seed',s)或randn('seed',s)来设定随机数生成器的种子,以确保每次都能得到相同的随机数序列。
任意概率分布的伪随机数研究和实现
任意概率分布的伪随机数研究和实现
介绍:
在计算机科学和概率论中,伪随机数是通过一定的算法生成的序列,看上去具有随机性的数值。这些数值是通过按照其中一种规则变换生成的,并不是真正的随机数。伪随机数在现代计算机科学中被广泛应用于模拟、密码学、统计等领域。
一、统计模型
统计模型是通过使用统计学方法来拟合一定的概率分布,并生成满足该概率分布的伪随机数。常见的统计模型包括正态分布、均匀分布、泊松分布等。
正态分布可以使用Box-Muller转换方法生成伪随机数。该方法通过使用两个独立且均匀分布的伪随机数和一些数学变换,生成满足标准正态分布的伪随机数。进一步,通过线性变换可以生成满足任意均值和标准差的正态分布的伪随机数。
二、逆变换方法
逆变换方法是通过随机抽取[0,1]上的均匀分布随机数,然后使用概率密度函数的逆函数来生成满足特定概率分布的伪随机数。
例如,对于指数分布,可以通过使用指数函数的逆函数生成满足指数分布的伪随机数。具体实现时,可以使用负对数函数实现指数函数的逆函数。
三、接受拒绝方法 接受拒绝方法是通过生成一个包围目标概率分布的辅助分布,然后在该辅助分布上生成随机数,然后根据一定的判别条件决定是否接受或拒绝该随机数。如果接受,则该随机数满足目标概率分布。
一个常用的接受拒绝方法是使用均匀分布作为辅助分布。具体步骤是先生成两个独立均匀分布的伪随机数x和y,然后计算y在辅助分布上的概率密度函数值,与目标概率分布的概率密度函数值进行比较。如果y小于目标概率分布的概率密度函数值,则接受x;否则,拒绝x。
总结:
以上介绍了任意概率分布的伪随机数生成的几种常见方法,分别基于统计模型、逆变换方法和接受拒绝方法。这些方法可以根据具体的需求选择合适的途径来生成满足特定概率分布的伪随机数。
然而,虽然伪随机数在应用中具有高效和便捷的特点,但并不适用于安全敏感的场景。在密码学中,需要使用真正的随机数来确保安全性,例如通过硬件设备生成的真随机数。
伪随机序列
伪随机序列
扩频通信技术在发送端以扩频码进行扩频调制,在接收端以相关解扩技术进行收信,这一过程使其具有诸多优良特性,即抗干扰性能好、隐蔽性强、干扰小、易于实现码分多址等。
扩频调制即是将扩频码与待传输的基带数字信号进行模二叠加(时域相乘)。扩频调制后的信号还需经过载波调制后才可发送至信道。而接收端则采用相干解扩和解调,恢复出原始数据信息,以达到抑制干扰的目的。
扩频调制是通过伪随机码或伪随机序列来实现的。从理论上讲,用纯随机序列来扩展信号的频谱是最重要的,但是接收端必须复制同一个伪随机序列,由于伪随机序列的不可复制性,因此,在工程中,无法使用纯随机序列,而改为采用伪随机序列。
各类扩频通信系统都有伪随机编码序列,而且具有良好随机特性和相关特性的扩频编码对于扩频通信是至关重要的,对扩频通信的性能具有决定性的重要作用。在扩频通信系统中,抗干扰、抗截获、信息数据隐蔽和保密、多径保护和抗衰落、多址通信、实现同步捕获等都与扩频编码密切相关。能满足上述要求的扩频编码应具有如下的理想特性:
(1)有尖锐的自相关特性;
(2)有处处为零的互相关;
(3)不同码元数平衡相等;
(4)有足够的编码数量;
(5)有尽可能大的复杂度。
m序列
m序列是最长线性移位寄存器序列的简称。顾名思义,m序列是由多级移位寄存器或其延迟元件通过线性反馈产生的最长的码序列。在二进制移位寄存器中,若n为移位寄存器的级数,n级移位寄存器共有2n个状态,除去全零状态外,还剩下2n-1种状态,因此它能产生最大长度的码序列为2n-1位。故m序列的线性反馈移位寄存器称做最长线性移位寄存器。
产生m序列的移位寄存器的电路结构,即反馈线连接不是随意的,m序列的周期P也不能随意取值,而是必须满足:
P=2n-1
部分m序列的反馈系数Ci如下表所示:
级数n 周期P 反馈系数Ci(八进制)
3 7 13
4 15
23
5 31 45,67,75
GPS-伪随机序列
卫星导航理论与系统
有关GPS中伪随机序列的论述
一简介
近年来,卫星导航定位系统,特别是美国的全球定位系统(GPSGlodbalPositionSystem)发展极为迅速。已经成为我们生活中的一个不可或缺的实用工具。GPS能够为地球表面和近地空间的广大用户提供全天候、实时、高精度的位置、速度和时间等导航服务信息。GPS在信号传输中,充分利用了伪随机码扩频技术。在GPS中,导航卫星向用户发送的导航定位信号,是一种已调波,这种已调波中有电文信息和扩频波形(伪随机序列)。由此看来,伪随机码在导航电文的发送过程中有着极其重要的作用。本文主要对伪随机码的产生和特性进行论述。
二m序列
伪随机序列的一般定义是:如果一个人为确定结构的序列,一方面它是可以预先确定的,可重复产生和复制。另一方面这个序列具有近似随机的统计特性,就可以称它为伪随机序列。
现代科学中常用的伪随机序列有m序列、Gold序列、M序列、Walsh序列等,而GPS中用到的伪随机序列是Gold序列,Gold序列是由m序列优选对进行模相加后得来的,他和伪随机序列中最基本的序列m序列有很多类似的性质。但是也有不同的地方,在这里,先简要介绍m序列,再通过对这2个序列的比较来认识介绍Gold序列。也就是GPS中的PRN码。
m序列是最长线性反馈移位寄存器的简称,它是由带线性反馈的移存器产生的周期最长的序列。它的最长周期等于21n,它有和白噪声类似的特性:
1.均衡性:在m序列中“1”比“0”多出现一次,体现出良好的均衡性。
2.游程分布特性:m序列中游程共有12n个,其中0游程和1游程各占一半。
3.移位相加特性:m序列经循环移位后再与原序列模相加,得到的是原序列或是经过移位产生的序列。
还有一种特性叫自相关性和互相关性,m序列的自相关函数是一个双值相关函数,所以峰值很明显,即有着尖锐的自相关性。而周期相同的不同m序列组,其两两之间的互相关特性差别却很大,有的m序列对的互相关特性良好,有的则较差,互相关性好的m序列可以组成m序列优选对。这是产生Gold序列的基础。
Matlab随机数产生的问题
Matlab随机数产生的问题
2009-02-13 08:13
这2天发现这个问题讨论较多,所以就搜索了一些资料。发现自己之前的理解有些很有问题,同时欢迎大家继续讨论。先澄清一下几个容易弄错的地方(也不一定全对)
(1)用计算机产生的是“伪随机数”。用投色子计数的方法产生真正的随机数 ,
但电脑若也这样做 , 将会占用大量内存 ; 用噪声发生器或放射性物质也可产生真正的随机数 , 但不可重复 . 而用数学方法产生最适合计算机 , 这就是周期有限 , 易重复的 ” 伪随机数 ”
(2)随机数的产生需要有一个随机的种子,因为用计算机产生的随机数是通过递推的方法得来的,必须有一个初始值。
(3)用同一台电脑,且在初始值和递推方法相同的情况下,可以产生相同的随机序列(由于以前每次使用randn或者rand得到都是不同值,所以曾经误以为相同的seed无法产生相同的序列)
[size=2][color=red][b]一 matlab里产生随机数的方法[/b][/color][/size]
matlab里和随机数有关的函数:
(1) rand:产生均值为0.5、幅度在0~1之间的伪随机数
(2) randn:产生均值为0、方差为1的高斯白噪声
(3) randperm(n):产生1到n的均匀分布随机序列
(4) normrnd(a,b,c,d):产生均值为a、方差为b大小为cXd的随机矩阵
还有很多的扩展函数,不再一一列出。不过他们都调用的是rand或者randn函数,由此可见在matlab里rand和randn是产生随机数的关键所在。看来只有看他们的源文件了
function [varargout] = randn(varargin)
%%%help 文档的内容略去%%%
if nargout == 0
builtin('randn', varargin{:});
else
[varargout{1:nargout}] = builtin('randn', varargin{:});
对数正态分布伪随机数的产生与检验
第27卷第6期 2007年11月 天 津 商 学 院 学 报 Journal of Tianjin University of Commerce Vo1.27 No.6 Nov.2Oo7
对数正态分布伪随机数的产生与检验
滕建辅 ,梁静毅 ,滕 颖
(1.天津商业大学信息工程学院,天津300134;2.天津大学电子信息工程学院,天津300072)
摘要:本文给出了一种产生对数正态分布伪随机数的算法以及相应的检验方法,产生的均匀分布随机序列,经近 似抽样产生正态分布的随机数,再经变换抽样最终产生对数正态分布的随机序列。采用卡方检验验证其是否符合 对数正态分布。计算实例表明,所给出的方法具有产生伪随机数速度快、数量大、方差小和较长的周期等特点,具 有较大的工程实用价值。计算结果验证了所给方法的正确性。 关键词:伪随机数;均匀分布;正态分布;对数正态分布;卡方检验;工程模拟 中图分类号:O 211 6 文献标识码:A 文章编号:1001—0262(2007)06—0001—05
随着计算机仿真技术的发展,伪随机数的产生
引起了许多学者的关注 J。伪随机数发生器广泛
应用于电子电路的成品率设计、蜂窝移动通信系统
的小区容量分析、CDMA关键技术的仿真、数字水印
技术、DVB信道编解码与调制解调以及信息安全等 诸多领域。
对于一个高质量的伪随机数发生器,它所生成
的伪随机数序列应具有不相关性,即序列的任意数
值间相互独立。理想的伪随机数系列应是串行不相
关的,也就是说序列中的任何一个子序列与其他子
序列之问应是不相关的。其次,生成的伪随机数序 列应具有均匀性,即满足一个确定的概率分布。
伪随机数发生器在满足上面特点的同时,所生
成的伪随机数还应具有长的周期。理想的随机数序
列的周期应该是无限长的,但对于由一定算法产生 的伪随机数其必然有一定的周期性,导致随机数出
现一定的相关性和重复性。伪随机数发生器研究的
伪随机序列的应用
3.3. 伪随机序列的应用
一、误码率测量
在数据通信中,经常要测试通信系统的性能。误码率是通信系统的主要质量指标,通信系统的性能往往与信源的统计特性有关。通常认为信源的0、1是等概出现的。
误码率的测量框图如下所示:(结合系统的仿真)
环路测试:
单向测试:
二、时延测量
时延测量在许多领域中都十分有用:如地底深度探测、无线测距等。
时延测量的一般思路:周期脉冲测量法。产生窄周期脉冲,时延线的精度,发送功率。
时延测量的m序列应用:用m序列代替周期脉冲,用相关器代替时延比较器。测量方法的精度取决于m序列的码片时间。
三、噪声产生器
测量通信系统的性能时,经常需要使用噪声产生器,由它给出具有所要求的统计特性和频率特性的噪声,并且可以随意控制其强度,以便得到不同的信噪比条件下的系统性能。
四、通信加密
五、数据序列的扰乱与解扰
扰码的目的是使信源的0、1分布等概。
六、扩展频谱通信
仙农定理告诉我们:可以用带宽换信噪比,即在低信噪比的情况下,可以通过增加带宽的应用来进行无误的传输。
可以有3种方法实现带宽的扩展:
1、直接序列调制扩频
直接序列调制扩频的原理框图如下:
它用比信息速率高得多的序列去调制信息序列,从而改变整个信号的带宽。
在接收端通过调制序列的相关性达到解调的目的。实际上它等效于一种正交编码。
2、跳频
发射机的发射频率根据一定的规则随机地在一定范围内变化。
3、Chirp调频(线性调频,连续调频)
由于扩频通信采用宽频带的技术来传输信息,它具有抗窄带干扰、信号功率低隐蔽性强、抗衰落能力强的特点,因此在无线领域、军用领域得到了广泛的应用。
七、分离多径技术
3.4. 直接序列扩频
一、系统组成
直扩系统的框图如下:
)cos()()()(0ttPtmts
ttPtntstq0cos)())()(()(
))cos(()()(0ttAmtyr
各点的频谱关系如图示。
伪随机序列 2
《通信信号处理》专题
姓名:杨晶超
学号:s20070416
1 目 录
1 伪随机序列的概念
2 伪随机序列的相关函数
3 m序列
• 3.1 m序列的定义
• 3.2 m序列的构造
• 3.3 m序列的性质
• 3.4 m序列的相关性
4 M序列
5 Gold序列
• 5.1 m序列优选对
• 5.2 Gold序列的产生方法
• 5.3 Gold序列的相关特性
6 伪随机序列的应用
• 6.1 扩展频谱通信
• 6.2 码分多址(CDMA)通信
• 6.3 通信加密
• 6.4 误码率的测量
• 6.5 数字信息序列的扰码与解扰
• 6.6 噪声产生器
• 6.7 时延测量
2 1 伪随机序列的概念
扩频系统的扩频运算是通过伪随机序列来实现的。从理论上来讲,用纯随机序列来扩展信号的频谱是最理想的,但是接收端必须复制同一个随机序列,由于随机序列的不可复制性,因此在工程中,无法使用纯随机序列,而改为采用伪随机序列。
随机序列通信的基本理论源于香农的编码定理。香农编码定理指出:只要信息速率Rd小于信道容量C,则总可以找到某种编码方法,使得在码字相当长的条件下,能够几乎无差错地从高斯白噪声干扰的信号中恢复出原发送的信号。
伪随机序列应当具有类似理想随机序列的性质。在工程上常用二元{0,1}序列来产生伪随机序列,它具有以下三个特点:
(1)随机序列中的“0”的个数和“1”的个数接近相等;
(2)随机序列中长度为1的游程约占游程总数的1/2,长度为2的游程约占游程总数的(1/2)2,长度为3的游程约占游程总数的(1/2)3…… 在同长度的游程中,“0”的游程数和“1”的游程数大致相等;
(3)随机序列的自相关函数具有类似白噪声自相关函数的性质。
2 伪随机序列的相关函数
(1) 凡自相关函数满足
1201011,011,0NiiaNiijiajNRjaajNN
m序列伪随机码产生及应用仿真matlab
序列伪随机码产生及应用仿真matlab
一、概述
随机序列是一种具有随机性质的数字序列,可用于信息传输、通信系统、密码学、雷达等领域。伪随机序列是一种经过数学算法产生的序列,其具有类似与随机序列的统计特性,但实际上是确定性的。在通信系统中,伪随机序列广泛应用于码分多址技术、扩频通信、混沌通信等领域。本文将介绍伪随机码的产生原理,并使用matlab进行仿真实现,以加深对该技术的理解。
二、伪随机码的产生原理
伪随机码的产生主要包括线性反馈移位寄存器(LFSR)、加法(XOR)运算和乘法(AND)运算等步骤。下面以LFSR为例,介绍伪随机码的产生原理。
1. LFSR原理
LFSR是一种利用移位寄存器和反馈逻辑电路构成的伪随机码产生器。在LFSR中,存在一个移位寄存器和一个反馈逻辑电路。移位寄存器中存储了若干比特的信息,经过时钟信号的控制完成信息的移位操作。而反馈逻辑电路则根据寄存器中的信息产生反馈信号,从而实现伪随机序列的产生。
2. 伪随机码的产生过程 (1)初始化LFSR。将移位寄存器中的初始状态设置为一个非零的值。
(2)循环移位寄存器。根据时钟信号的控制,移位寄存器中的信息进行移位操作。
(3)根据反馈逻辑电路的输出,生成伪随机序列。通过反馈逻辑电路生成的反馈信号,即为伪随机序列的一部分。
三、matlab仿真实现
matlab是一种功能强大的科学计算软件,具有丰富的绘图和仿真功能。下面将使用matlab进行伪随机码的产生和仿真实现。
1. 产生伪随机码
在matlab中,可以使用shiftregister函数实现LFSR的移位寄存器功能。结合matlab的位运算功能,可以方便地实现伪随机码的产生。以下是一个简单的matlab代码示例:
```matlab
定义LFSR的初始状态
state = [1 0 1 0 1];
定义LFSR的反馈多项式
polynomial = [5 2];
java 生成随机数原理
java 生成随机数原理
生成随机数是Java编程中常用的功能,遍布在各种应用领域。在Java中,生成随机数的理论基础是伪随机数生成器(Pseudo-Random Number Generator,PRNG)。伪随机数生成器是一种算法,根据一定规则生成一系列看似无规律的数列,用于模拟真实的随机数,但实际上是有规律的,并不能真正满足真正意义上的“随机”。
Java中自带了一个随机数生成器类:java.util.Random。它的生成原理是以系统当前时间为种子,再用种子值通过一个算法计算出一系列看似无规律的数列。因此,每次创建Random对象时,都会使用不同的种子值,生成不同的随机数序列(除非在创建Random对象时手动设置了seed种子值)。在每次生成随机数时,Random对象使用了一个精心设计的算法来生成下一个随机数,这些算法必须满足一下原则:
1. 易于计算 – 随机数生成器的算法必须是轻松计算的,否则就无法满足高效性的要求。
2. 在随机数被假名为接收者前无法预测 – 程序无法预知随机数生成器生成的值,这是制造真正的随机性的必要条件。
3. 均匀分布的数字 – 生成器的算法必须是均匀分布的,否则就会生成大量的某些数,而对其它值几乎没有覆盖。
Java中的Random类提供了nextInt(),nextDouble()等方法,用于生成不同类型的随机数。通过这些方法产生的随机数是一系列介于0.0到1.0(大多数)之间的数字,这些数字可以被映射到要生成的范围内,例如范围在0和100之间的整数。下面是一个简单的示例代码:
在上述代码中,RandomNumberGenerator 类中生成了5个介于0和100之间的整数。因为Random类使用当前时间作为种子,所以每次运行程序都会得到不同的结果。
在Java中,有时候我们需要保证生成的随机数是相同的,例如在测试中我们需要重现某段代码的执行结果。为了实现这个目标,我们可以在Random类的构造函数中传入一个确定性的种子值,这个种子值保证在相同的环境下生成的随机数序列是相同的,示例如下:
