一种实用的随机序列生成方法

一种实用的随机序列生成方法
一种实用的随机序列生成方法

Computer Knowledge and Technology 电脑知识与技术网络通讯及安全本栏目责任编辑:冯蕾第7卷第9期(2011年3月)一种实用的随机序列生成方法

倪安胜1,汤池2

(1.西安通信学院一系陕西西安710106;2.第四军医大学生物医学工程系,陕西西安710032)

摘要:采用PC 声卡随机噪声作为随机源,使用安全散列算法(SHA-256)对采集到的随机源序列进行处理,形成一种随机序列产生方法。依照FIPS14022标准对产生的随机序列进行测试,结果表明该随机序列的生成方法可行、实用。

关键词:PC ;随机序列;密码生成

中图分类号:TP311文献标识码:A 文章编号:1009-3044(2011)09-1991-02

A Practical Method of Random Sequences Producing

NI An-sheng 1,TANG Chi 2

(1.Xi'an Communications Instutute,Xi'an 710106,China;2.The Fourth Military Medical University,Xi'an 710032,China)

Abstract:Utilizing the noise of PC soundcard as random resource to obtain random sequences,which was then processed by the secure hash algorithm SHA-256.Thus a method of random sequences producinging was made.The random sequences were tested according to American standard FIPS14022.It shows that the method is feasible and practical with the testing results.

Key words:PC;random sequences;password generator

随机数在密码学中发挥重要作用,如密钥管理、加密解密、数字签名、身份认证等都需要用到随机数,密码系统的安全性一般依赖于随机数的生成[1]。理想情况下,密钥应当是真正随机的。随机数是通过随机二进制序列组合而成的,目前用于产生随机二进制序列的方法主要有两类[2]:一种是通过一定的算法由软件或电路生成随机序列,称为伪随机序列,是可以重复产生的;另一种是通过物理现象,如振荡器的频率不稳定性、放射性衰减期间粒子散发的时间间隔、电阻器热噪声、混沌现象等生成随机序列,这类序列具有不可预测性,不可重复,在密码学意义上是安全的。

通过算法不能实现真正的随机数,因此一般通过使用硬件随机数生成器的方法来获取真随机数。但是这种方法增加了成本,不适合低成本应用程序开发和小型项目应用。PC 上有许多可供利用的随机源,如:硬盘磁道寻道时间、鼠标键盘响应时间、网络数据包校验码、缓冲区数据等。有关研究表明[3-4],利用PC 附带的随机源生成随机数,可以满足低成本应用程序和小型项目开发的要求。目前,PC 声卡早已经成为标准的配置,绝大部分主板都内置了声卡。因此,选用声卡噪声作为随机数发生源无需额外增加开发成本,具有较强的代表性。本文以麦克风和声卡作为随机信号的采集设备,以DirectX 中的Sound API 函数进行信号获取,采用Microsoft Visual C++.net 2005完成软件设计。

1基本原理

PC 在使用中,麦克风采集到的声音信号含有随机噪声,声卡将该信号采样后传送给主机,一般情况下采样频率为44.1KHz ,采样精度为16bits ,采样数据末若干位将由于含有噪声信号表现出随机性。因此,可以用采样信号的末若干位(一般少于等于2位)来初步组合随机序列。当随机序列达到一定长度时,使用美国国家标准和技术协会(NIST)

公布的安全散列标准算法SHA-256,对其进行散列变换,增强序列的随机性,形成一个

256位的随机序列。根据要求的随机序列长度,进行多次随机序列生成组合。随机序列

生成组合过程如图1所示。

2测试及结果

2.1测试标准

对随机序列的统计学测试方法有许多种,这些方法虽能从各个侧面统计序列的均

匀行和独立性,但没有统一的参数指标进行比较。美国NIST 在FIPS 14022中提出了基

于密码系统的安全标准[5],其中包括随机序列发生器的测试方法和合格标准,测试方法

主要有:monobit 测试、poker 测试、runs 测试及long runs 测试。要求从产生的随机序列

中选取20000位连续的0-1比特流进行实验。该测试简化了统计检验标准,更具操作性与比对性。2.1.1monobit 测试

计算比特流中1的个数。当1的个数在9725~10275范围之内时表示随机数发生器通过monobit 测试。

2.1.2poker 测试

将20000位的比特流每4位分1组共5000组,每组有16种可能取值i (i =0,1,…15),计算5000组中每组可能取值的数量f 收稿日期:2011-01-08

作者简介:倪安胜(1976-),男,安徽无为人,讲师,主要研究方向为网络信息安全。

图1随机序列生成组合示意图

E-mail:info@https://www.360docs.net/doc/5212422960.html, https://www.360docs.net/doc/5212422960.html, Tel:+86-551-56909635690964ISSN 1009-3044

Computer Knowledge and Technology

电脑知识与技术Vol.7,No.9,March 2011,pp.1991-19921991

Computer Knowledge and Technology 电脑知识与技术本栏目责任编辑:冯蕾网络通讯及安全第7卷第9期(2011年3月)(i),根据下式求X 的值

若2.16<X <46.17,则通过poker 测试。

2.1.3runs 测试

run (游程)是指序列中连续为1或0的最大位序列,其中1或0的个数称为游程的长度。统计20000位测试序列中不同长度游程的数量。如果长度从1到5的游程(包括1和0的游程)数量均满足相应的区间范围:2343~2657,1135~1365,542~708,251~373,111~201,长度大于等于6的游程数量满足区间范围:111~201,则通过runs 测试。

2.1.4long runs 测试

长度大于等于26的游程称为长游程。如果在测试中未出现长游程,则通过long runs 测试。

2.2测试结果

利用自制随机数生成程序,从PC 声卡读取声音随机噪声进行处理,每次产生一个20000位的随机序列样本,采用上述测试标准,对产生的每一个随机序列进行了4种方法的测试,共测试了1万个随机序列样本。

在1万次连续的测试中,绝大多数随机序列通过monobit 、poker 、runs 及long runs 测试,有82个随机序列未通过其中的某项测试,没有发生1个随机序列同时未通过多项测试的情况,测试结果见表1。未能通过测试的原因大部分集中在游程测试,约占测试失败总数的96%,其中游程1的测试失败数约占游程测试失败数的36%。

表1一万个随机序列中未通过各项测试的数

3结束语

利用声卡噪声产生随机序列的方法产生的随机序列具备一定的随机性,方法简单实用。但由于受到声卡采样频率和采样精度的限制,生成随机序列的效率是有限的,不适宜需要高速产生随机序列的应用场合。经上万次的测试,未发现测试失败的随机序列的出现具有规律性,可见该方法具有可靠性和稳定性,适合低成本应用程序开发和小型项目之用。

参考文献:

[1]

Bruce Schneier.应用密码学-协议、算法与C 源程序[M].吴世忠,译.北京:机械工业出版社,2001:301.[2]

张雪锋,范九伦.基于混沌系统的伪随机序列生成方法[J].计算机工程与应用,2010,46(29):80-82.[3]

吕志英.密码系统中伪随机序列的生成方法[J].南京林业大学学报(自然科学版),2005,29(5):29-32.[4]

苏桂平,吕述望,杨柱,等.真随机数发生器的随机性在信息安全中的应用[J].计算机工程,2002,28(6):114-115.[5]美国NIST.FIPS PUBS 140-2,Security Requirements for Cryptographic Modules[S].1999.1992

伪随机码生成器

M序列发生器 M序列是最常用的一种伪随机序列,是一种线性反馈移位寄存器序列的简称。带线性反馈逻辑的移位寄存器设定各级寄存器的初试状态后,在时钟的触发下,每次移位后各级寄存器状态都会发生变化。其中一级寄存器(通常为末级)的输出,随着移位寄存器时钟节拍的推移会产生下一个序列,称为移位寄存器序列。他是一种周期序列,周期与移位寄存器的级数和反馈逻辑有关。 以4级移位寄存器为例,线性反馈结构如下图: 4级以为寄存器反馈图 其中a4=a1+a0

信号a4:a0禁止出现全0,否则将会出现全0,序列不变化。实验仿真 Code: library IEEE; use IEEE.STD_LOGIC_1164.ALL; -- Uncomment the following library declaration if using -- arithmetic functions with Signed or Unsigned values --use IEEE.NUMERIC_STD.ALL; -- Uncomment the following library declaration if instantiating -- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity random_4 is Port ( clk : in STD_LOGIC; reset : in STD_LOGIC;

din : in STD_LOGIC_VECTOR (3 downto 0); dout : out STD_LOGIC_VECTOR (3 downto 0); load : in STD_LOGIC); end random_4; architecture Behavioral of random_4 is signal rfsr :std_logic_vector(3 downto 0); --signal temp:std_logic; begin process(clk,reset,load,din) begin if (reset ='1') then rfsr <=(others =>'0'); elsif (clk' event and clk='1') then if(load ='1') then ----load =1 rfsr<= din; else rfsr(3) <= rfsr(0) xor rfsr(1); rfsr(2 downto 0) <= rfsr(3 downto 1); end if; end if; end process; ------signal rename----

伪随机序列m和M的生成算法实现

m-M 文档 1 相关概念 随机序列:可以预先确定又不能重复实现的序列 伪随机序列:具有随机特性,貌似随机序列的确定序列。 n 级线性移位寄存器,能产生的最大可能周期是21n p =-的序列,这样的序列称为m 序列。 n 级非线性移位寄存器,能产生的最大周期是2n 的序列,这样的序列称为M 序列。 图1线性移位寄存器 线性移位寄存器递推公式 11221101 n n n n n n i n i i a c a c a c a c a c a ----==++++= ∑ 线性移位寄存器的特征方程式 010 ()n n i n i i f x c c x c x c x ==+++= ∑ ,ci 取值为0或1 定义 若一个n 次多项式f (x )满足下列条件: (1) f (x )为既约多项式(即不能分解因式的多项式); (2) f (x )可整除(x p +1), p =2n -1; (3) f (x )除不尽(x q +1), q

由抽象代数理论可以证明,若α是n 次本原多项式()f x 的根,则集合2 2 {0,1,}n F α-= 可 构成一个有限的扩域(2)n G F 。F 中的任一元素都可表示为1110n n a a a αα--+++ ,这样n 个分量的有序序列110(,,,)n a a a - 就可表示F 中的任一元素。 若既约多项式()f x 的根能够形成扩域(2)n G F ,则该多项式是本原多项式,否则不是本原多项式。 2.2 二元域(2)GF 上的本原多项式算法实现 (2)GF 上n 次多项式的通式为 1 2 1210()...n n n n n f x x a x a x a x a ----=++++,系数是二元域上的元素(0,1) 既约多项式既不能整除,1x x +,0和1不可能是()f x 的根,即0a =1, ()f x 的项数一定为奇数。 另外,一个既约多项式是否能形成(2)n G F ,从而判断它是否为本原多项式。N 次多项式的扩域,其中,120,1,,,n ααα 一定在扩域中,需要判断的是12 2 ,n n αα+- 是否也在扩域 中,从而形成全部扩域(2)n G F ,若在,则该n 次既约多项式是本原多项式,否则不是。 (1)给定二元多项式 1 2 1210()...n n n n n f x x a x a x a x a ----=++++,01a = 设α是f(x)扩域中的一个元素,且f(α)=0则有: n n-1 n-11=a ++a +1αα α (1) (2)从n α开始,计算α的连续幂。在计算过程中,当遇到α的幂次为n 时,将(1)代入,一直计算到n 2 -2 α (形成GF (2n )),再计算n 2 -1 α 。若n 2-1 α =1,则证明()f x 能被n 21 x 1-+整 除,而不能整除1q x +(21n q <-),判定为本原多项式。在计算α的连续幂过程中,若 q x =1(21n q <-),则证明()f x 能被1q x +整除,判定为非本原多项式,停止计算。 在计算机实现时,n 个分量的有序序列110(,,)n a αα- 与α的任一连续幂有着一一对应的 关系,可以用有序序列110(,,)n a αα- 来表示α的任一连续幂。q α用110(,,)q q q n a αα- 来

临床试验中的随机分组方法

临床试验中的随机分组方法 时间:2009-10-23 22:17:46 来源:admin 万霞1,刘建平2 (1.中国医学科学院基础医学研究所/中国协和医科大学基础医学院流行病学教研室,北京市东单三5号, 100005; 2.北京中医药大学循证医学中心) 【摘要】成功地实施随机分配依赖于两个相关的步骤:(1)产生随机分配序列用于试验组和对照组的分配; (2)随机分配方案在随机分组实施过程中的隐匿。随机分组方法有: 简单随机化、区组随机化分段(或分层)随机化、分层区组随机化及动态随机化等;随机分配方案隐匿的方法有按顺序编码、不透光、密封的信封, 中心随机系统, 编号或编码的瓶子或容器, 中心药房准备的药物等。科研工作者在临床研究中需要根据设计方法, 正确选择随机分组及随机分配方案隐匿的方法。 【关键词】随机分配; 随机分组; 随机方案; 隐匿 随机分配方法确保对比组之间基线均衡可比,被认为是减少两组患者选择偏倚的最佳方法[1]。因此,有学者认为正是由于随机分配方法,使得随机对照试验在提高医疗卫生服务中起着至关重要的作用[2]。在临床研究中,正确地实施真正的随机分配是临床试验的关键。成功地实施随机分配依赖于两个相关的步骤[3]:(1)产生随机分配序列并用于随机分配到试验组和 对照组; (2) 随机分配方案在随机分组中的隐匿(allocation concealment)。没有随机隐匿的随机临床试验也称为开放式的随机对照试验。 有试验研究表明[4],如果用不适当的分组和双盲方法, 即使是随机临床试验,其干预效果也 会被显着地高估(在一项研究中干预效果平均被夸大约50% )。遗憾的是90%以上的随机临床试验随机分组不恰当[5]。对卫生系统重大科研课题的终审标书进行的系统评价发现,部分治疗性研究存在假的随机分组[6]。有学者分层随机选择综合性国家级中医药学术期刊4种、省级和中医学院(大学)学报类中医药学术期刊各10种, 专业杂志(如针灸) 4种, 共计28种, 从1996 年12月开始回溯20年, 从中选取所有中医药疗效评价的文章逐一评阅。研究结果发现, 83%的文章未描述随机分组方法,操作是否恰当难以判断[7]。

随机数生成方法、随机数生成法比较以及检验生成的随机序列的随机性的方法讲义

摘要 摘要 本文着重讨论了随机数生成方法、随机数生成法比较以及检验生成的随机序列的随机性的方法。 在随机序列生成方面,本文讨论了平方取中法、斐波那契法、滞后斐波那契法、移位法、线性同余法、非线性同余法、取小数法等,并比较了各方法的优劣性。 在统计检验方面,介绍了统计检验的方法,并用其检验几种随机数生成器生成的随机数的随机性。 最后介绍了两种新的随机数生成法,并统计检验了生成随机序列的随机性。关键词:随机数,随机数生成法,统计检验 I

ABSTRACT ABSTRACT This article focuses on methods of random number generator, random number generation method comparison and test the randomness of the generated random sequence method. In random sequence generation, the article discusses the square method, Fibonacci method, lagged Fibonacci method, the shift method, linear congruential method, linear congruence method, taking minority law, and Comparison of advantages and disadvantages of each method. In statistical test, the introduction of the statistical test method, and used to test some random number generator random random numbers generated. Finally, two new random number generation method, and statistical tests of randomness to generate a random sequence. Key Words: random number,random number generator,statistical test II

C语言中产生随机数的方法

C语言中产生随机数的方法 引例:产生10个[100-200]区间内的随机整数。 #include #include //rand函数的头文件 #include //时间函数的头文件 int main() { int i; //循环变量 srand((unsigned) time(NULL)); //产生随机数的起始数据(以时间为种子) for (i=0; i<10; i++) //printf("%d\n", rand()); //产生[0,0x7fff)即[0,32767)以内的随机整数 //printf("%d\n", rand()%100); //产生0-99的随机整数 printf("%d\n", rand()%(200-100+1) + 100); //产生[100,200]内的随机整数return 0; } 在C语言中产生随机数需要以下几个函数的配合使用。 (1)rand函数——产生伪随机数 原型:int rand(void) 头文件:stdlib.h 功能:产生从0到RAND_MAX之间的随机数。RAND_MAX的值通常是0x7fff(十六进制数7FFF,也就是十进制数32767)。 例: #include #include int main() { int k; k = rand(); printf("%d\n", k); return 0; } 编译运行,发现每次运行程序产生的随机数都是一样的。 计算机中产生随机数,实际是采用一个固定的数作为“种子”,在一个给定的复杂算法中计算结果,所以叫“伪随机数”。 C语言中由于采用固定的序列作为种子,所以每次执行所取的是同一个数。 为上面的例子增加一个循环结构: #include #include int main() { int k,i;

一种新的混沌伪随机序列生成方式

第28卷第7期电子与信息学报V ol.28No.7 2006年7月 Journal of Electronics & Information Technology Jul.2006 一种新的混沌伪随机序列生成方式 罗启彬 张 健 (中国工程物理研究院电子工程研究所绵阳 621900) 摘要利用构造的Hybrid混沌映射,通过周期性改变混沌迭代初值来产生混沌伪随机序列。理论和统计分析可知,该混沌序列的各项特性均满足伪随机序列的要求,产生方法简单,具有较高的安全性和保密性,是一类很有应用前景的伪随机加密序列。 关键词混沌序列, 加密, Lyapunov指数,自相关 中图分类号:TN918 文献标识码:A 文章编号:1009-5896(2006)07-1262-04 A New Approach to Generate Chaotic Pseudo-random Sequence Luo Qi-bin Zhang Jian (Institute of Electronic Engineering, CAEP, Mianyang 621900,China) Abstract This paper proposes hybrid mapping to generate chaotic sequence, by altering initial value periodically. The results show that the properties of the hybrid chaotic sequence are good,and the sequence generator can be easily realized. It is a class of promising pseudo-random sequence in practical applications. Key words Chaotic sequence, Encryption, Lyapunov exponent, Auto-correlation 1 引言 混沌序列是一种性能优良的伪随机序列,其来源丰富,生成方法简单。通过映射函数、生成规则以及初始条件便能确定一个几乎无法破译的加密序列。因此,混沌加密受到越来越多的关注,近年来被广泛应用于保密通信领域[1-4]。 将混沌理论应用于流密码是1989年由Matthews[5]最先提出。迄今为止,利用混沌映射产生随机序列的理论研究很多。但是,混沌序列发生器总是用有限精度来实现,其特性由于有限精度效应会与理论结果大相径庭。因此,有限精度效应是混沌序列从理论走向应用的主要障碍。文献[6]用m 序列与产生的混沌序列“异或”来克服有限精度的影响,但由于微扰是随机的,不易产生,而且系统分布以及相关性能取决于附加的m序列而不是混沌系统本身。文献[7]通过构造变参数复合混沌系统来实现有限精度混沌系统。本文利用构造的分段非线性Hybrid映射,通过周期性地改变混沌迭代初值的办法来产生混沌序列,克服了序列有限精度效应的影响。计算机数值实验表明所产生的混沌序列的各项特性均较好,产生方法简单,具有较高的安全性,是一类很有应用前景的伪随机加密序列。 本文第2节给出了混沌随机序列发生器的产生过程,在此基础上讨论了混沌系统的扰动问题;第4节通过计算机仿真来验证所产生的混沌伪随机序列的性质;最后是结论。 2004-11-22收到,2005-08-08改回 中国工程物理研究院科学技术基金面上资助课题(20050429) 2 序列产生 由于Logistic映射和Tent映射的复杂度都不高,由此产生的混沌加密序列的安全性能都不是非常理想。本文把两者相结合,构造出一种新的混沌迭代映射——Hybrid映射: 2 1 1 2 (1)10 =()= 1, 0<1 k k k k k k b u x x x f x u x x + ???<≤ ? ? ?< ?? , (1) 该映射不但继承了Logistic映射和Tent映射容易产生的特点,而且还能增加混沌系统的安全性。 当初值x0=0.82,u1=1.8,u2=2.0,b=0.85时,此映射处于混沌态,产生的混沌序列如图1所示,其中横轴是迭代次数k,纵轴是经不断迭代得到的混沌状态空间变量x(k)。图1(a)为初值等于0.82的Hybrid混沌映射时序图,图1(b)为Hybrid映射对迭代初值高度敏感性的示意图(初值相差10-15)。 图1 (a) Hybrid mapping 的随机特性 (b) Hybrid mapping 对初值的敏感特性 Fig.1 (a) Randomicity of Hybrid mapping (b) Sensitivity of Hybrid mapping 把生成的实值混沌随机序列{x k}转化为二进制随机序列{S k},按如下方法实施:

EXCEL随机数据生成方法

求教:我的电子表格中rand()函数的取值范围是-1到1,如何改回1到0 回答:有两种修改办法: 是[1-rand()]/2, 或[1+rand()]/2。 效果是一样的,都可生成0到1之间的随机数 电子表格中RAND()函数的取值范围是0到1,公式如下: =RAND() 如果取值范围是1到2,公式如下: =RAND()*(2-1)+1 RAND( ) 注解: 若要生成a 与b 之间的随机实数: =RAND()*(b-a)+a 如果要使用函数RAND 生成一随机数,并且使之不随单元格计算而改变,可以在编辑栏中输入“=RAND()”,保持编辑状态,然后按F9,将公式永久性地改为随机数。 示例 RAND() 介于0 到1 之间的一个随机数(变量) =RAND()*100 大于等于0 但小于100 的一个随机数(变量) excel产生60-70随机数公式 =RAND()*10+60 要取整可以用=int(RAND()*10+60) 我想用excel在B1单元个里创建一个50-80的随机数且这个随机数要大于A1单元个里的数值,请教大家如何编写公式! 整数:=ROUND(RAND()*(80-MAX(50,A1+1))+MAX(50,A1+1),0) 无需取整数:=RAND()*(80-MAX(50,A1))+MAX(50,A1)

要求: 1,小数保留0.1 2,1000-1100范围 3,不要出现重复 =LEFT(RAND()*100+1000,6) 至于不许重复 你可以设置数据有效性 在数据-有效性设 =countif(a:a,a1)=1 选中a列设有效性就好了 其他列耶可以 急求excel随机生成数字的公式,取值要在38.90-44.03之间,不允许重复出现,保留两位小数,不允许变藏 =round(RAND()*5+38.9,2) 公式下拉 Excel随机数 Excel具有强大的函数功能,使用Excel函数,可以轻松在Excel表格产生一系列随机数。 1、产生一个小于100的两位数的整数,输入公式=ROUNDUP(RAND()*100,0)。 RAND()这是一个随机函数,它的返回值是一个大于0且小于1的随机小数。ROUNDUP 函数是向上舍入数字,公式的意义就是将小数向上舍入到最接近的整数,再扩大100倍。 2、产生一个四位数N到M的随机数,输入公式=INT(RAND()*(M-N+1))+N。 这个公式中,INT函数是将数值向下取整为最接近的整数;因为四位数的随机数就是指从1000到9999之间的任一随机数,所以M为9999,N为1000。RAND()的值是一个大于0且小于1的随机小数,M-N+1是9000,乘以这个数就是将RAND()的值对其放大,用INT 函数取整后,再加上1000就可以得到这个范围内的随机数。[公式=INT(RAND()*(9999-1000+1))+1000] 3、Excel函数RANDBETWEEN是返回位于两个指定数之间的一个随机数。使用这一个函数来完成上面的问题就更为简单了。要使用这个函数,可能出现函数不可用,并返回错误值#NAME?。 选择"工具"菜单,单击"加载宏",在"可用加载宏"列表中,勾选"分析工具库",再单击"确定"。接下来系统将会安装并加载,可能会弹出提示需要安装源,也就是office安装盘。放入光盘,点击"确定",完成安装。 现在可以在单元格输入公式=RANDBETWEEN(1000,9999)。 最后,你可以将公式复制到所有需要产生随机数的单元格,每一次打开工作表,数据都会自动随机更新。在打开的工作表,也可以执行功能键F9,每按下一次,数据就会自动随机更新了。

一维正态分布随机数序列的产生方法

一维正态分布随机数序列的产生方法 一、文献综述 1.随机数的定义及产生方法 1).随机数的定义及性质 在连续型随机变量的分布中,最简单而且最基本的分布是单位均匀分布。由该分布抽取的简单子样称,随机数序列,其中每一个体称为随机数。 单位均匀分布也称为[0,1]上的均匀分布。 由于随机数在蒙特卡罗方法中占有极其重要的位置,我们用专门的符号ξ表示。由随机数序列的定义可知,ξ1,ξ2,…是相互独立且具有相同单位均匀分布的随机数序列。也就是说,独立性、均匀性是随机数必备的两个特点。 随机数具有非常重要的性质:对于任意自然数s,由s个随机数组成的 s维空间上的点(ξn+1,ξn+2,…ξn+s)在s维空间的单位立方体Gs上 均匀分布,即对任意的ai,如下等式成立: 其中P(·)表示事件·发生的概率。反之,如果随机变量序列ξ1, ξ2…对于任意自然数s,由s个元素所组成的s维空间上的点(ξn+1,…ξn+s)在Gs上均匀分布,则它们是随机数序列。 由于随机数在蒙特卡罗方法中所处的特殊地位,它们虽然也属于由具有已知分布的总体中产生简单子样的问题,但就产生方法而言,却有着本质上的差别。 2).随机数表 为了产生随机数,可以使用随机数表。随机数表是由0,1,…,9十个数字组成,每个数字以0.1的等概率出现,数字之间相互独立。这些数字序列叫作随机数字序列。如果要得到n位有效数字的随机数,只需将表中每n 个相邻的随机数字合并在一起,且在最高位的前边加上小数点即可。例如,某随机数表的第一行数字为7634258910…,要想得到三位有效数字的随机数依次为0.763,0.425,0.891。因为随机数表需在计算机中占有很大内存, 而且也难以满足蒙特卡罗方法对随机数需要量非常大的要求,因此,该方法不适于在计算机上使用。 3).物理方法

