如何使用 Matlab 生成具有零均值和单位方差的高斯随机过程?
高斯随机变量可以通过
w=(1/sqrt(2*pi))*exp(-(t.^2)/2);
但是高斯随机过程呢?
如何使用 Matlab 生成具有零均值和单位方差的高斯随机过程?
高斯随机变量可以通过
w=(1/sqrt(2*pi))*exp(-(t.^2)/2);
但是高斯随机过程呢?
如果高斯过程是白色的(不同时刻的样本之间没有相关性),只需使用
w = randn(1,n);
其中n
是所需的样本数。
如果需要引入样本之间的相关性(即不同时刻的值是相关的),通常的做法是生成一个白高斯过程,然后应用低通滤波器(使用conv
或filter
)。过程的自相关由滤波器形状决定。
例如,
w = randn(1,500);
y = conv(w,ones(1,100)/10,'same'); %// apply a simple low-pass filter
plot(w)
hold on
plot(y,'r')
您可以看到,由于滤波器引入的(自动)相关性,滤波后的信号(红色)具有更平滑的时间变化。
具有指定相关长度 (cl) 和 RMSE 高度 (hRMSE) 的随机高斯过程可以通过将具有均值 0 和标准偏差 hRMSE 的白噪声通过高斯滤波器来生成g=exp(-(x.^2)/(cl^2/2))
。
此外,您可以在以下链接下找到 Matlab 代码:http ://www.mysimlabs.com/matlab/surfgen/rsgeng1D.m
已转录如下:
function [f,x] = rsgeng1D(N,rL,h,cl)
%
% [f,x] = rsgeng1D(N,rL,h,cl)
%
% generates a 1-dimensional random rough surface f(x) with N surface points.
% The surface has a Gaussian height distribution function and a Gaussian
% autocovariance function, where rL is the length of the surface, h is the
% RMS height and cl is the correlation length.
%
% Input: N - number of surface points
% rL - length of surface
% h - rms height
% cl - correlation length
%
% Output: f - surface heights
% x - surface points
%
% Last updated: 2010-07-26 (David Bergström).
%
format long;
x = linspace(-rL/2,rL/2,N);
Z = h.*randn(1,N); % uncorrelated Gaussian random rough surface distribution
% with mean 0 and standard deviation h
% Gaussian filter
F = exp(-x.^2/(cl^2/2));
% correlation of surface using convolution (faltung), inverse
% Fourier transform and normalizing prefactors
f = sqrt(2/sqrt(pi))*sqrt(rL/N/cl)*ifft(fft(Z).*fft(F));