Цитата(Ivan Kuznetzov @ Jan 20 2011, 21:07)

1)Подскажите фильтр (алгоритм на Си) чтобы сгладить(усреднить) значения в массиве?
Можно сделать доморощенное грубое подобие фильтра Калмана. Его достоинство - в простоте реализации: не нужно запоминать массив данных, фильтр Калмана фильтрует данные "на лету", по мере их поступления.
Пусть Vin - результат на выходе АЦП, а Vout - отфильтрованный текущий результат, n - некое число, при помощи которого оценивается "достоверность" текущего результата. Вычисление ведется по простой формуле:
Vout = Vout - (Vout/n) + (Vin/n), где n по ходу фильтрации увеличивается от 1 до некоторого разумного (т.е. не очень большого) значения, определяемого ожидаемыми свойствами сигнала.
Пример:
1. Самое первое измерение принимаем как данность, поскольку сравнивать и усреднять не с чем, n=1:
Vout = Vin
2. У второго измерения "достоверность" такая же, какая была у первого, так что принимаем n=2:
Vout = Vout - (Vout/2) + (Vin/2)
3. Для третьего измерения принимаем n=3:
Vout = Vout - (Vout/3) + (Vin/3)
...
16. Ограничимся, например, n=16, иначе все вообще усреднится нафиг. Это и все последующие измерения считаем так:
Vout = Vout - (Vout/16) + (Vin/16)
Если говорить упрощенно, то у настоящего фильтра Калмана n меняется динамически в зависимости от сигнала. Когда сигнал меняется быстро, вес новых измерений увеличивается (т.е. n уменьшается), когда же изменения сигнала невелики, то вес каждого нового измерения уменьшается (n увеличивается).