向矢量添加噪声,总和为0

时间:2018-09-18 00:33:54

标签: matlab random

我有一个a=[1000 1000 1000 1000 1000];定义的向量。我被要求在区间[-9,9]中添加均匀噪声,但是仍然将所有元素的总和保存为5000。我该怎么做?提前致谢。

2 个答案:

答案 0 :(得分:2)

您可以使用rand添加均匀的随机噪声。来自Matlab documentation

  

通常,您可以使用公式r = a +(b-a)在区间(a,b)中生成N个随机数。* rand(N,1)。

vec = [1000 1000 ... 1000];
noise = -9 + 18 * rand(size(vec));

然后您需要将噪声集中在0左右:

noise = noise - mean(noise);

最后,将其添加到初始向量:

vec = vec + noise;

例如:

>> vec = [1000 1000 1000 1000 1000];
>> noise = -8 + 18 * rand(size(vec));       
>> vec_noise = vec + noise - mean(noise)

vec_noise =

   1.0e+03 *

    1.0002    0.9968    1.0021    0.9988    1.0020

>> sum(vec_noise)

ans =

        5000

答案 1 :(得分:1)

我知道这不是一种优雅的方法,但是您可以为循环中的每个矢量元素绘制噪声,检查先前噪声的总和以及剩余噪声的可能的最大值和最小值。如果您当前的噪声+先前噪声的总和将超出可能的剩余范围,请再次绘制(在新范围内)。必须设置最后一个元素的噪声,以使噪声总和等于零。