随机数生成方法

University of Sydney School of Information Technologies Generating Random Variables Pseudo-Random Numbers Definition : A sequence of pseudo-random numbers ()i U is a deterministic sequence of numbers in []1,0 having the same relevant statistical properties as a sequence of random numbers. The most widely used method of generating pseudo-random numbers are the congruential generators: ()M X U M c aX X i i i i =+=?mod 1 for a multiplier a , shift c , and modulus M , all integers. The sequence is clearly periodic, with maximum period M . The values of a and c must be carefully chosen to maximise the period of the generator, and to ensure that the generator has good statistical properties. Some examples: M a c 259 1313 0 232 69069 1 231-1 630360016 0 232 2147001325 715136305 Reference: Ripley, Stochastic Simulation , Chapter 2

真随机数产生方法

ATmega1 28单片机的真随机数发生矗时间:2009-12-16 15:39:00 来源:单片机与嵌入式系统作者:刘晓旭,曹林,董秀成西华大学 ATmega1 28单片机的真随机数发生矗时间:2009-12-16 15:39:00 来源:单片机与嵌入式系统作者:刘晓旭,曹林,董秀成西华大学 引言 随机数已广泛地应用于仿真、抽样、数值分析、计算机程序设计、决策、美学和娱乐之中。常见的随机数发生器有两种:使用数学算法的伪随机数发生器和以物理随机量作为发生源的真随机数发生器。要获取真正随机的真随机数,常使用硬件随机数发生器的方法来获取。这些真随机数都是使基于特定的真随机数发生源(如热噪声、电流噪声等),每次获取的真随机数都是不可测的,具有很好的随机性。 真随机数因其随机性强,在数据加密、信息辅助、智能决策和初始化向量方面有着广泛应用,构建一种基于硬件真随机数发生源,具有广泛的应用价值。但目前硬件真随机数发生源均较复杂,而且很少有基于单片机的真随机数发生器。本文利用RC充放电的低稳定度,根据AVR单片机的特点设计了一种性价比极高的真随机数发生器。该随机数发生器使用元件很少,稳定性高,对一些价格敏感的特殊场合,如金融、通信、娱乐设备等有较大的应用意义。 1 基本原理和方法 1.1 基本原理 串联的RC充放电电路由于受到漏电流、电阻热噪声、电阻过剩噪声、电容极化噪声等诸多不确定性因素的影响,其充放电稳定度一般只能达到10-3。利用这种RC充放电的低稳定度特性实现廉价的真随机数发生源。 Atmel公司AVR单片机ATmega 128以其速度快、功能强、性价比高等优点广泛应用于各种嵌入式计算场合。利用AVR单片机引脚配置灵活多样的特点,使用Amnega128 两个I/O口作为真随机数的电气接口。 其原理如图1所示。主要原理是利用串联RC电路的不确定性产生真随机数源,收集数据,通过AVR单片机ATmega128和主时钟电路量化RC电路的充放电时问,获得不确定的2位二进制数据,再利用程序将每4次采集的数据综合,最后产生1个8位的真随机数。

