这次作业的内容是理解噪声的生成,同时了解各种随机噪声的特性。
第一项作业主要是监测按照不同的模型生成的随机数与原本模型的契合度,这里举了两个例子,我就来根据代码以及程序运行的结果来一一进行解释。
代码如下:
x = -5:0.1:5; %直方图的范围
y = randn(10000,1);%产生一组随机序列,10000个。
z=rand(1,10000)*10-5;
t = -5:0.01:5;
hist(y,x);%画出直方图
hold on;
xm=mean(y);
xv=var(y);
disp(xm);
disp(xv);
pdf = length(y)*0.1*exp(-t.^2/2)/sqrt(2*pi);%产生高斯概率分布pdf
plot(t,pdf,'r')%画出高斯概率分布函数
a=xcorr(y);
figure;
plot(a);
figure;
hist(z,x);
hold on;
xm=mean(z);
xv=var(z);
disp(xm);
disp(xv);
pdf = t*0+length(y)/(10/0.1);%产生均匀概率分布pdf
plot(t,pdf,'r')%画出均匀概率分布函数
im1 im2 im3
首先来看程序,程序先中定义了直方图的范围,从-5到5,其中分度值为0.1,也就是一共10/0.1=100个量化等级。
随后产生了两组随机数,y是基于高斯分布模型产生的随机数,z是均匀分布的随机数,二者都产生了10000个数据。
随后先对y这组数据进行处理,用hist函数,根据之前定义的范围,画出了这
组随机数的概率分布函数。
可以看出其基本的轮廓和正态分布还是非常接近的,但是在某些值上参差不齐,会有突然突出或者凹陷的情况。
在画完之后,程序调
用mean和var函数对这一组数据分别进行了求方差和求均值的操作。
这里的输出分别为方差0.9909,而均值为-8.9737e-04,也就是0.00089737.randn函数默认的模型是方差为1而均值为0的正态分布函数,因此生成的随机数虽然有些误差,但是在大体方向上还是遵循了这个模型的方差与均值。
随后程序中pdf = length(y)*0.1*exp(-t.^2/2)/sqrt(2*pi);这个语句,就是生成对应的高斯分布的概率密度函数。
exp(-t.^2/2)/sqrt(2*pi)这一部分很明显就是均值为0,方差为1的高斯分布的密度函数。
随后length(y)*0.1这个系数,是数据个数*分度值,来让
这个概率密度函数和画出来的条形图相吻合,也就是类似归一化的过程。
和之前的那组条形图,也就是实际随机数据的条形图画在一起,可以看出基本上是符合的。
但是由于量化等级太少而且样本数不够多,还是有在此基础上很明显的波动
的。
由于作业中要求求随机数的自相关,这里使用了xcorr函数。
自相关就是求自己和自己在不同时刻的相关性,这里的算法具体是由卷积体现的,即E(t)=f(t)*f(-t),如果在相差Δt时刻的卷积值越大,说明自身在这个时间差
上越有可能存在关系,也就是说f(t)对f(t+Δt)的影响越大。
而在im2中可以看出,只有中间有一个峰值,类似Δn的一个函数波形。
这说明这个噪声其取值是完全随机的,只有自身与自身同一时刻的相关值很大,其中某一时刻的值对其他时刻的值都没有影响。
后面程序的内容基本与前面一致,只不过生成随机数的过程换为了用rand函数,这里也是产生了-5到5范围内的随机数,从最后呈现的图中可以看出整个数据基本上也是在均值附近震荡的。
其均值和方差分别为 0.0536和8.3698,而其模型本身均值应该为0,方差应该为10*10/12=8.333,可见这一部分的随机数也是符合设定的。
还要提到的是,由于其直方图绘画的范围是-5+n*0.1+-0.05,因此两边的条形图的数值只有其他的一半。
随后我们来看第二个作业的代码与运行结果。
代码如下:
a=[0.082,0.015,0.027,0.043,0.126,0.022,0.02,0.061,0.07,0.002,0.008,0. 04,0.024,0.066,0.075,0.019,0.001,0.06,0.063,0.091,0.028,0.01,0.024,0. 002,0.02,0.001];
EC= 'A':'Z' ;
N = 1000000;
N1=10000;
P = randsample(EC,N,true,a);
P1 = randsample(EC,N1,true,a);
for i=1:26
k(i) = size(find(P == EC(i)),2);
k1(i) = size(find(P1 == EC(i)),2);
end
plot(a);
hold on;
plot(k/N,'r');
hold on;
plot(k1/N1,'b');
im4 im5
如上所示,这里参照作业中的提示,编译了这个程序,但是在要求的基础上也加以了一些自己的调整。
首先来看程序,a这个数组中存储了26个字母每一个的出现概率,其总和为1。
随后E这个数组生成了26个字母,与上面的26个概率值相对应。
随后randsample函数,生成随机符号数组,其后面的参数分别是符号来源,数据个数,符号是否可重复,各个符号出现的概率。
这里分别生成了两
个数组,一个是千万级的样本,一个是万级的样本。
随后的find语句,分别找出了样本中的26种字母,而size语句则计算出了它的个数,也就是最后曲线图需要呈现的值。
在最后这个曲线图im4中,可以看到一共只有两条线,但是程序中却写了3个plot语句。
对此的解释也很简单,在千万级的样本面前其统计结果已十分接近原函数,在大分度值的情况下二者基本上是重合的,但是万级样本还是太小,在这种分度值下无法与原本模型完全重合。
但是如im5所示,在放大多倍后可以
看出还是有极其微小的差异的。
也就是说,按照某个模型生成的随机数组,在样本个数足够多的情况下,会十分接近原始的模型,因此用这种方法产生的随机数,还是可以较为准确的体现出原本模型的一些特性。