Как добавить x% шума в сигнал в MATLAB?

Я пытаюсь добавить 5% шума к измеренному сигналу следующим образом (в MATLAB), но когда я вычисляю процент шума после добавления, он превышает +/- 5%. Не могли бы вы сказать мне, почему это так? Разве это не должно быть в пределах +/- 5%?

 noiseSigma = 0.05 * signal;                % signal is my original signal

сигнал

noise = noiseSigma .* randn(1, length(signal));

noisySignal = signal + noise;

Шум в сигнале

percent_noise = 100*(noisySignal-signal)./signal;

процент шума в сигнале


person parag    schedule 07.01.2021    source источник


Ответы (1)


randn берется из нормального распределения, поэтому может быть больше 1.

Если вы хотите ограничить шум до 5 процентов, вы можете попробовать следующее:

noise_limit = 0.05 * signal;
addative_noise = noise_limit .* (2*rand(1, length(signal))-1);
result = signal+addative_noise;

Это работает, потому что rand выбирает значения от нуля до единицы. умножьте его на два и вычтите один, и он выберет значения от -1 до 1.

person joostblack    schedule 07.01.2021
comment
Спасибо. Но 'rand' будет рисовать числа в пределах Noise_limit с равномерным, а не случайным распределением. Будет ли уместно добавить шум с равномерным распределением? - person parag; 08.01.2021
comment
@parag Это зависит от приложения. Если вы хотите, чтобы ваш шум оставался в пределах 5-процентной полосы вокруг сигнала, вы можете использовать равномерное распределение. Вы также можете добавить шум, взятый из нормального распределения, но это не ограничивается полосой. В Википедии есть список всех (многих) распределений на ограниченных интервалах: en.wikipedia.org/wiki/List_of_probability_distributions< /а> - person joostblack; 08.01.2021