随机数产生方法

伪随机数的产生,现在用得较多的是“线性同余法" 就是下面这个式子 R(n+1) = [R(n) * a + b] mod c 为使随机数分布尽量均匀,a、b 均为质数, c 一般取值域内的最大值(mod 是求余数) 从这个式了可以看出,每次产生的随机数都跟上一次产生的数有关系,那么,第一个数是怎么来的呢?这就是线性同余法中必须用的的”种子",也就是说,给定某个种子后,所产生的随机数序列是固定的,在计算机编程中,一般使用系统时间来初始化种子,就是前面代码中的 srand((unsigned)time(NULL)); 这一句了。因为每次运行程序的时间肯定不一样,所以产生散列肯定也不一样,从而达到“随机”的目的。 a,b,c 的取值我用的是 a=3373, b=1, c=32768 下面的两个子程序是我在我的项目(S7-200 226)中产生随机的系统编号用的,因为我的编号中只有4位数采用了随机数,所以下面的程序中用的是整型,最大范围为32767。如果需要更宽范围的随机数,可以采用双字类型,并适当修改程序,代码很简单,就是将上面那个表达式用 S7-200 的指令表示出来就行了。 这两个子程序是从 MicroWIN V4.0 中导出来的,可以将它们用文本编辑器保存为 AW L 文件后直接导入 MicroWIN。 使用时在第一个扫描周期调用 Srand 初始种子,需要随机数的地方调用 Random Random 有了个最大范围参数,可以限制生成的随机数的最大范围,比如我只需要4位随机数,所以一般这样调用 CALL Random, 10000, vw0,生成的数就在 0-9999 范围内 下面是代码: SUBROUTINE_BLOCK Srand:SBR17 TITLE=初始化随机数种子 // // 直接使用系统时钟的分秒来作为种子 VAR_OUTPUT seed:WORD; END_VAR

