2

语境

我有一个由一系列列向量组成的矩阵。每个列向量包含一系列以度数定义的角度,范围在 -180 到 180 之间。我希望将高斯白噪声添加到序列中的每个角度,以测试系统对噪声的鲁棒性。

鉴于某些角度变化不大,而其他角度在序列中变化很大,我希望添加与活动/变化量成正比的噪声。因此,我选择从均值为零的高斯采样,其幅度相对于各个角度的标准偏差(作为比率)定义。

我的 Matlab 代码如下:

function Y2 = addnoise2angles(Y1, ratio)

%# Random numbers sampled from Gaussian
N = randn(size(Y1));

%# Noise level is defined per angle as a ratio of their respective standard deviations
sigma = std(Y1, 0, 2);
N = N.*repmat(sigma, 1, size(N, 2));
N = N*ratio;

%# Apply noise to angles
Y2 = Y1+N;
Y2 = wrapTo180(Y2);

end

问题

这是测试噪声鲁棒性的正确方法吗?

如果是这样,什么范围的比率对测试是明智的?

如果不是,那么它有什么问题,正确的方法是什么?

4

1 回答 1

1

如果我理解正确,每一行都是相同角度的测量值,每一列是所有角度的单个测量值。您想要做的是为整个测量集添加一些噪声,以便检查对某些后续过程的影响。你应该如何添加噪音完全取决于你想回答什么样的问题。如果您认为每列看起来像是对所有角度的测量,那么您独立估计每个角度测量中的噪声,然后添加额外的白噪声的想法,将允许您说出每个角度噪声如何影响后续过程。从这个意义上说,我认为您的测量有效。

我要指出的一件事是,测量围绕圆的角度的标准偏差与在实线上测量样本不同。例如,如果您的测量值为 180 + randn(0.1),即正好在 +180 和 -180 之间的边界处,那么您对标准偏差的测量将远大于 0.1 度,因为大多数样本都非常接近 +180 或 -180。解决此问题的一种非常简单的方法是使用不同的包裹点估计标准偏差两次,然后取最小值。例如

sigma1 = std(Y1, 0, 2);
sigma2 = std(wrapTo180(Y1+90),0,2);
sigma = min(sigma1,sigma2);

存在更复杂的环周围方差估计,例如查看样本内所有估计对之间的中值角度差。您的应用程序可能不需要这种额外的复杂性。

于 2011-06-10T19:37:45.683 回答