Стандартное отклонение дискретного фильтра Гаусса - PullRequest
0 голосов
/ 10 февраля 2020

Я создал фильтр Гаусса в MATLAB, как показано ниже:

 f = fspecial('gaussian', [1, 3], 2);    

Это создало фильтр 1 на 3 с распределением Гаусса. Однако, когда я делаю std(f), я получаю другое значение, а не 2.

Почему я не получаю значение 2 для стандартного отклонения?

1 Ответ

2 голосов
/ 10 февраля 2020

Ваш f является выборкой нормального распределения. Его значения обычно не распределяются. Его пространственный центральный момент 2-го порядка должен быть 4 (квадрат сигма-значения), но стандартное отклонение выборок не будет. (Сравните выборку самого распределения с выборкой случайных значений с заданным распределением, последнее будет иметь std(f), близкое к стандартному отклонению распределения).

Центральный момент 2-го порядка может быть вычислен следующим образом:

x = 1:numel(f);
m1 = sum(x.*f)/sum(f);         % 1st order moment
m2 = sum((x-m1).^2.*f)/sum(f); % 2nd order central moment

Тем не менее, если вы построите свою выборку f, вы увидите, что она совсем не похожа на гауссовскую! Это связано с тем, что он отрезан, все три точки, из которых вы взяли образцы, сгруппированы близко к пику, и в хвосте нет образцов. Вам нужно попробовать больший регион. Я всегда рекомендую делать выборки по 3 * сигма с каждой стороны:

sigma = 2;
sz = ceil(3*sigma) * 2 + 1;
f = fspecial('gaussian', [1, sz], sigma)

См. мой пост в блоге по сэмплированию ядра Гаусса .

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