当前位置: 首页 > 专利查询>陈帅专利>正文

线性同余伪随机序列快速产生方法技术

技术编号:2822053 阅读:350 留言:0更新日期:2012-04-11 18:40
实现了形如:y(n+1)=(16807×y(n))mod(2↑[31]-1)的线性同余伪随机序列的一种快速产生方法。采用一次32位乘法、两次32位加法、少量移位操作和一次最高位分离实现了线性同余伪随机序列计算式的快速算法,避免了连续减法和除法运算。完成一次算法只需要使用三个32位存储器。该方法比目前已知的同类算法速度提高达到40%以上。

【技术实现步骤摘要】

-本专利技术属于伪随机序列产生方法,可用于电子通信、电子测试仪器、计算机、信息安全 和经济技术等领域。
技术介绍
随机序列具有广阔的应用。例如,电子通信中采用随机码进行信号处理,电子测试仪器 中使用随机码序列进行仪器性能测试,计算机安全中采用随机码序列进行信息安全处理,经 济分析中采用随机序列进行系统模拟。真正的随机序列难以控制和重复利用,因而实际应用中采用的是与随机序列特性类似的伪随机序列。常用的伪随机序列有m序列和线性同余序列。线性同余的随机数发生器_K" + l) = (16807x_y("))mod(231—l)是整周期的,已被广泛应用,且经过了更多检验,其周期为素数231 —1 = 2147483647=2. 147483647X109。直接进行该 式的线性同余计算需要64位的整数除法运算。而在8位或16位的嵌入系统中一般都没有64 位的整数除法运算,则最简单的方法是采用循环减法实现该同余序列运算中的整数除法,即采用将积循环减去模数231-1,直到被减数小于模数231-1,则最后的被减数即为求得的同余数。采用循环相减的方法,若循环的次数大,必然影响速度。为此,Montgomery提出了一 种求两个大整数乘积的模的快速算法,算法也不需要除法,只采用乘法、加法和右移位,实 际上采用边乘边移位,且结果还需要进一步处理。如果参加乘积的数很大,则移位很多,必 然降低运算速度。文献《於8051單晶片上實作RSA密碼系統之能量擊及防禦措施》采用了改 变初始值设定,两次调用该Montgomery算法实现形如S=(xXy) mod N运算,即两个大整数 乘积的模的计算,运算速度必然又大大降低。本专利技术提出的线性同余伪随机序列快速计算方法,不需要除法,只要一次乘法、两次加 法、少量移位操作和一次最高位分离。可以方便地采用软件、嵌入系统和数字集成芯片实现
技术实现思路
-对计算线性同余序列K" + l卜(16807x;K"))mod(23'-l)的运算,提出了一种新的快速算法,算法包括一次乘法、两次加法、少量移位操作和一次最高位分离。算法使用三个 32位存储单元, 一个32位存储器用于存储常数16807,另两个32位存储器依次用于存储乘 法结果、移位结果、加法结果。算法步骤如下(1) 将输入值少(")与常数16807分别存入两个32位存储单元中;(2) 将步一骤(1)中数据进行32位乘法运算,乘积分别存入低32位存储单元和高32位存申. (3) 将乘积^J高32位存储单元整体向高位移动一位(将乘积的最高位丢弃),然后,将乘 积的低32位存储单元的最高位移入乘积高32位存储单元的最低位;(4) 将乘积的低32位存储单元的最高位置为零;(5) 将步骤(3)和(4)所得的两个32位存储单元进行32位的加法运算得到32位和值;(6) 将步骤(5)所得和值的高位(l或0值)取出,存入另一32位存储单元,将步骤(5)和值的最高位置成零值(最高位分离);(7) 将步骤(6)所得两个32位存储单元值相加,得到32位的和值,即为线性同余线性序列的一次序列值:K" + l);该快速算法可以方便地采用数字集成电路或软件实现。 本专利技术的有益效果是1、 采用了原位运算,只使用了三个32位的存储单元,不需要额外的存储单元,节约 了存储资源。2、 采用了一次乘法、两次加法,以及移位运算,避免了减法和除法运算,提高了运 算速度。3、 采用软件或集成芯片可以方便快速实现算法,从而快速获取线性同余随机序列。 附图说明图l是的算法原理图2是C语言实现的线性同余快速计算流程图3是线性同余快速计算的数字电路模型; 图4线性同余快速计算的数字电路模型仿真。具体实施例方式结合图1解释方法具体实施方式。算法输入:K")和常数16807,输出同余计算值少("+ l)。 输入值:K")和常数16807保存在32位(4字节)存储单元内,其中保存常数的4字节从低到到字节分别存储167, 65, 0, 0。首先将输入少(w)和常数16807送入32位乘法器(可以采用快速乘法算法实现)进行32位乘法运算,得到64位的整数乘积,分别保存在两个32位存储 单元内,分别称为存储乘积的低32位(第0 31位)和高32位(第32 63位)。然后,将存 储乘积的高32位(第32 63位)从最高位(第63位)至低位(第32位)依次向高位移动一 位,最高位(实际为零)丢弃,B卩第62位移入第63位,第61位移入第62位, 一直到第 32位移入第33位。再将存储乘积的低32位(第0~31位)的最高位即第31位移入第32位, 而第31位填充零值。接着,将这两个32位存储单元(第0~31位)的数值送入32位加法器进 行32位的求和运算,和值保存在其中一个32位(第0 31位)存储单元中,称为和值。然后 将和值的最高位(第31位)值(为1或0值)存入另一个32位存储单元(第0 31位)的最 低位(第0位,其余位置零值),将和值单元的最高位(第31位)置成零。最后,将和值单 元值(第0~31位)与另一个32位存储单元值(第0~31位)送入32位加法器进行32位加法运算,所得结果即为同余计算值:K" + i)。实现例l:采用C语言实现算法,使用Turbo C2.0编译器和个人台式机实现程序。使用C语言中一 个一维长度为四的无符号字符数组存储算法中的一个32位整数,运算时使用数组存储的 ASCII码值。先编程实现四字节(32位)的加法器和32位的乘法器函数。32位的加法器函 数通过调用16位的加法器函数实现。而16位的加法器函数通过调用8位加法器函数实现。 32位的乘法器采用前苏联数学家Karatsuda和Ofman提出的两个大整数相乘的快速乘法,即 转化为4次调用16位的乘法和一些8位加法实现,而16位的乘法转化为4次调用8位乘法 器和一些8位加法器实现。再编程调用函数实现专利技术的算法步骤,C语言实现流程如图2。在 个人计算机上多次调用运行线性同余序列的快速计算算法程序与Montgomery快速算法程序, 运行时间对比如下表。可见,提出的快速同余算法速度快约40%以上,这是由于新的算法减 少了移位次数,从而提高了运算速度。决速同余算法与Montgomery快速算法耗时对比表(CPU主频1400MHz,内存256MB)调用算法次数快速同余算法 耗费时间(ms)Montgomery算法 耗费时间(ms)快速同余算法 比Montgomery算 法节约时间比率10533055040.0%1063130544042. 5%实现例2:采用数字电路模型实现线性同余的快速算法,模型如图3。在输入时钟信号set的上升沿 完成对输入信号"的一次线性同余计算,产生输出信号out,输出信号为oz431..0] = (16807x/w)mod(231 -1),采用Verilog HDL硬件描述语言描述为module linear一seq(set, in, out) ;//输入in,输出out,时钟信号seti叩ut set; 〃输入时钟信号为一位信号input in;〃输入in为32位output out;〃输出out为32位reg out;〃存储单元,乘积最大数只占63位reg a;〃存储常数单元always @(po本文档来自技高网
...

【技术保护点】
一种实现线性同余伪随机序列:y(n+1)=(16807×y(n))mod(2↑[31]-1)的快速运算算法,其中n为计算的序列序号,y(1)为初始值,y(n+1)和y(n)分别是计算后与计算前的序列值,其特征在于,采用了一个32位的乘法器、两个32位的加法器以及移位和最高位分离等操作实现了运算算法;。

【技术特征摘要】

【专利技术属性】
技术研发人员:陈帅
申请(专利权)人:陈帅
类型:发明
国别省市:34[中国|安徽]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1