19-20第一学期《随机信号分析》课程设计
一、题目:
产生一个均值为0,方差为1的高斯分布的随机变量并检验。
验证方式:
在产生高斯分布随机数后,1、画出其概率密度图像,观察图像是否符合高斯分布的特征。2、求产生随机数的数学期望和方差,和m、σ^2进行比较。3、利用matlab中Lilliefors函数检测产生的随机数是否服从高斯分布。
Lilliefors函数:[h,p]=lillietest(Y) (返回值h为假设,只有0和1两种情况,h=0假设符合正态分布,h=1假设不符合正态分布。返回值p为事情的发生概率,p<0.05,为不可能事件,拒绝;p>0.05,接受)
二、MATLAB代码
function Y = GaussRandomNumbers
%产生服从高斯分布的随机变量Y
%最终产生n-1个数
n=10000;
%输入方差和数学期望
var1=input('请输入高斯分布的方差var=:');
m=input('请输入高斯分布的数学期望m=:');
%产生第一个均匀分布随机数X1
x1=zeros(1,n);
x1(1)=224;
X1=zeros(1,n-1);
for i=2:n
x1(i)=mod(2045*x1(i-1)+1,2^20);
X1(i-1)=x1(i)/2^20;
end
%产生第二个均匀分布随机数X2
x2=zeros(1,n);
x2(1)=156;
X2=zeros(1,n-1);
for j=2:n
x2(j)=mod(2045*x2(j-1)+1,2^20);
X2(j-1)=x2(j)/2^20;
end
%产生高斯分布的随机数Y
for u=2:n
Y1(u-1)=sqrt(-2*log(X1(u-1)));
Y2(u-1)=cos(2*pi*X2(u-1));
Y(u-1)=sqrt(var1)*Y1(u-1)*Y2(u-1)+m;
end
%画出Y的时域特性曲线(观察Y的分布)
figure(2)
plot(Y)
title('时域特性曲线');xlable('时间(t)');xlable('幅度')
%画出Y概率密度图像:
figure(1)
[a,b]=ksdensity(Y);
plot(b,a);
title('随机变量Y概率密度图像');xlabel('y');ylabel('f(y)');
%检验:
%1、检验生成的随机数方差和数学期望是否与输入一致
V=var(Y)
M=mean(Y(:))
%2、用matlab的Lilliefors检验Y是否服从正态分布
%返回值h为假设,只有0和1两种情况,h=0假设符合正态分布,h=1假设不符合正态分布
%返回值p为事情的发生概率,p<0.05为不可能事件,拒绝;p>0.05,接受
[h,p]=lillietest(Y)
三、C语言代码
#include <stdio.h>
#include <math.h>
int main()
{
int N=999;
float x1a[N];float num[N];float a[N];float b[N];float x1[N];float x2a[N];float x2[N];
int n;
float mean;float var;
scanf("%d %f %f",&n,&mean,&var);
//设置要产生的随机数的数量n、均值mean、方差var
int i=2;
int pi=3.14159;
float M=pow(2.0,20.0);
x1a[1]=224;
x2a[1]=156;
for (i=2;i<=n;i++)
{
x1a[i]=(float)((int)(2045.0*x2a[i-1]+1.0)%(int)M);
x1[i-1]=x1a[i]/M;//产生均匀分布的X1
x2a[i]=(float)((int)(2045.0*x2a[i-1]+1.0)%(int)M);
x2[i-1]=x2a[i]/M;//产生均匀分布的X2
a[i-1]=sqrt(-2.0*log(x1[i-1]));
b[i-1]=2*pi*x2[i-1];
num[i-1]=var*a[i-1]*cos(b[i-1])+mean;
//利用X1,X2产生高斯分布num
printf("%f",num[i-1]);
printf("\n");
}
system("pause");
return 0;