关于随机数这块的算法来源于殷福亮、宋爱军——《数字信号处理C语言程序集》。

博文的目的主要是针对书中的一些C算法原理做一定的阐述,部分内容来源于收集的材料。

程序平台:Debian/Win7 + Eclipse(C/C++ Developers) + Mingw GCC 

程序语言:C Language 

相关知识:概率论 + 高等数学 

作者语:

有关《数字信号处理C语言算法》这个系列,由于原书大多只提供算法公式,对于公式背后的原理,并没有细讲解,所以,自己不得不参考很多书籍,有些地方甚至改了4遍,仍不满意。为了使这个系列具有很强的专业性和实用性,有关文章只有很成熟时,才会发表在博文中,因此,更新会比较慢。

这个系列的文章,本来是准备在Debian7系统下完成的,但由于缺少相应的公式编辑器,所以选择Win7,Debian7下只做部分算法的验证部分;当 然,公式的验证也可采用Excel,Origin等工具,不会有任何差异;如果只是用于C/C++普通编程,在Win7下建议使用eclipse for c/c++ ;使用Debian7的朋友,系统自带vim就是很好的工具。

由于博文中公式较多,而网页不支持公式编辑器格式,所以将公式有关部分,全部截图,作为网页内容,如果有不清楚的地方,可以给我留言。

1. 均匀分布随机数:

2. 混合同余法:

通过同余运算生成伪随机数的方法称为同余法,常用的同余法包括加同余法、乘同余法、混合同余法、除同余法,其迭代公式为:

3. 混合同余法特点:

4. 欧拉函数

5. 原根

6. uniform.h函数分析:

附:源码

#ifndef UNIFORM_H
#define UNIFORM_H

double uniform(int a,int b,long int *seed);

//*seed 任意的种子数
//随机数的值区间:a~b
double uniform(int a,int 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);
}

#endif

7. eclipse中例程生成效果:

8. 一个检测七彩球的例程(点击下载附件)

下一篇:《数字信号的产生(2)——正态分布随机数》 

注意:本站所有文章除特别说明外,均为原创,转载请务必以超链接方式并注明作者出处。 标签:DSP,随机数,处理算法