1

例如 if Ax = 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

一种方法是使用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保持在特定的值范围内,可以使用函数MAXMIN,如下所示:

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 范围内的统一随机数。“统一”表示每个值的可能性相同,就像掷一个完美的骰子一样。

换句话说,随机值的范围为 +/- 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 回答