Метод скользящего среднего - это КИХ фильтр. На малых порядках имеет отвратительную АЧХ. Большие порядки приводят к существенной временной задержке сигнала, или как говорит ТС "сдвигаются вправо". Эту задержку конечно можно скомпенсировать сдвинув после фильтрации картинку влево на число отсчётов, равное порядку фильтра.
Но более грамотно - использовать антикаузальные фильтры - ведь для этой задачи фильтрация в реальном времени не стоит.
Делается просто - берется вектор данных - фильтруется (любым фильтром) - выходной вектор реверсируется во времени (первая выборка становится последней и т.д.)- снова фильтруется тем же фильтром- и выходной вектор снова реверсируется. Таким образом временной сдвиг, создаваемый фильтром компенсируется, а АЧХ возводится в квадрат. Сплошные преимущества, короче.
Но определённые требования к фильтру всё же есть. Он должен иметь коэффициент передачи в полосе пропускания - как можно ближе к 1. (иначе 0.9*0.9=0.81 - АЧХ фильтра в полосе пропускания из-за возведения в квадрат может здорово испортится.
Наиболее подходящими фильтрами для антикаузальной фильтрации является фильтр Баттерворта и фильтр Чебышева 2-го рода.
Естественно, можно фильтровать и с помощью преобразования Фурье (это тоже антикаузальный фильтр получится).
Главное для данной задачи - правильно определить частоту среза ФНЧ , иначе ступеньки сигнала, соответствующие заправкам - будут сглаживаться.
Ну а далее надо продифференцировать отфильтрованные данные по времени.