matlab实现高斯信号拟合、中心极限定理
产生均匀分布的随机信号+将信号叠加
今日又做了一次大作业,目标之一是产生100个均匀分布的随机信号,叠加之后用高斯分布拟合。中间有一些收获,特此记录。
产生均匀分布的信号:
clc;
clear all;
close all;
sig=ones(100,10000);
SIGNAL=zeros(1,10000);
for i=1:100
sig(i,:)=sig(i,:).*rand(1,10000);
end
for j=1:100
SIGNAL=SIGNAL+sig(j,:);
end
除此之外,为了验证中心极限定理,我还做了一个β分布的随机数的序列,代码如下:
clc;
clear all;
close all;
r=zeros(100,10000);
sig=zeros(1,10000);
for i=1:100
for j=1:10000
r(i,j)=betarnd(2,2);
end
end
for i=1:100
sig=r(i,:);
end
再附上一些常用分布的随机生成函数:
betarnd β分布
binornd 二项分布
chi2rnd 卡方分布
exprnd 指数分布
gamrnd 伽马分布
poissrnd 泊松分布
记录一个常用函数:
[f,x]=ksdensity(sig);
matlab的help记录得很详细,大概就是求出一串数据的概率分布,返回x和f,f是每个值对应的概率,可以直接使用plot(x,f)来绘制概率分布图。
高斯分布拟合
u=mean(SIGNAL); %均值
delta=var(SIGNAL); %方差
y=1/sqrt(2*pi*delta).*exp(-(x-ones(1,length(x)).*u).^2./(2*delta));
可以改变数据长度来对比拟合效果,如下:
可以明显的见到,数据长度越长,拟合效果就越好。