Как построить средние значения шума в Gnuplot
Можно ли отфильтровать шум в Gnuplot и получить график со средними значениями разных наборов? Сюжет можно увидеть ниже.
1 ответ
Для сглаживания кривых с шумом у вас есть по крайней мере две стратегии: одна - использовать сглаживающее ядро, например, гауссовские функции, которые дают вам локальные средние. Другой способ - рассчитать общие средние значения или функции интерполяции, если вы знаете функциональную форму ваших данных. И то, и другое можно сделать с помощью gnuplot.
Поскольку вы не предоставляете свои файлы данных, я создал следующий файл, заполненный 1000 случайными значениями, полученными из $RANDOM
переменная bash:
for i in `seq 1 1 1000`; do echo $RANDOM >> data; done
Это должно генерировать случайные данные в диапазоне 0 - 32767, то есть среднее значение должно составлять 16383,5 для достаточно репрезентативной выборки данных. Давайте построим это, чтобы увидеть, как выглядят необработанные данные:
plot "data" t "data", 16383.5 t "theoretical average"
Первая стратегия заключается в использовании гауссова ядра для сглаживания данных (smooth kdensity
):
plot "data" smooth kdensity t "data", 16383.5 t "theoretical average"
Как видите, этот метод дает хорошее сглаживание в середине, но также учитывает отсутствие точек данных по краям.
Чтобы этого не случилось, я могу увеличить "локальность" сглаживания, предоставив пропускную способность для третьего столбца (в данном случае равную 10):
plot "data" u 0:1:(10) smooth kdensity t "data", 16383.5 t "theoretical average"
Усреднение подгонки требует fit
:
fit a "data" via a
plot "data" t "data", a t "calculated average"