通常公式中参数常用取值为s(0)=12357,r=2045,b=1,M=1048576。
2实验内容
(1)编程实现产生10000个在(0,1)区间均匀分布随机数。
计算生成随机数的1~4阶矩,最大值,最小值,频度直方图。
(2)编程实现产生10000个N(3,4)高斯随机数。
计算生成随机数的1~4阶矩,最大值,最小值,频度直方图。
(3)编程实现产生10000个N(1,2)高斯随机数和10000个N(3,4)高斯随机数。
计算其自相关函数,计算两个高斯随机信号的互相关函数。
(4)生成一个10000点高斯随机信号x(n):
N(1,4)。
将该信号延迟N点,N<200,得到随机信号y(n)。
计算两个信号的互相关函数,搜索峰值位置估算延迟。
三、主要仪器设备
微型计算机、Matlab开发环境(本报告采用MATLAB2016a)
(注:
以下为代码内容已经有详细的说明已包括步骤和操作办法)
四、实验步骤与操作方法
实验内容
(1):
编程实现产生10000个在(0,1)区间均匀分布随机数。
计算生成随机数的1~4阶矩,最大值,最小值,频度直方图
代码如下:
%%清除以前数据缓存以及命令行窗口的显示
clear
clc
%%均匀分布随机数的产生
%生成10000数据
s=randuniform(1048576,1,2045,12357,10000);
%%画线
figure,plot(s)%全部
title('全部数据连线')
figure,plot(s(1:
100))%前100个数据
title('前100个数据连线')
%%画点
figure,plot(s,'.')%全部
title('全部数据画点')
figure,plot(s(1:
100),'*')%前100个数据
title('前100个数据画点')
%%画直方图
hist(s)
title('10个区间')
hist(s,100)
title('100个区间')
%%估计随机数的分布
[f,xi]=ksdensity(s);
figure,plot(xi,f);
title('利用MATLAB函数ksdensity估计得概率密度')
%%随机数的均值、均方值、一维三阶原点矩、一维四阶原点矩
m=zeros(1,4);%生成[0000]
fori=1:
10000
m
(1)=m
(1)+s(i);%均值
m
(2)=m
(2)+s(i)^2;%二阶矩
m(3)=m(3)+s(i)^3;%三阶
m(4)=m(4)+s(i)^4;%四阶
end
m5=max(s);%最大值
m6=min(s);%最小值
m=m/10000;
disp(['均值=',num2str(m
(1))]);
disp(['均方值=',num2str(m
(2))]);
disp(['三阶原点矩=',num2str(m(3))]);
disp(['四阶原点矩=',num2str(m(4))]);
disp(['最大值=',num2str(m5)]);
disp(['最小值=',num2str(m6)]);
%对比:
Matlab函数
disp('========以下对比Matlab库函数生成的数据========')
disp('=====按任意键继续=====')
pause;
%生成10000数据
sm=rand(1,10000);
%画线
figure,plot(sm)%全部
title('全部数据连线')
figure,plot(sm(1:
100))%前100个数据
title('前100个数据连线')
%画点
figure,plot(sm,'.')%全部
title('全部数据画点')
figure,plot(sm(1:
100),'*')%前100个数据
title('前100个数据画点')
%画直方图
hist(sm)
title('10个区间')
hist(sm,100)
title('100个区间')
%估计随机数的分布
[f,xi]=ksdensity(sm);
figure,plot(xi,f);
title('利用MATLAB函数ksdensity估计得概率密度')
%求随机数的均值、均方值、一维三阶原点矩、一维四阶原点矩
m=zeros(1,4);%生成[0000]
fori=1:
10000
m
(1)=m
(1)+sm(i);%均值
m
(2)=m
(2)+sm(i)^2;%二阶矩
m(3)=m(3)+sm(i)^3;%三阶
m(4)=m(4)+sm(i)^4;%四阶
end
m5=max(sm);%最大值
m6=min(sm);%最小值
m=m/10000;
disp(['均值=',num2str(m
(1))]);
disp(['均方值=',num2str(m
(2))]);
disp(['三阶原点矩=',num2str(m(3))]);
disp(['四阶原点矩=',num2str(m(4))]);
disp(['最大值=',num2str(m5)]);
disp(['最小值=',num2str(m6)]);
实验内容
(2):
编程实现产生10000个N(3,4)高斯随机数。
计算生成随机数的1~4阶矩,最大值,最小值,频度直方图。
代码如下:
%%清除以前数据缓存以及命令行窗口的显示
clear
clc
%%高斯分布随机数的产生
%生成10000数据
m=0;
a=1;
num=10000;
s=rnd(m,a,num);%rnd()自己编写的产生高斯随机数的函数
%%画线
figure,plot(s)%全部
title('全部数据连线')
figure,plot(s(1:
100))%前100个数据
title('前100个数据连线')
%%画点
figure,plot(s,'.')%全部
title('全部数据画点')
figure,plot(s(1:
100),'*')%前100个数据
title('前100个数据画点')
%%画直方图
hist(s)
title('10个区间')
hist(s,100)
title('100个区间')
%%估计随机数的分布
[f,xi]=ksdensity(s);
figure,plot(xi,f);
title('利用MATLAB函数ksdensity估计得概率密度')
%%求随机数的均值、均方值、一维三阶原点矩、一维四阶原点矩、最大值和最小值
m=zeros(1,4);%生成[0000]
fori=1:
10000
m
(1)=m
(1)+s(i);%均值
m
(2)=m
(2)+s(i)^2;%二阶矩
m(3)=m(3)+s(i)^3;%三阶
m(4)=m(4)+s(i)^4;%四阶
end
m5=max(s);%最大值
m6=min(s);%最小值
m=m/10000;
disp(['均值=',num2str(m
(1))]);
disp(['均方值=',num2str(m
(2))]);
disp(['三阶原点矩=',num2str(m(3))]);
disp(['四阶原点矩=',num2str(m(4))]);
disp(['最大值=',num2str(m5)]);
disp(['最小值=',num2str(m6)]);
%%对比:
Matlab函数
disp('========以下对比Matlab库函数生成的数据========')
disp('========按任意键继续========')
%pause;
%%生成10000数据
sm=random('normal',0,1,1,num);
%%画线
figure,plot(sm)%全部
title('全部数据连线')
figure,plot(sm(1:
100))%前100个数据
title('前100个数据连线')
%%画点
figure,plot(sm,'.')%全部
title('全部数据画点')
figure,plot(sm(1:
100),'*')%前100个数据
title('前100个数据画点')
%%画直方图
hist(sm)
title('10个区间')
hist(sm,100)
title('100个区间')
%%估计随机数的分布
[f,xi]=ksdensity(sm);
figure,plot(xi,f);
title('利用MATLAB函数ksdensity估计得概率密度')
%%求随机数的均值、均方值、一维三阶原点矩、一维四阶原点矩、最大值和最小值
m=zeros(1,4);%生成[0000]
fori=1:
10000
m
(1)=m
(1)+sm(i);%均值
m
(2)=m
(2)+sm(i)^2;%二阶矩
m(3)=m(3)+sm(i)^3;%三阶
m(4)=m(4)+sm(i)^4;%四阶
end
m5=max(sm);%最大值
m6=min(sm);%最小值
m=m/10000;
disp(['均值=',num2str(m
(1))]);
disp(['均方值=',num2str(m
(2))]);
disp(['三阶原点矩=',num2str(m(3))]);
disp(['四阶原点矩=',num2str(m(4))]);
disp(['最大值=',num2str(m5)]);
disp(['最小值=',num2str(m6)]);
实验内容(3):
(3)编程实现产生10000个N(1,2)高斯随机数和10000个N(3,4)高斯随机数。
计算其自相关函数,计算两个高斯随机信号的互相关函数。
代码如下:
%%清除以前数据缓存以及命令行窗口的显示
clear
clc
%定义高斯随机的方差和均值及产生的数量
m1=1;
a1=2;
m2=3;
a2=4;
num=10000;
%利用自带函数产生高斯随机数
d1=random('norm',1,2,1,num);
d2=random('norm',3,4,1,num);
%计算自相关和互相关函数
Rx1=xcorr(d1);
Rx2=xcorr(d1);
Rx1x2=xcorr(d1,d2);
m=-num+1:
num-1;
figure,plot(m,Rx1);
figure,plot(m,Rx2);
figure,plot(m,Rx1x2);
实验内容(4):
(4)生成一个10000点高斯随机信号x(n):
N(1,4)。
将该信号延迟N点,N<200,得到随机信号y(n)。
计算两个信号的互相关函数,搜索峰值位置估算延迟。
代码如下:
%%清除以前数据缓存以及命令行窗口的显示
clear
clc
%定义高斯随机的方差和均值及产生的数量
m1=1;
a1=4;
num=10000;
fs=500;
N=100;
long=1000;%由于数据过多,延时图比较不明显,显示1000个数据
%利用自带函数产生高斯随机数
x1=random('norm',1,4,1,num);
x2=random('norm',1,4,1,num);
x=random('norm',1,4,1,N);%产生一个1维N个随机高斯随机数,用来替换延时后的空位
%延时N
fori=1:
10000
if(i<=100)
x2(i)=0;%将延时后的前100用零代替
else
x2(i)=x1(i-N);
end
end
figure,subplot(2,1,1),plot(x1(1:
long));
title('原随机信号')
subplot(2,1,2),plot(x2(1:
long),'r');%延迟与原随机信号同一张图中比较
title('用0替换延时后的延时信号')
[cor11,lag11]=xcorr(x1,x2);
figure,plot(lag11/fs,cor11)
title('延时100且用高斯随机数替代延时后两个函数的互相关函数')
%求最大值,和延时
max11=0;
fori=1:
10000
if(cor11(1,i)>max11)
max11=cor11(1,i);
delay11=lag11(1,i);
end
end
max11
delay11
%延时N
fori=1:
10000
if(i>N)
x2(i)=x1(i-N);
else
x2(i)=x(i);%将延时后的前100用产生的高斯随机数代替
end
end
figure,subplot(2,1,1),plot(x1(1:
long));%延迟与原随机信号同一张图中比较
title('原随机信号')
subplot(2,1,2),plot(x2(1:
long),'r');%延迟与原随机信号同一张图中比较
title('用高斯随机数替换后的延时信号')
[cor12,lag12]=xcorr(x1,x2);
figure,plot(lag12/fs,cor12)
title('延时100且用高斯随机数替代延时后两个函数的互相关函数')
%求最大值,和延时
max12=0;
fori=1:
10000
if(cor12(1,i)>max12)
max12=cor12(1,i);
delay12=lag12(1,i);
end
end
max12
delay12
附:
本次作业中用到的两个随机信号源代码
1.产生(0,1)区间均匀分布随机数的函数:
functions=randuniform(M,b,r,first,num)
%%调用示例:
s=randuniform(1048576,1,2045,12357,10000)
%其中,s(n)为n时刻的随机数种子,r为扩展因子,b为固定扰动项,M为循环模,ModM表示对M取模。
%通常公式中参数常用取值为s(0)=12357,r=2045,b=1,M=1048576。
s=zeros(1,num);
s
(1)=first;
fori=2:
num
s(i)=mod(s(i-1)*r+b,M);
end
s=s/M;
2.高斯随机序列产生函数:
function[s1,s2]=rnd(m,a,num)
%其中a是均值,m是方差,num变量则是数据量
%%调用示例:
s=rnd(0,1,1000),
x1=rand(1,num);
x2=rand(1,num);
y1=sqrt(-2*log(x1)).*cos(2*pi*x2);
y2=sqrt(-2*log(x1)).*sin(2*pi*x2);
s1=a*y1+m;
s2=a*y2+m;
end
五、实验数据记录和处理
实验内容
(2)结果:
图1-1.1:
10000个均匀随机数的连线图(自编函数)
图1-1.2:
前100个均匀随机数连线图(自编函数)
图1-1.3:
10000个均匀随机数数据点图(自编函数)
图1-1.4:
10000个均匀随机变量频度直方图(自编函数)
图1-1.5:
估得的概率密度图(自编函数)
图1-1.6:
10000个均匀随机数的连线图(库函数)
图1-1.7:
前100个均匀随机数的连线图(库函数)
图1-1.9:
10000个均匀随机变量频度直方图(库函数)
图1-1.8:
10000个均匀随机数的数据点图(自编函数)
图1-1.10:
估得的概率密度图(库函数)
以下是得到的运算数据:
表1-1.1实验内容
(1)自编函数数据处理记录表
均值
均方值
三阶原点矩
0.49724
0.33062
0.24762
四阶原点矩
最小值
最大值
0.19795
7.6294e-06
0.99986
表1-1.2实验内容
(1)库函数数据处理记录表
均值
均方值
三阶原点矩
0.49956
0.33246
0.24874
四阶原点矩
最小值
最大值
0.19847
7.0261e-05
0.99979
实验内容
(2)结果:
图1-2.1:
10000个高斯随机数的连线图(自编函数)
图1-2.2:
前100个高斯随机数的连线图(自编函数)
图1-2.3:
10000个高斯随机数的数据点图(自编函数)
图1-2.4:
10000个高斯随机变量频度直方图(自编函数)
图1-2.5:
估得的高斯概率密度图(自编函数)
图1-2.6:
10000个高斯随机数的连线图(库函数)
图