在进行控制系统仿真和随机过程仿真中,产生各种颜色的随机数是必不可少的一步。考虑到实现的方便,这里使用matlab来进行仿真。通常的做法是先利用计算机自带的高斯白噪声生成函数生成白噪声,然后再利用算法产生所需要颜色的噪声,下面逐步进行介绍。
matlab自带了白噪声随机数生成算法,rand和randn,虽然其都是生成白噪声,但是rand产生的是均匀分布的噪声,而randn产生的是高斯分布的白噪声。这两种方法产生的功率谱密度如下图所示,可以看到这两种方法生成的都是白噪声,仅是功率谱的幅值稍有不同。

使用直方图能更直观的观察到其差异:


在时钟产生的相位噪声里,噪声通常可以分为以下五种:

因此,我们需要对着五种噪声进行建模。
我们可以利用滤波器的概念来产生这些噪声。在数字信号中,我们知道,如果一个信号是白噪声,功率谱为S(f) = b0,即其功率谱密度与傅里叶频率无关,那么当这个信号通过一个1/f滚降的低通滤波器时,其输出将为So(f)=b0/f,即闪烁相位噪声。
matlab代码如下
N = 1e4;
x = rand(N,1);
xf = x;
for ind = 2:N
xf(ind) = xf(ind-1)+x(ind);
end
xf的功率谱密度如下图所示,其功率谱密度以滚降,

同理,利用差分的方法,也可以得到功率谱密度正比于傅里叶频率的随机信号。