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

私が正しく理解していれば、各行は同じ角度の測定値であり、各列はすべての角度の単一の測定値です。実行したいのは、一連の測定値全体にノイズを追加して、後続のプロセスへの影響を確認することです。ノイズをどのように追加するかは、答えたい質問の種類に完全に依存します。各列がすべての角度の測定値のように見えると思われる場合は、各角度測定のノイズを個別に推定し、ホワイトノイズを追加するというアイデアにより、角度ごとのノイズがどのように影響するかについて何かを言うことができます。後続のプロセス。この意味で、あなたの測定はうまくいくと思います。

私が指摘することの1つは、円周の角度の標準偏差を測定することは、実数直線上でサンプルを測定することと同じではないということです。たとえば、測定値が180 + randn(0.1)の場合、つまり+180と-180の境界にある場合、標準偏差の測定値は.1度よりもはるかに大きくなります。ほとんどのサンプルは+180または-180に非常に近いです。これを解決する非常に簡単な方法の1つは、異なるラッピングポイントを使用して標準偏差を2回推定し、最小推定値を取得することです。例えば

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

リングの周りの分散のより複雑な推定値が存在します。たとえば、サンプル内のすべての推定値ペア間の角度差の中央値を調べます。この追加の複雑さは、アプリケーションには必要ない場合があります。

于 2011-06-10T19:37:45.683 に答える