Вы можете заменить эти значения небольшим значением, но с возможностью регистрации (скажем, на 40 дБ ниже):
minb = x-2*std_x;
mask = (minb <= 0);
minb(mask) = x/1e4;
... use 10*log10(minb) instead
Или просто порог до некоторого минимума:
K = min(x) / 1e4; % so that K is 40 db below the smallest x
... use 10*log10(max(K, x-2*std_x)) instead.
или аналогичные вещи.
РЕДАКТИРОВАТЬ , чтобы суммировать комментарии и дальнейшие мысли:
Вероятно, стоит подумать о , почему у есть полосы ошибок. Обычно столбцы ошибок имеют тенденцию указывать некоторую меру достоверности / вероятности (например, x% времени, значение находится между указанными границами). В этом случае, когда некоторый логарифм взят из количества, вероятно, что количество взято из неотрицательного распределения. В этом случае, вероятно, более правильно использовать границы, которые не означают +/- K * std_deviation, чтобы указать границы.
Предполагая унимодальное распределение с cdf F (x), "правильные" границы (т.е. наименьшие для данной вероятности), вероятно, будут такими, что
F '(x1) = F' (x2), F (x2) - F (x1) = требуемая вероятность и x1 <= mode <= x2. </p>
Это среднее +/- K std_deviation для симметричного распределения, но, как уже упоминалось, строго положительное распределение, вероятно, требует другого подхода.