随机数生成器

随机数生成器 一、随机数 1.1随机数的概念 数学上是这样定义随机数的:在连续型随机变量的分布中,最简单而且最基本的分布是单位均匀分布。由该分布抽取的简单子样称为随机数序列,其中每一个体称为随机数。单位均匀分布即[0,1]上的均匀分布。由随机数序列的定义可知,ξ1,ξ2,…是相互独立且具有相同单位均匀分布的随机数序列。也就是说,独立性、均匀性是随机数必备的两个特点。 1.2随机数的分类 随机数一般分为伪随机数和真随机数。利用数学算法产生的随机数属于伪随机数。利用物理方法选取自然随机性产生的随机数可以看作真随机数。实用中是使用随机数所组成的序列,根据所产生的方式,随机数序列再可以分为两类: 1.伪随机数序列 伪随机数序列由数学公式计算所产生。实质上,伪随机数并不随机,序列本身也必然会重复,但由于它可以通过不同的设计产生满足不同要求的序列且可以复现(相同的种子数将产生相同的序列),因而得到广泛的应用。由伪随机数发生器所产生的伪随机数序列,只要它的周期足够长并能通过一系列检验,就可以在一定的范围内将它当作真随机数序列来使用。 2.真随机数序列 真随机数序列是不可预计的,因而也不可能出现周期性重复的真正的随机数序列。它只能由随机的物理过程所产生,如电路的热噪声、宇宙噪声、放射性衰变等。 按照不同的分类标准,随机数还可分为均匀随机数和非均匀随机数,例如正态随机数。 1.3随机数的衡量标准 在实际模拟过程中,我们一般只需要产生区间[0,1]上的均匀分布随机数,因为其他分布的随机数都是由均匀分布的随机数转化来的。 实用中的均匀随机数主要通过以下三个方面来衡量其随机性能的高低。 1.周期性 伪随机数序列是由具有周期性的数学公式计算产生,其本身也必然会表现出周期性,即序列中的一段子序列与另一段子序列相同。它的周期必须足够长,才能为应用提供足够多的可用数据。只有真随机数序列才能提供真正的、永不重复的随机数序列。 2.相关性 随机数发生器所产生的一个随机数序列中的各个随机数应该不相关,所产生的各个随机数序列中的随机数也应该不相关。真随机数序列自然地满足这种不相关性。对于伪随机数发生器,应该仔细地设计所用的数学公式,以尽量满足不相关的要求。 3.分布均匀性 包括蒙特卡洛计算在内的大多数应用都要求所采用的随机数序列服从均匀分布,即同一范围内的任一个数出现的概率相同。从均匀分布的随机数序列也很容易导出其它类型分布的

