任意分布随机数的产生:1.反函数法 2.变换法
% 指数分布随机数的产生---反函数法
N=200;
r=rand(N,1);
l=0.1;
x=-log(r)/l;
subplot(2,1,1);
plot(x);
y=ksdensity(x);
subplot(2,1,2);
plot(y);
a=0.8;
sigma=2;
N=500;
u=randn(N,1);
x(1)=sigma*u(1)/sqrt(1-a^2);
for i=2:N
x(i)=a*x(i-1)+sigma*u(i);
end
plot(x);
功率谱估计:1.自相关法xcorr
, Pw=fft(R,N)
2.周期图法periodogram()
eg:估计长度为100、均值为0、方差为1的高斯白噪声序列X(n) 的功率谱密度
x=randn(1, 100);
N=2^ceil(log2(length(x)));
[Pxx, frequency]=periodogram(x, [], N, 1);
figure
plot(frequency, Pxx)
xlabel('frequency(Hz)')
ylabel('PSD')
概率密度估计:
1.直接估计[f, xi] = ksdensity(x)
2.直方图估计hist(y,x)
%%产生一组随机序列,并画出他的直方图
x = -2.9:0.1:2.9;
y = normrnd(0,1,1000,1);
histogram(y, x);%所用matlab2019a建议使用histogram
eg:用“反函数法”产生1000指数分布的随机数
R=rand(1,1000);
lambda=0.5;
X=-log(1-R)/lambda;
plot(X,'k');
xlabel('n');
ylabel('X(n)'); axis tight;
eg:用“反函数法”产生1000瑞利分布的随机数
R=rand(1,1000);
sigma=2;
s=sigma^2;
x=0:0.01:5
X=sigma*sqrt(-2*log(R));
plot(X,'k');
xlabel('n');
ylabel('X(n)');
axis tight;
eg:用“变换法”产生 1000 个均值为 0,方差为 1 的正态分布 的随机数
r1=rand(1,1000);
r2=rand(1,1000);
x=sqrt(-2.*log(r1)).*cos(2*pi*r2);
plot(x);