2016-08-29 8 views
0

В функции matlab awgn(), которая используется для добавления шума в сигнал, существует ли способ указать дисперсию?Как генерировать шум с использованием определенной дисперсии

В общем, я бы просто сделал noisevec = sqrt(2)*randn(length(X),1); создает шум вектор дисперсии 2. Тогда шумных наблюдения

Y = X+noisevec 

Но я хотел бы применить (АБГШ), а затем проверить, если дисперсия шум действительно определяется пользователем. Как это сделать?

  % add noise to produce 
     % an SNR of 10dB, use: 
     X = sin(0:pi/8:6*pi); 
     Y = awgn(X,10,'measured'); 

ОБНОВЛЕНИЕ: На основе решения, вывод должен быть таким же, при генерации шума с использованием специфической дисперсией АБГША(), приведенным в ответе/растворе при условии, и при использовании без AWGN(). Что-то не так в моем понимании? Вот как я проверил.

x = rand(1,10); $generating source input 
snr =10; 
variance = 0.1; 
%This procedure is based on the answer 
y1 = awgn(x, snr, 'measured'); 
y1 = x + (y1 - x) * sqrt(variance/var(y1 - x)); 

%This is the traditional way, without using awgn() 

y2 = x+sqrt(variance)*randn(1,10); 

y1 не равно y2. Интересно, почему?

+1

Непонятно, что вы спрашиваете. Вы пытаетесь проверить, что дисперсия awgn() - это то, что она говорит? –

+0

@OliverCharlesworth: Я хочу знать, можем ли мы использовать awgn() для генерации шумового сигнала с определенной дисперсией шума. – SKM

+0

Будет ли 'var (Y-X)' работать? Я думаю, что это даст вам отклонение от того, что применяется 'awgn()'. – chessofnerd

ответ

2

awgn не создает шум с определенной дисперсией. Но если у вас есть, чтобы генерировать шум с определенной дисперсией, вы можете рассмотреть вопрос об определении собственного генератора шума, который может быть просто масштабирование шума вверх или вниз до желаемого уровня:

function y = AddMyNoise(x, variance) 
    y = awgn(x, 10, 'measured'); 
    y = x + (y - x) * sqrt(variance/var(y - x)); 
end 

UPDATE: Обратите внимание, что этот метод заставляя выход иметь конкретную дисперсию может быть опасным: Это даст странные выходы, если х имеет несколько элементов. В пределе, когда x является скаляром, этот подход добавит фиксированное значение + -sqrt (дисперсия) к x. Никакого белого шума больше нет. Но если у вас больше нескольких точек данных, вы получите достаточно белый шум.

+0

Это довольно странная функция - здесь нет цели. Почему бы просто не использовать масштабированную версию randn? –

+0

Вы правы насчет 'snr', @OliverCharlesworth. Я отредактировал свой ответ соответственно. Но существует большая разница между выходом 'randn' и тем, что известно как _noise._ В обработке сигналов белый шум представляет собой случайный сигнал с постоянной спектральной плотностью мощности. Это означает * спектр шума. * Взгляните на [определение белого шума.] (Https://en.wikipedia.org/wiki/White_noise) – erfan

+0

После последнего редактирования я думаю, что этот ответ имеет смысл , –

 Смежные вопросы

  • Нет связанных вопросов^_^