2016-10-11 9 views
1

Мне нужно вычислить взвешенные скользящие средние лучи и с сохранением информации. Вес может быть линейным, так что старый образец взвешен меньше, чем новый.Как эффективно вычислить средневзвешенную скользящую среднюю

Например, с помощью окна на 20 образцов, мой вес вектор будет:

[1 2 3 4 5 ... 20] 

Я использую следующую формулу для вычисления перемещения среднее:

newMean = currMean + (newSample - currMean)/WindowSize 

теперь мне нужно «впрыскивать» вес.

Что я могу знать: 1. Какой образец я рассматриваю (14-й .... 26-й ....), я могу рассчитывать. 2. Конечно, я могу знать currMean

Что я могу знать, но я не хочу делать: 1. хранить все образцы (в моем случае они 1200 х 1980 х 3 матрица, я просто могу хранить их).

В настоящее время я использую Matlab, но мне действительно не нужен код, просто концепция, если она существует.

Спасибо.

+1

Я бы просто использовал свертку и построил ваш фильтр таким образом, чтобы все весовые суммы равнялись 1. ie '(1:20) ./ sum (1:20)' – Suever

+0

Ммм. Я использую очень большие матрицы, Думаю, свертка будет для меня хорошей. Я имею в виду ... Я просто использую 3 простых математических упражнения прямо сейчас, почему я должен вводить свертку только для весов? – Leo91

+2

Свертка делает * точно * то, что вы пытаетесь сделать, и делает это очень эффективно – Suever

ответ

0

Изучите методы цифровой обработки сигналов. Вы описываете FIR-фильтр, который может быть реализован как свертка или как эффективная схема памяти. В основном вы можете переписать его как рекурсивное уравнение, которое сохраняет только прошедшие фильтрацию промежуточные переменные состояния. MATLAB делает это в функции filter (вы можете связать внутреннее состояние, чтобы продолжить фильтрацию). См. Документацию filter, а также рекомендуем прочитать учебник DSP.