实验一随机序列的产生及数字特征估计

实验一随机序列的产生及数字特征估计 一、实验目的 1、学习和掌握随机数的产生方法。 2、实现随机序列的数字特征估计。 二、实验原理 1、随机数的产生 随机数指的是各种不同分布随机变量的抽样序列(样本值序列)。进行随机信号仿真分析时,需要模拟产生各种分布的随机数。在计算机仿真时,通常利用数学方法产生随机数,这种随机数称为伪随机数。伪随机数是按照一定的计算公式产生的,这个公式称为随机数发生器。伪随机数本质上不是随机的,而且存在周期性,但是如果计算公式选择适当,所产生的数据看似随机的,与真正的随机数具有相近的统计特性,可以作为随机数使用。(0,1)均匀分布随机数是最最基本、最简单的随机数。(0,1)均匀分布指的是在[0,1]区间上的均匀分布,即U(0,1)。实际应用中有许多现成的随机数发生器可以用于产生(0,1)均匀分布随机数,通常采用的方法为线性同余法,公式如下: y0=1,y n=ky n?1mod N(1.1) x n=y n N 序列x n为产生的(0,1)均匀分布随机数。 下面给出了(1.1)式的3 组常用参数: ①N = 1010,k = 7,周期≈5*10^7; ②(IBM随机数发生器)N = 2^31,k = 2^16 + 3,周期≈5*10^8;

