CN101127575B - 一种均匀分布随机数发生器及均匀分布随机数产生方法 - Google Patents
一种均匀分布随机数发生器及均匀分布随机数产生方法 Download PDFInfo
- Publication number
- CN101127575B CN101127575B CN2007101541086A CN200710154108A CN101127575B CN 101127575 B CN101127575 B CN 101127575B CN 2007101541086 A CN2007101541086 A CN 2007101541086A CN 200710154108 A CN200710154108 A CN 200710154108A CN 101127575 B CN101127575 B CN 101127575B
- Authority
- CN
- China
- Prior art keywords
- adder
- output
- shift module
- input
- random number
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Complex Calculations (AREA)
Abstract
一种均匀分布随机数发生器,包括初始化模块,选择器,乘加器,以及延迟器,还包括第一移位模块,第二移位模块,第一加法器,第三移位模块,第四移位模块,第二加法器。一种均匀分布随机数产生方法:一,获取数值x0,a与x0相乘再加c得到z,a,c均为非负整数;二,将z使用移位器右移n位得到z1,z1再左移n位得到z2,其中2na+c<22n;三,将z和z1相加之和减去z2,其结果为y;四,将y加上1然后右移n位得到y1,y1再使用移位器左移n位得到y2,将y和y1相加之和减去y2得到xi+1,即本次产生的随机数;五,xi+1延迟,与a相乘再加c得到z,返回步骤二。本发明显著降低了计算量,可满足各种需要实时生成均匀分布随机数发生器的场合。
Description
技术领域
本发明涉及信息电子领域,尤其涉及一种均匀分布随机数产生方法及一种均匀分布随机数发生器。
背景技术
随机数广泛应用于信息电子领域。比如在移动通信系统的设计当中,往往需要在实验室对无线信道的各种特性进行模拟,并对通信系统算法在这些信道下的表现或性能进行仿真和评估。用信道模拟的手段来测试通信系统,和在实际通信环境测试相比,可控性和可重复性强,可以节约大量人力物力。
信道模拟技术的实现方法一般可以分为软件仿真和半实物仿真。前者的典型例子是利用Matlab等仿真软件对通信系统进行建模,这种方法实现相对简单,但是无法应用于真实系统的测试,因此仿真真实度不高,且仿真时间往往很长。而半实物仿真技术在实时的环境下运行仿真模型,并实现与实物的连接,这样大大提高了仿真结果的置信度,缩短了仿真时间。
采用半实物仿真来对信道进行模拟,相对软件仿真的难点之一在于需要快速,实时的实现各种信道模拟算法。这些算法在软件仿真中,一般采用浮点运算实现,既不需要考虑其精度,也不需要太多考虑其实时性,但是在半实物仿真中,由于需要和实际系统对接,且其实现的载体往往是FPGA(Field-Programmable Gate Array,现场可编程门阵列),ASIC(ApplicationSpecific Intergrated Circuits,专用集成电路)或DSP(Digital Signal Processer,数字信号处理器)之类的定点器件,因此,就需要考虑实时性的问题,要求运算尽量简单,便于实现。
以最常见的高斯白噪声模拟为例,其常用的方法为逆变换法,具体步骤如下:
第一步,产生[0,1]区间均匀分布随机变量U;
第二步,记高斯分布变量的累积分布函数为FX(X),其反函数为Fx -1(X),令
则X为所需的高斯分布随机变量。
上述过程中,第一步需要产生均匀分布随机变量,事实上,均匀分布随机数发生器是生成其他概率分布变量的基础,在其他信道特性的模拟中也广泛使用。譬如,进行信道慢衰落特性的模拟时,需要生成对数正态分布的随机变量,其前提也是先生成均匀分布随机变量。
由此可见,均匀分布随机数发生器是信道模拟中最基本的技术之一。应用最多的均匀分布随机数发生器算法是线性同余法,该算法描述如下:
定义如下递推运算:
xi+1=(axi+c)(modM)(i=0,1,2,…) (2)
其中xi的初值记为x0,称为线性同余发生器的种子数,a和c分别称为乘子和增量,M叫模数,这些均为非负整数,而且,a,c及xi均小于M。上式的xi+1是axi+c被M整除后的余数,称为xi+1与axi+c对模M同余。如果挑选适当的a、c、M,可以使xi满足均匀分布随机变量的各种重要特性,也即xi就是所需产生的均匀分布随机数。
对于式(2)在实时实现时的主要困难在于求余运算。一般来说,如果M不为2的整数次方,那么直接求余将耗费大量时间和资源,且随着M的增大,这个问题尤其突出。而恰恰在很多算法中,M并不是2的整数次方,以最常用的“ran0”随机数发生器为例,该随机数发生器由刘易斯(Lewis),古德曼(Goodman)和米勒(Miller)于1969年提出,其参数取法如下:
α=75=16807,M=231-1,c=0 (3)
该随机数发生器经过了大量随机数检验,并被广泛使用在软件仿真中,注意到此时M不是2的整数次方,且M为31位二进制数,对如此大的数求余将非常耗费时间,在FPGA之类的数字器件实现时,还会大量消耗资源,很难满足实时性要求。
综上所述,均匀分布随机数发生器是信息电子领域的重要技术,但在对实时性要求较高的场合,直接采用通用算法不能满足实时性要求。
发明内容
本发明要解决的技术问题是解决现有线性同余法实现均匀分布随机数发生器的时候,计算量太大,无法满足实时性要求的问题,提供一种可以在FPGA或DSP等定点器件里很方便、快速实现的均匀分布随机数产生方法及系统。
为解决上述问题,本发明提出了一种均匀分布随机数发生器,包括初始化模块,选择器,乘加器,以及延迟器,初始化模块产生随机数发生器的种子,输入到所述选择器,所述选择器在初始时选择所述初始化模块输入的数值作为输出,进入正常工作状态,在正常工作状态时所述选择器选择延迟器输入的数值作为输出,选择器的输出输入到所述乘加器,所述乘加器将选择器的输出与a相乘再加c,得到乘加器的输出,其中,a和c均为非负整数,其特征在于,还包括第一移位模块,第二移位模块,第一加法器,第三移位模块,第四移位模块,第二加法器,其中,
所述乘加器的输出输入到第一移位模块和第一加法器,第一移位模块对输入的数据进行右移n位,得到第一移位模块的输出,输入到第二移位模块和第一加法器,其中2na+c<22n;
第二移位模块对输入的数据左移n位,得到第二移位模块的输出,输入到第一加法器;
第一加法器将第一移位模块和乘加器输出的数值相加,减去第二移位模块输出的数值,再加上1,得到第一加法器的输出值,将其输入到第三移位模块和第二加法器;
第三移位模块对输入值右移n位,输出至第四移位模块和第二加法器;
第四移位模块将输入值左移n位,输出至第二加法器;
第二加法器将第三移位模块和第一加法器的输出的数值相加,减去第四移位模块输出的数值,再减去1,得到第二加法器的输出值,即得到本次输出的随机数,并将其输入延迟器;
延迟器把本次输出的随机数进行延迟,输出到所述选择器。
进一步地,上述发生器还可具有以下特点,所述a=75=16807。
进一步地,上述发生器还可具有以下特点,所述c=0。
进一步地,上述发生器还可具有以下特点,所述n=31。
为解决上述问题,本发明还提出了一种均匀分布随机数产生方法,包含如下步骤:
步骤一,获取随机数发生器的种子x0,a与x0相乘再加c得到z,a,c均为非负整数;
步骤二,将z使用移位器右移n位得到z1,z1再使用移位器左移n位得到z2,其中2na+c<22n;
步骤三,将z和z1相加之和减去z2,其结果为y;
步骤四,将y加上1然后使用移位器右移n位得到y1,y1再使用移位器左移n位得到y2,将y和y1相加之和减去y2得到xi+1,即本次产生的随机数;
步骤五,xi+1延迟,与a相乘再加c得到z,返回步骤二。
进一步地,上述方法还可具有以下特点,参数取法为:a=75=16807。
进一步地,上述方法还可具有以下特点,所述c=0。
进一步地,上述方法还可具有以下特点,所述n=31。
本发明所述的均匀分布随机数发生器用移位运算和加减运算替代了一般线性同余器所需的求余运算,与一般的线性同余器相比,显著降低了计算量,非常便于FPGA或DSP等嵌入式处理器实现,可以满足各种需要实时生成均匀分布随机数发生器的场合。
附图说明
图1是现有式(2)和(3)描述的均匀分布随机数发生器的结构示意图。
图2是本发明所述的线性同余均匀分布随机数发生器的结构示意图。
图3是本发明线性同余均匀分布随机数产生方法流程图。
具体实施方式
通过本发明的方法,可以把线性同余随机数发生器的求余运算转化为便于硬件实现的乘法运算和移位运算,从而解决求余运算耗时过长的问题。
本发明涉及的快速算法针对背景技术中提到包括ran0方法在内的模数M=2n-1时的求余方法,该方法可以满足工程中大多数情况下对均匀分布随机数的产生要求,此外,通过类似于本发明的推导过程,可以方便的把这种快速算法推广到其他参数下的线性同余法。
下面介绍本发明的具体推导过程。在n为任意正整数,c为非负整数,M=2n-1,且满足2na+c<22n的情况下,
式(2)可以等效为
其中
z=axi+c (6)
即利用(4),(5),(6)式代替式(2),具体的推导如下,
假设z/(2n-1)的商为d,余数为e,z/2n的商为f,余数为g,则根据被除数,除数,商和余数的相互关系可以得到下式:
z=d×(2n-1)+e=f×2n+g=f×(2n-1)+f+g (7)
由式(5),式(7),式(8),可以得到
又由推导前提的数值范围以及式(6),可得
z∈[0,22n] (10)
进一步得到:
y=(2n-1)×2 (11)
下面分别讨论y<2n-1以及2n-1<y<(2n-1)×2的两个区间内命题是否成立。
对于y<2n-1,显然
(y+1)/2n =0 (12)
并且根据式(2),(7),(9),还有
xi+1=y (13)
结合式(12)和式(13),可以得到
这就是所需证明的式(4),可见在y<231-1式命题成立。
对于2n-1<y<(2n-1)×2,显然有
并且根据式(2),(7),(9),有
xi+1=y-(2n-1) (15)
结合式(14)和式(15),可以得到
这就是所需证明的式(4),可见在231-1≤y<(231-1)×2命题成立。
因此对于所有y的可能取值范围,本命题成立,证毕。
上面的推导表明,式(2)所描述的随机数发生器可以通过式(4)~(6)等效实现,其中式(4)~(5)可以进一步写成
xi+1=y-[((y+1)>>n)<<n]+[(y+1)>>n] (16)
y=z-[(z>>n)<<n]+[z>>n] (17)
这样,式(6),式(16)以及式(17)就构成了本发明所提出的均匀分布随机数发生器的实现公式,上述>>n代表右移n位,<<n代表左移n位。
对比式(2)和式(16),(17)可以看出,本发明所述的均匀分布随机数发生器实现方法用移位运算和加减运算替代了一般线性同余器所需的求余运算,与一般的线性同余器相比,显著降低了计算量,非常便于FPGA或DSP等嵌入式处理器实现,可以满足各种需要实时生成均匀分布随机数发生器的场合。
下面将结合附图及实施例对本发明的技术方案进行更详细的说明。
图1是现有式(2)和(3)描述的均匀分布随机数发生器的结构示意图。图中初始化模块产生随机数发生器的种子,并作为乘加器模块的初始输入,乘加器模块完成z=axi+c的运算,求余模块完成mod M的运算,延迟器把本次输出的随机数进行延迟,并作为下一次运算中乘加器的输入。
图2是本发明提出的均匀分布随机数发生器结构示意图,和图1的区别在于用一系列移位和加减模块代替了求余模块。该随机数发生器包括初始化模块,乘加器,选择器,延迟器,还包括第一移位模块,第二移位模块,第一加法器,第三移位模块,第四移位模块,第二加法器,
其中,图中初始化模块产生随机数发生器的种子,并作为乘加器模块的初始输入,乘加器模块完成z=axi+c的运算;
所述选择器在初始时选择所述初始化模块输入的数值作为输出,进入正常工作状态,在正常工作状态时所述选择器选择延迟器输入的数值作为输出,选择器的输出输入到所述乘加器;
乘加器的输出输入到第一移位模块和第一加法器,第一移位模块对输入的数据进行右移n位,第一移位模块的输出输入第二移位模块和第一加法器;
第二移位模块对输入的数据左移n位,得到第二移位模块的输出,输入到第一加法器;
第一加法器将第一移位模块和乘加器的输出相加,减去第二移位模块的输出,再加上1,得到第一加法器的输出值,将其输入到第三移位模块和第二加法器;
第三移位模块对输入值右移n位,输出至第四移位模块和第二加法器;
第四移位模块将输入值左移n位,输出至第二加法器;
第二加法器将第三移位模块和第一加法器的输出相加,减去第四移位模块的输出,再减去1,得到第二加法器的输出值,即得到本次输出的随机数,并将其输入延迟器;
延迟器把本次输出的随机数进行延迟,并作为下一次运算中乘加器的输入。
图3所示为本发明线性同余均匀分布随机数产生方法流程图,具体步骤如下,
步骤310,随机数发生器处于初始状态,产生初值x0,作为随机数发生器的种子;
步骤320,如果随机数发生器处于初始态,x0作为乘加器输入,并计算z=ax0+c,随后转入正常运行状态;如果处于正常运行状态,xi作为乘加器输入,计算z=axi+c;
步骤330,计算(z>>n)<<n;
即对z进行移位运算,首先z使用移位器右移n位得到z1,z1再使用移位器左移n位得到z2。
步骤340,计算y=z-[(z>>n)<<n]+[z>>n];
即y=z-z2+z1;
步骤350,计算xi+1=y-[((y+1)>>n)<<n]+[(y+1)>>n]
将y+1然后使用移位器右移n位得到y1,y1再使用移位器左移n位得到y2,xi+1=y-y2+y1。
步骤360,对xi+1延迟得到xi,返回第二步。这里的延迟和现有技术是一样的,如果是软件实现,把值(即xi+1)存储起来,用时取出。对于硬件实现可以用常规的类似D触发器组实现。
对于ran0方法,只要把上述方法和装置中的n设为31,c设为0,a设为16807即可。
通过以上分析可知,本发明提出的均匀分布随机数发生器实现方法,只包含乘法运算,加减运算和移位运算,避免了求余运算,从而解决了实时性的问题,可以非常方便的在各种数字器件(如FPGA,ASIC或DSP)中实现。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
Claims (8)
1.一种均匀分布随机数发生器,包括初始化模块,选择器,乘加器,以及延迟器,初始化模块产生随机数发生器的种子,输入到所述选择器,所述选择器在初始时选择所述初始化模块输入的数值作为输出,进入正常工作状态,在正常工作状态时所述选择器选择延迟器输入的数值作为输出,选择器的输出输入到所述乘加器,所述乘加器将选择器的输出与a相乘再加c,得到乘加器的输出,其中,a和c均为非负整数,其特征在于,还包括第一移位模块,第二移位模块,第一加法器,第三移位模块,第四移位模块,第二加法器,其中,
所述乘加器的输出输入到第一移位模块和第一加法器,第一移位模块对输入的数据进行右移n位,得到第一移位模块的输出,输入到第二移位模块和第一加法器,其中2na+c<22n;
第二移位模块对输入的数据左移n位,得到第二移位模块的输出,输入到第一加法器;
第一加法器将第一移位模块和乘加器输出的数值相加,减去第二移位模块输出的数值,再加上1,得到第一加法器的输出值,将其输入到第三移位模块和第二加法器;
第三移位模块对输入值右移n位,输出至第四移位模块和第二加法器;
第四移位模块将输入值左移n位,输出至第二加法器;
第二加法器将第三移位模块和第一加法器的输出的数值相加,减去第四移位模块输出的数值,再减去1,得到第二加法器的输出值,即得到本次输出的随机数,并将其输入延迟器;
延迟器把本次输出的随机数进行延迟,输出到所述选择器。
2.如权利要求1所述的随机数发生器,其特征在于,所述a=75=16807。
3.如权利要求1所述的随机数发生器,其特征在于,所述c=0。
4.如权利要求1或2或3所述的随机数发生器,其特征在于,所述n=31。
5.一种均匀分布随机数产生方法,包含如下步骤:
步骤一,获取随机数发生器的种子x0,a与x0相乘再加c得到z,a,c均为非负整数;
步骤二,将z使用移位器右移n位得到z1,z1再使用移位器左移n位得到z2,其中2na+c<22n;
步骤三,将z和z1相加之和减去z2,其结果为y;
步骤四,将y加上1然后使用移位器右移n位得到y1,y1再使用移位器左移n位得到y2,将y和y1相加之和减去y2得到xi+1,即本次产生的随机数;
步骤五,xi+1延迟,与a相乘再加c得到z,返回步骤二。
6.如权利要求5所述的方法,其特征在于,参数取法为:a=75=16807。
7.如权利要求5所述的方法,其特征在于,所述c=0。
8.如权利要求5或6或7所述的方法,其特征在于,所述n=31。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007101541086A CN101127575B (zh) | 2007-09-12 | 2007-09-12 | 一种均匀分布随机数发生器及均匀分布随机数产生方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007101541086A CN101127575B (zh) | 2007-09-12 | 2007-09-12 | 一种均匀分布随机数发生器及均匀分布随机数产生方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101127575A CN101127575A (zh) | 2008-02-20 |
CN101127575B true CN101127575B (zh) | 2010-09-01 |
Family
ID=39095513
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007101541086A Expired - Fee Related CN101127575B (zh) | 2007-09-12 | 2007-09-12 | 一种均匀分布随机数发生器及均匀分布随机数产生方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101127575B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104463626B (zh) * | 2014-12-03 | 2018-11-13 | 携程计算机技术(上海)有限公司 | 券号生成方法、服务器和服务器集群 |
CN106919365A (zh) | 2016-08-29 | 2017-07-04 | 阿里巴巴集团控股有限公司 | 计算机系统中随机数的生成方法及装置 |
CN107450886B (zh) * | 2017-08-14 | 2020-06-05 | 北京睿信丰科技有限公司 | 一种模拟高斯白噪声的高斯随机信号的生成方法及装置 |
CN109741494A (zh) * | 2018-12-25 | 2019-05-10 | 江苏富联通讯技术有限公司 | 一种应用于智能门锁系统的无线传输单元及其控制方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2004023286A2 (en) * | 2002-09-06 | 2004-03-18 | Koninklijke Philips Electronics N.V. | Feedback random number generation method and system |
CN1687896A (zh) * | 2005-05-25 | 2005-10-26 | 威盛电子股份有限公司 | 随机数产生方法以及装置 |
CN1914590A (zh) * | 2004-01-30 | 2007-02-14 | 日本胜利株式会社 | 伪随机数生成装置以及伪随机数生成程序 |
-
2007
- 2007-09-12 CN CN2007101541086A patent/CN101127575B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2004023286A2 (en) * | 2002-09-06 | 2004-03-18 | Koninklijke Philips Electronics N.V. | Feedback random number generation method and system |
CN1914590A (zh) * | 2004-01-30 | 2007-02-14 | 日本胜利株式会社 | 伪随机数生成装置以及伪随机数生成程序 |
CN1687896A (zh) * | 2005-05-25 | 2005-10-26 | 威盛电子股份有限公司 | 随机数产生方法以及装置 |
Non-Patent Citations (2)
Title |
---|
罗述谦等.一种产生随机数的新方法.郑州大学学报(理学版)1986年 01期.1986,1986年(01期),139-142. |
罗述谦等.一种产生随机数的新方法.郑州大学学报(理学版)1986年 01期.1986,1986年(01期),139-142. * |
Also Published As
Publication number | Publication date |
---|---|
CN101127575A (zh) | 2008-02-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103812447B (zh) | 高斯白噪声发生方法及装置 | |
CN101127575B (zh) | 一种均匀分布随机数发生器及均匀分布随机数产生方法 | |
CN102298570A (zh) | 一种点数可变的混合基 fft/ifft实现装置及其方法 | |
CN105183425B (zh) | 一种具有高精度低复杂度特性的固定位宽乘法器 | |
CN101763338A (zh) | 一种点数可变的混合基fft/ifft实现装置及其方法 | |
CN104052557A (zh) | 一种Nakagami复衰落信道建模方法 | |
CN106646403A (zh) | K分布雷达杂波实时模拟方法及系统 | |
CN103197912A (zh) | 一种用于深空通信协议编码的均匀随机数生成方法 | |
CN104038770A (zh) | 一种基于随机计算的离散余弦变换实现方法及系统 | |
CN105354008A (zh) | 一种随机数生成器的输出电路及输出方法 | |
CN113721988B (zh) | 基于芯片的工作量证明方法和用于工作量证明的芯片 | |
CN102736892B (zh) | 一种非线性伪随机序列发生器 | |
CN107885486B (zh) | 一种基于查找树的复合有限域求逆装置 | |
CN100435088C (zh) | 优化的标准带符号数字的系数乘法器 | |
CN102129419B (zh) | 基于快速傅立叶变换的处理器 | |
CN101888209A (zh) | 基于fpga的高斯白噪声发生器 | |
CN102004720B (zh) | 可变长快速傅立叶变换电路及实现方法 | |
CN106774624A (zh) | 一种实时高斯白噪声硬件发生器的并行实现方法 | |
CN104699452A (zh) | 一种素域gf(p)下实现位宽可变的模乘法器 | |
CN114185014B (zh) | 一种应用于雷达信号处理的并行卷积方法及装置 | |
CN102571171B (zh) | 一种多输入多输出无线通信系统信道模型的硬件实现方法 | |
RU2451327C1 (ru) | Устройство формирования имитостойких систем дискретно-частотных сигналов с временным уплотнением информации | |
Chalapathi et al. | Order divisor graphs of finite groups | |
CN106681689A (zh) | 伪随机序列产生方法及装置 | |
CN106774625A (zh) | 一种实时相位噪声硬件发生器的并行实现方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20100901 Termination date: 20160912 |
|
CF01 | Termination of patent right due to non-payment of annual fee |