Добавление белого гауссовского шума - PullRequest
2 голосов
/ 10 июня 2011

Context

У меня есть матрица, состоящая из последовательности векторов столбцов. Каждый вектор столбца содержит серию углов, определенных в градусах в диапазоне от -180 до 180. Я хочу добавить белый гауссов шум к каждому углу в последовательности, чтобы проверить систему на предмет ее устойчивости к шуму.

Учитывая, что некоторые углы не сильно меняются, а другие значительно меняются в последовательности, я хочу добавить шум на уровне, который пропорционален величине активности / изменения. Поэтому я выбрал выборку по гауссову с нулевым средним значением с амплитудой, определенной относительно стандартного отклонения отдельных углов (как отношение).

Мой код Matlab для этого приведен ниже:

function Y2 = addnoise2angles(Y1, ratio)

%# Random numbers sampled from Gaussian
N = randn(size(Y1));

%# Noise level is defined per angle as a ratio of their respective standard deviations
sigma = std(Y1, 0, 2);
N = N.*repmat(sigma, 1, size(N, 2));
N = N*ratio;

%# Apply noise to angles
Y2 = Y1+N;
Y2 = wrapTo180(Y2);

end

Вопросы

Это правильный подход для проверки устойчивости к шуму?

Если да, то какой диапазон соотношений будет целесообразным для тестирования?

Если нет, то что в этом плохого и каков правильный подход?

1 Ответ

1 голос
/ 10 июня 2011

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

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

sigma1 = std(Y1, 0, 2);
sigma2 = std(wrapTo180(Y1+90),0,2);
sigma = min(sigma1,sigma2);

Существуют более сложные оценки дисперсии вокруг кольца, например, если посмотреть на среднюю угловую разницу между всеми оценочными парами в выборке. Эта дополнительная сложность может не понадобиться для вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...