1

たとえば、 ifAx = 0.0023にノイズを追加してnewAx = 0.0027 If Hy = 94.54,thenを生成する必要がありnewHy = 93.42ます。最初に、次の方法で MATLAB で rand を使い始めました。

newAx = Ax + rand
newAx = 0.9453

これは、私が持っているパラメーターとはかけ離れていますAx(0.0023)

範囲を使用する必要がある場合、この場合、Ax の最小値と最大値を使用する必要があります。それはまた、価値観からかけ離れているなどの問題をもたらします。私は、Axがあらゆる瞬間に徐々に増加するパラメータであるシステムを持っているので. ここで、Ax の値に応じて、あらゆる瞬間にランダム ノイズを生成して、Ax にほぼ近い newAx を取得する必要があります。Ax = 0.0023生成する場合newAx = 0.0027としない場合の例newAx = 0.4590

データ自体に依存するランダム ノイズを作成する必要があります。

4

3 に答える 3

3

これを行う1つの方法は、RANDNを使用して正規分布のノイズ値を生成し、ノイズの標準偏差をデータ値のパーセンテージにスケーリングすることです。

noiseScale = 0.05;  %# Noise with a standard deviation of %5 of the data
newAx = Ax + noiseScale*Ax*randn;

また、がノイズを追加する値のベクトルAxである場合は、次のように実行できます。

newAx = Ax + noiseScale.*Ax.*randn(size(Ax));

newAx特定の値の範囲内にとどまるようにしたい場合は、次のように関数MAXおよびMINを使用できます。

newAx = min(newAx,maxValue);  %# Clip newAx to a maximum of maxValue
newAx = max(newAx,minValue);  %# Clip newAx to a minimum of minValue
于 2010-12-04T17:00:40.223 に答える
2
newDatum = oldDatum+2*(rand(1)-0.5)*oldDatum
于 2010-12-04T08:15:32.207 に答える
1

どのような「ノイズ」をシミュレートしようとしていますか?

rand(1) は、0 < r < 1 の範囲の一様乱数を返します。「一様」とは、1 つの完全なサイコロを振るように、各値の可能性が等しいことを意味します。

つまり、ランダム値の範囲は 0.5 を中心に +/- 0.5 です。実際の値を中心にして、実際の値に応じて範囲を調整したい場合があります。例えば

 2 * (rand(1) - 0.5) 

-1 < r < 1 の範囲の一様乱数を返します。


たとえば、ノイズが 1% を超えてはならない場合は、次を使用する必要があります。

newValue = oldValue * ( 1 +  2*(rand(1) - 0.5) * 0.01)

0.01 は例で使用したスケール (1%) で、1 + ... は元の値を中心にしています。


多くのプロセスは、均一な分布を持っていません。ランダム ノイズ (センサー ノイズなど) の一般的な分布は正規分布であり、中心に近い値は中心から遠い値よりも可能性が高くなります。

Matlab は、正規分布の randn() をサポートしています。

他のシステムをモデル化する他の分布は、一様乱数から導出できます。

于 2010-12-04T17:32:26.720 に答える