上下文
我有一个包含一系列列向量的矩阵。每个列向量包含一系列以-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
问题
这是测试噪声稳健性的正确方法吗?
如果是这样,测试的比率范围是多少?
如果没有,它有什么问题,什么是正确的方法?
答案 0 :(得分:1)
如果我理解正确,每行都是相同角度的测量,每列是所有角度的单一测量。您想要做的是在整个测量集中添加一些噪声,以便检查对某些后续过程的影响。 如果您认为每列看起来像是对所有角度的测量,那么您想要独立估算每个角度测量中的噪声,然后添加额外的白噪声,就可以让您说出每角度噪声如何影响后续过程。从这个意义上讲,我认为你的测量工作正常。
我要指出的一点是,测量圆周围角度的标准偏差与测量实线上的样本不同。例如,如果您的测量值为180 + randn(0.1),即恰好位于+180和-180之间的边界处,那么您对std偏差的测量将远大于.1度,因为大多数样本非常接近+180或-180。解决此问题的一种非常简单的方法是使用不同的包裹点估计标准偏差两次,并采用最小估计值。例如。
sigma1 = std(Y1, 0, 2);
sigma2 = std(wrapTo180(Y1+90),0,2);
sigma = min(sigma1,sigma2);
存在围绕环的方差的更复杂的估计,例如,查看样本内所有估计对之间的中值角度差异。您的应用程序可能不需要这种额外的复杂性。