Добавьте шум к вектору, который суммирует до 0 - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть вектор, который определяется как a=[1000 1000 1000 1000 1000];. Меня просят добавить равномерный шум в интервале [-9,9], но все равно сохраняют сумму всех элементов на 5000. Как я могу это сделать? Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Я знаю, что это не элегантный способ, но вы можете нарисовать шум для каждого векторного элемента в цикле, проверить сумму предыдущего шума и возможные максимальные и минимальные значения оставшихся шумов. Если ваш текущий шум + сумма предыдущего шума превысит возможный оставшийся диапазон, проведите еще раз (в новом диапазоне). Шум последнего элемента должен быть установлен так, чтобы сумма шума равнялась нулю.

0 голосов
/ 18 сентября 2018

Вы можете добавить равномерный случайный шум с помощью rand. Из документации Matlab :

В общем случае вы можете сгенерировать N случайных чисел в интервале (a, b) по формуле r = a + (b-a). * 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...