matlab 如何为2D高斯模型创建噪波?

mgdq6dx1  于 2023-05-29  发布在  Matlab
关注(0)|答案(3)|浏览(164)

我试图在2D高斯曲线上练习曲线拟合,但为了做到这一点,我需要在预定义的高斯曲线上添加随机噪声。我的第一个本能是循环两个for循环,用随机数创建两个矩阵X和Y,但当我尝试时(我没有代码了)Matlab不让我绘制高斯曲线,因为我没有使用meshgrid函数生成X和Y值。既然我似乎需要使用meshgrid,谁能帮我弄清楚如何生成一个随机meshgrid,这样我就可以添加一些噪音到我的高斯?

amp = 1;
x0 = 0;
y0 = 0;
sigmaX = 1;
sigmaY = 1;
%X = 1:1:100;
%Y = 1:1:100;
[X,Y] = meshgrid(-3:.1:3);
%Z = X .* exp(-X.^2 - Y.^2);
Z = amp*exp(-((X-x0).^2/(2*sigmaX^2)+(Y-y0).^2/(2*sigmaY^2)));
surf(X, Y, Z);

%Add noise now

编辑:所以我发现兰德可以返回一个随机矩阵,它可以与surf函数一起工作(由于某种原因,它之前对我不起作用)。结果如下所示:noisy 2D gaussian

amp = 1;
x0 = 0;
y0 = 0;
sigmaX = 1;
sigmaY = 1;
[X,Y] = meshgrid(-3:.1:3);
%Z = X .* exp(-X.^2 - Y.^2);
Z = amp*exp(-((X-x0).^2/(2*sigmaX^2)+(Y-y0).^2/(2*sigmaY^2)));
surf(X, Y, Z);

%Make some noise
[xRows, xColumns] = size(X);
[yRows, yColumns] = size(Y);

figure(2)
X =  -.1 + (.1+.1)*rand(61,61);
Y =  -.1 + (.1+.1)*rand(61,61);
Z = amp*exp(-((X-x0).^2/(2*sigmaX^2)+(Y-y0).^2/(2*sigmaY^2)));
surf(X, Y, Z)

但我觉得高斯函数基本上失去了它典型的钟形,看起来更像是一个斜坡场。我将尝试改进它,但我喜欢任何输入。

im9ewurl

im9ewurl1#

Matlab已经可以生成2D噪声矩阵。把它加到高斯分布上,就这样。

amp=1;
x0=0;
y0=0;
sigmaX=1;
sigmaY=1;
noiseAmp=.1;
x=[-10:.1:10];
y=[-10:.1:10];

%Create one noise matrix
Noise=noiseAmp.*rand(length(y),length(x));

[X,Y]=meshgrid(x,y);
% Add the Noise to the result of Z
Z=amp*exp(-((X-x0).^2/(2*sigmaX^2)+(Y-y0).^2/(2*sigmaY^2)))+Noise;
surf(X,Y,Z);

这里的其他脚本重复相同的随机噪声线结构,由正交方向上的噪声线加权。如果绘制它,特别是在一个较大的数组上,您将看到一个模式。这根本不是白色噪音。

jexiocij

jexiocij2#

如果你只是想要一个2D图,你可以试试这个

amp=1;
  noiseAmp=0.01;
  x0=0;
  y0=0;
  sigmaX=1;
  sigmaY=1;
  x=[-5:.01:5];
  noiseY=noiseAmp*rand(1,length(x));
  y=noiseY+amp*exp(-((x-x0).^2/(2*sigmaX^2)));
  plot(x,y);

其中noiseAmp是噪声的振幅。
但是如果您仍然想使用surf()函数创建3D绘图,则必须向Z结果添加随机网格。

bweufnob

bweufnob3#

我也会这么做

amp=1;
x0=0;
y0=0;
sigmaX=1;
sigmaY=1;
noiseAmp=.1;
x=[-2:.1:2];
y=[-2:.1:2];

%Create two Noise Vectors
noisez1=noiseAmp.*rand(1,length(x));
noisez2=noiseAmp.*rand(1,length(x));
% Make an meshgrid out of the two Vectors
[noiseZ1,noiseZ2]=meshgrid(noisez1,noisez2);
% Add the Meshgrids togehter
Noise=noiseZ1+noiseZ2;

[X,Y]=meshgrid(x,y);
% Add the Noise to the result of Z
Z=amp*exp(-((X-x0).^2/(2*sigmaX^2)+(Y-y0).^2/(2*sigmaY^2)))+Noise;
surf(X,Y,Z);

相关问题