Вычисление среднего значения простого одномерного данных данных кажется достаточно простым. Действительно, документация MATLAB для FILTER радостно утверждает, что-то вроде:вычисляющие средние средние значения в MATLAB
Вы можете использовать фильтр, чтобы найти скользящее среднее без используя для цикла. Этот пример находит скользящего среднего вектора 16-элемента, используя размер окна 3:
D = [1:0.2:4]';
windowSize = 3;
F = ones(1,windowSize)/windowSize;
Df = filter(F,1,D);
Результат:
Для моих целей, существуют два раздражающую вещи об этом результате: выходная точка n - это среднее значение входных точек n- (windowSize-1) .. n (т.е. не центрированное, как видно из горизонтального сдвига) и указывает слева от доступных данных, обрабатываются как нули.
FILTFILT касается обеих проблем, но имеет и другие недостатки. Это часть инструмента обработки сигналов, и это не очень хорошо работает с NaN (что я хотел бы исключить из среднего значения).
Somepeople на FEX явно были те же разочарования, но мне кажется странным, что что-то такое простое требует пользовательского кода. Что-нибудь мне здесь не хватает?
'filterfilt' не зависит от других функций Signal Processing Toolbox и является m-кодом. Поэтому вы можете просто скопировать его в свой код, изменив его для своих нужд. – Mikhail
Не знаете об авторских правах, если вы не являетесь владельцем панели инструментов SP. Моя кишка говорит мне, что это было бы незаконно. – Jonas