Цитата(MSP430F @ Jun 17 2014, 17:59)

Всем доброго времени суток!
Уважаемые коллеги, срочно нужна ваша помощь.
Вот такая задача.
Разрабатывается датчик виброперемещения. Пьезокерамика выдает напряжение, пропорциональное виброускорению. Затем стоит аналоговый интегратор, получаем на выходе виброскорость. Затем будем ставить сигма-дельта АЦП и контроллер с ЦАП, на которых будет реализован цифровой интегратор. С выхода ЦАП есть желание снимать уровень виброперемещения онлайн. Диапазон частот устройства 0,5-320 Гц. Частоту дискретизации сделаем 820 Гц.
С ходу задача кажется не сложной - надо просто оцифрованные значения на каждом шаге умножать на некий коэффициент и прибавлять к переменной - аккумулятору, а с него уже подавать на ЦАП. Но как избежать возможного насыщения цифрового интегратора ? Надо ли обязательно использовать float для вычислений или достаточно будет int (32 бит) ?
Буду признателен за любые подсказки.
Если серьезно, то для Ваших параметров можно примерно оценить динамику на выходе простейшего интегратора: для 0.5 Hz усиление будет ~32 dB. Для 320 - ~4.1 dB. считал по формуле 10*log10(abs(1/(1-exp(-j*f/F_sam)))) . Т.е. на минимальной частоте стоит добавить 11 разрядов к динамике входного сигнала.
Цитата(MSP430F @ Jun 17 2014, 21:07)

Я так понимаю, что формула y_k = 0.9*y_k-1 + 0.1 * x_k как раз и обеспечивает постепенный разряд виртуальной емкости цифрового интегратора ?
угу. соответствует простейшей RC цепочке
Цитата
Кажется, здесь уже не важно, чтобы сумма коэффициентов была равно ровно 1 - это же не скользящее среднее ?
Например y_k = 0.999*y_k-1 + K * x_k, где K - некий коэффициент.
K будет определять коэффиент передачи фильтра на нулевой частоте (просто некоторое усиление). При k=0.001 оно будет рано 1.
Сообщение отредактировал andyp - Jun 17 2014, 17:58