将噪声添加到总和为0的向量

问题描述 投票:0回答:2

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

matlab random
2个回答
2
投票

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

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

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
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.