Реализация цифрового фильтра скользящей средней

Мне нужно реализовать цифровой фильтр скользящего среднего для постобработки некоторых записанных осциллографических сигналов в Scilab. Я подготовил скрипт с приведенным ниже кодом (рекурсивная реализация с окном усреднения, содержащим 256 образцов)

// number of samples
N = 350000;
// vector of voltage samples
voltage = M(1:N, 2)';

// filtered values
filt_voltage = zeros(1:N);
// window length
L = 256;
// sum of the samples in the averaging window
sum = 0

for i = 1:N_01
    // averaging window full?
    if i > L
        // remove the oldest sample in the averaging window
        sum = sum - voltage(i - L);
    end
    // add the newest sample into the averaging window
    sum = sum + voltage(i);
    // average of the samples in the averaging window
    filt_voltage(i) = sum/L; 
end

Вывод сценария следующий (синяя форма волны - записанные данные, красная форма волны - отфильтрованные данные)

Проблема в том, что я не уверен, правильна ли моя реализация скользящего среднего (я нашел много реализаций, в основном основанных на свертке). Вывод кажется каким-то образом отфильтрованным, но для меня было бы полезно, если бы кто-нибудь мог подтвердить мне, что это правильно. Заранее спасибо.

1 ответ

Решение

В вашей реализации нет ничего плохого. Фактически, это обычная реализация рекурсивной формулировки, приведенной на https://stats.stackexchange.com/a/24739 и в википедии:

Другие вопросы по тегам