③(ran0)N = 2^31 - 1,k = 7^5,周期≈2*10^9; 由均匀分布随机数,可以利用反函数构造出任意分布的随机数。 定理1.1 若随机变量X具有连续分布函数F X(X),而R为(0,1)均匀分布随机变量,则有 X=F X?1(R)(1.2) 由这一定理可知,分布函数为F X(X)的随机数可以由(0,1)均匀分布随机数按(1.2)式进行变换得到。 2、MATLAB 中产生随机序列的函数 (1)(0,1)均匀分布的随机序列 函数:rand 用法:x = rand(m,n) 功能:产生m×n的均匀分布随机数矩阵。 (2)正态分布的随机序列 函数:randn 用法:x = randn(m,n) 功能:产生m×n的标准正态分布随机数矩阵。 如果要产生服从N(μ,σ2)分布的随机序列,则可以由标准正态随机序列产生。(3)其他分布的随机序列 MATLAB 上还提供了其他多种分布的随机数的产生函数,表1.1 列出了部分函数。

基于FPGA 的伪随机序列的生成方法及应用

摘要:通过分析各种伪随机序列生成方法,提出了一种基于M 序列的连续抽样方法,可以生成满足自适应光学系统SPGD 控制算法要求的多路、相互独立以及服从伯努利分布的伪随机序列。该方法适合于用FPGA等超大规模集成电路实现,且具有占用硬件资源较少,实现方便等优点。用FPGA 实现了用于61 单元自适应光学系统SPGD 控制算法的伪随机序列,并将此方法应用于基于SPGD 控制算法的自适应光学系统实验中,实验表明,该方法能够满足自适应光学系统SPGD 算法的需求,系统实现成功闭环。 1 引言 随机序列是一组满足特定统计学规律的数据,在信号理论分析中应用非常普遍。由于精确的随机序列生成方法较为复杂,产生的随机序列不具有可重复性等特点,在很多应用场合使用伪随机序列。伪随机序列在扩频通信、信息加密和系统测试等诸多领域中都有着广泛的应用。在自适应光学SPGD 算法中,伪随机序列亦有相当重要的作用。 Vorontsov 等人在1997 年将SPGD 算法引入到自适应光学领域[2]。国内在近几年开始了对 SPGD 算法在自适应光学系统应用的研究,并且在计算机上用软件编程实现了算法,进行了自适应光学的系统实验[3]。自适应光学SPGD 控制算法的研究趋势是使用专用的信号处理硬件电路作为算法的实现平台,以获得更高的迭代速度和更好的收敛效果。Cauwenberghs等人设计了专用的模拟超大规模集成电路实现SPGD 控制算法,并且在一些应用领域进行了实验[5]。目前自适应光学系统的规模普遍达到几十上百单元。针对多单元自适应光学系统SPGD 控制算法的特殊要求,本文提出了一种适合于用FPGA 硬件电路产生满足算法要求的多路伪随机序列的生成方法,完成了FPGA 电路的硬件实现,并将其用于实现61 单元自适应光学SPGD控制算法,同时进行自适应光学的闭环实验。 2 自适应光学 SPGD 控制算法对伪随机序列的要求 SPGD(the Stochastic Parallel Gradient Descent algorithm)算法通过对多路的控制参数加入随机并行的扰动,使用性能指标测量值的变化量与控制参数的变化量进行控制参数的梯度估计,以迭代方式在梯度下降方向上进行控制参数的搜索。在自适应光学SPGD 算法中,控制参数为变形镜的控制电压,随机并行的扰动通过多路伪随机序列模拟。SPGD 算法中随机并行扰动的特性,对伪随机序列也提出了相应的要求[5]: (1) 路数多。路数等于变形镜单元数(即变形镜上驱动单元的数目)。例如在一个61 单元的自适应光学系统中,就需要产生61 路的伪随机序列。 (2) 伪随机序列两两相互独立。相互独立可避免变形镜各驱动单元间的相互耦合。 (3) 伪随机序列符合伯努利分布,两个样本值出现的概率各为0.5。 3 硬件电路实现伪随机序列的传统方法

