基于DSP的任意长度伪随机序列产生方法
, 序列长度减1。把模数M 也减1, 以对应新的序列长度。再调用求余子程序, 根据线性同余算法公式进行运算,得到又一个余数。然后同样会得到一个新访问地址,同样能输出内存中长度为M - 1的序列中的某个数,将其输出。
随后, 把上一步已输出数后面的每个数再都向前存放一个地址, 这样内存中的序列首地址还不变, 序列长度再减1, 把模数M 也再减1。按照刚才阐述的操作步骤重复进行, 直至模数被减为1, 就会输出一个符合要求的长度为的伪随机序列。此时的序列就是任意长度的伪随机序列。
最后, 如果内存中的数都被输出完, 重新导入长度为M 的序列, 并更换种子 , 乘数和加数可以更换也可以不更换。然后进入新一轮的伪随机数生成,新生成序列中的M 个数和已生成序列中的M 个数相比较顺序已经被完全打乱。这样一直重复操作下去,每输出M 个数更换一次种子, 就可以生成含有M 个元素的长度为n ×M ( n为正整数)的伪随机序列。
操作流程, 如图1所示。
DSP主要汇编程序 。程序中以j19寄存器中所放值为基地值、长度为M (M 为任意值)的一组数就是得到的长度为M (M 为任意值)的伪随机序列, 想要得到含有M 个元素的长度为n ×M ( n为正整数)的伪随机序列, 只要每隔M 个数更换种子重新运行程序就可以得到。
当外部文件中存有1~M 依次排列的M 个数时,仿真结果举例如下:
当M = 8, a = b = X0 = 7时, 生成序列为{ 1, 2,5, 4, 3, 8, 6, 7, 12, ...} , 周期为8; 当M = 10,a = b = X0 = 7 时, 生成序列为( 7, 3, 1, 2, 6, 5,4, 10, 8, 9, 7, 3, ...) , 周期为10; 当M = 11,a = 5, b = 3, X0 = 4 时, 生成序列为{ 2, 5, 8, 11,4, 10, 7, 9, 6, 3, 1, 2, 5, ...} , 周期为11; 当M = 12, a = 5, b = 3, X0 = 4时, 生成序列为{ 12, 2,5, 8, 11, 4, 10, 7, 9, 6, 3, 1, 12, 2, ...} , 周期为12。
由仿真结果可以看出, 文中介绍的方法能灵活产生任意长度的伪随机序列。
3 结束语
伪随机序列有着广泛的应用前景, 在通信传输和雷达抗干扰方面尤为重要, 序列长度是影响其应用的关键因素。文中讨论了伪随机序列长度和遍历性的矛盾, 提出了基于DSP芯片具有遍历性的任意长度伪随机序列的工程实现方法。给出了对该实现方法具体步骤的分析, DSP程序的仿真结果显示了该实现方法的正确性和有效性。在应用中可方便地修改程序中各参数, 以满足各种场合不同的需求。
- 在采用FPGA设计DSP系统中仿真的重要性 (06-21)
- 基于 DSP Builder的FIR滤波器的设计与实现(06-21)
- 达芬奇数字媒体片上系统的架构和Linux启动过程(06-02)
- FPGA的DSP性能揭秘(06-16)
- 用CPLD实现DSP与PLX9054之间的连接(07-23)
- DSP+FPGA结构在雷达模拟系统中的应用(01-02)