我试图在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)
但我觉得高斯函数基本上失去了它典型的钟形,看起来更像是一个斜坡场。我将尝试改进它,但我喜欢任何输入。
3条答案
按热度按时间im9ewurl1#
Matlab已经可以生成2D噪声矩阵。把它加到高斯分布上,就这样。
这里的其他脚本重复相同的随机噪声线结构,由正交方向上的噪声线加权。如果绘制它,特别是在一个较大的数组上,您将看到一个模式。这根本不是白色噪音。
jexiocij2#
如果你只是想要一个2D图,你可以试试这个
其中noiseAmp是噪声的振幅。
但是如果您仍然想使用surf()函数创建3D绘图,则必须向Z结果添加随机网格。
bweufnob3#
我也会这么做