MATLAB各种随机函数生成器

2009年03月20日星期五 03:25 P.M. rand(n):生成0到1之间的n阶随机数方阵 rand(m,n):生成0到1之间的m×n 的随机数矩阵 (现成的函数) 另外: Matlab随机数生成函数 betarnd 贝塔分布的随机数生成器 binornd 二项分布的随机数生成器 chi2rnd 卡方分布的随机数生成器 exprnd 指数分布的随机数生成器 frnd f分布的随机数生成器 gamrnd 伽玛分布的随机数生成器 geornd 几何分布的随机数生成器 hygernd 超几何分布的随机数生成器 lognrnd 对数正态分布的随机数生成器 nbinrnd 负二项分布的随机数生成器 ncfrnd 非中心f分布的随机数生成器 nctrnd 非中心t分布的随机数生成器 ncx2rnd 非中心卡方分布的随机数生成器 normrnd 正态(高斯)分布的随机数生成器 poissrnd 泊松分布的随机数生成器 raylrnd 瑞利分布的随机数生成器 trnd 学生氏t分布的随机数生成器 unidrnd 离散均匀分布的随机数生成器 unifrnd 连续均匀分布的随机数生成器 weibrnd 威布尔分布的随机数生成器 (From:https://www.360docs.net/doc/5212422960.html,/question/30033707.html) matlab生成随机数据 matlab本身提供很多的函数来生成各种各样的随机数据: normrnd 可以生成一定均值和标准差的正态分布 gamrnd 可以生成gamma分布的伪随机数矩阵 chi2rnd 可以生成卡方分布的伪随机数矩阵 trnd 可以生成t分布的伪随机数矩阵 frnd 可以生成f分布的伪随机数矩阵 raylrnd 可以生成rayleigh分布的伪随机数矩阵

随机信号分析实验:随机序列的产生及数字特征估计

实验一 随机序列的产生及数字特征估计 实验目的 1. 学习和掌握随机数的产生方法。 2. 实现随机序列的数字特征估计。 实验原理 1.随机数的产生 随机数指的是各种不同分布随机变量的抽样序列(样本值序列)。进行随机信号仿真分析时,需要模拟产生各种分布的随机数。 在计算机仿真时,通常利用数学方法产生随机数,这种随机数称为伪随机数。伪随机数是按照一定的计算公式产生的,这个公式称为随机数发生器。伪随机数本质上不是随机的,而且存在周期性,但是如果计算公式选择适当,所产生的数据看似随机的,与真正的随机数具有相近的统计特性,可以作为随机数使用。 (0,1)均匀分布随机数是最最基本、最简单的随机数。(0,1)均匀分布指的是在[0,1]区间上的均匀分布,即U(0,1)。实际应用中有许多现成的随机数发生器可以用于产生(0,1)均匀分布随机数,通常采用的方法为线性同余法,公式如下: N y x N ky y y n n n n = ==-) (mod ,110 (1.1) 序列{}n x 为产生的(0,1)均匀分布随机数。 下面给出了(1.1)式的3组常用参数: ① 1010=N ,7=k ,周期7 105?≈; ②(IBM 随机数发生器)312=N ,3216+=k ,周期8 105?≈; ③(ran0)1231 -=N ,5 7=k ,周期9 102?≈; 由均匀分布随机数,可以利用反函数构造出任意分布的随机数。 定理1.1 若随机变量X 具有连续分布函数)(x F X ,而R 为(0,1)均匀分布随机变量,则有 )(1 R F X X -= (1.2) 由这一定理可知,分布函数为)(x F X 的随机数可以由(0,1)均匀分布随机数按(1.2)式进行变换得到。 2.MATLAB 中产生随机序列的函数 (1)(0,1)均匀分布的随机序列

随 机 数 生 成 器

使用python实现伪随机数生成器 在前两天学习了使用python实现伪随机数的方法,今天是时候来做一个总结了。 首先要说明的是什么是随机数,真正的随机数是使用物理现象产生的:比如掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等等。产生这些随机数的方法有很多种,而这些产生随机数的方法就称为随机数生成器。像前面说的由物理现象所产生的随机数发生器叫做物理性随机数发生器,它们的缺点是技术要求比较高。 但是在我们的实际生活中广泛应用的是伪随机数生成器,所谓的“伪”就是假的的意思,也就是说并不是真正的随机数。那么这些随机数是怎么实现的呢?这些数字是由固定的算法实现的,是有规律可循的,并不能实现真正的“随机”,但是它们具有类似于随机数的统计特征。这样的发生器叫做伪随机数发生器。 实现伪随机数的方法有很多种,如:平方取中法,线性同余法等方法。 下面主要介绍的是线性同余法,如C的rand函数和JAVA的java.util.Random类就是使用该方法实现的,其公式为:rNew = (a*rOld + b) % (end-start) 其中, a称为乘数,b称为增量,(end-start)称为模数,它们均为常数。 然后设置rOld = rNew,一般要求用户指定种子数rOld(也称为

seed),当然也可以自由选择a和b,但是两个数如果选择不好,可能会影响数字的随机性,所以一般令: a=32310901 这样使得生成的随机数最均匀。下面我是用的将种子自定义设为999999999。代码如下: def myrandint( start,end,seed=999999999 ): a=32310901 #产生出的随机数最均匀 rOld=seed m=end-start while True: #每调用一次这个myrandint函数,才生成一次随机数所以要惰性求值 rNew = (a*rOld+b)%m yield rNew rOld=rNew #模拟使用20个不同的种子来生成随机数 for i in range(20): r = myrandint(1,10000, i) #每个种子生成10个随机数 print('种子',i,'生成随机数') for j in range(10): print( next(r),end=',' ) 运行结果是使用20个不同的种子生成的随机数。

相关文档
最新文档