- Чего-то не соображаю сегодня. Хочу к целочисленным данным применить
экспоненциальный фильтр вида Yn=a*X+(1-a)*Yn-1 Естественно, при умножении будет неточное значение. Как посчитать
ошибку к накоплению? Dingo(224 знаков, MCU, полностью, 27.08.2020 13:32)
- Дык, эта. Мониторить значения сигнала до фильтра, и если они больше
выхода фильтра, то и учесть. Не? - Бapбoc(29.08.2020 22:46)
- Нет там никакой ошибки накопления IBAH(121 знаков, 28.08.2020 15:25)
- Это не ошибка. Это порог. Причем он при определенной ситуации может
стать ловушкой, когда слишком малое входное значение не сможет
уменьшить текущее значение фильтра. Решается фикспойнтом для
значения фильтра. То есть нужно добавить справа к значению фильтра
нужное число дробных разрядов и каждое новое входное значение левым
сдвигом делать фикспойнтом. При выводе значения фильтра наружу
восстанавливать целочисленную разрядность правым сдвигом. - my504(27.08.2020 23:12)
- Если a больше, чем 0.5 (а именно так и должно быть), то ошибка не только
не накапливается, но и рассасывается со временем. Kceния(406 знаков, 27.08.2020 22:48)
- Если принять, что а = 2^-n и отнормировать к формату результата, то
и умножение сдвигами делается и ошибки не будет. к примеру, выход
16 бит, вход 10: а = 2^-6. Даже на ПИК проце отлично работало. - Visitor(27.08.2020 18:37)
- Ну вот пример для беззнаковых интов: Visitor(35 знаков, 28.08.2020 14:23)
- Вот это "Даже на ПИК" звучит оскорбительно. Тем более, что честные
пиководы в этой формуле обходятся одним умножением. - Kpoк(27.08.2020 22:16)
- Ах целочисленными. Так что мешает a представить как N/(2^k). Например 0.1 = 410/4096 = 410
>> 12. Тогда получается y[n] = (410*x + 3686*y[n-1])
>> 12. - fk0(27.08.2020 20:30)
- "Изобретение" фикспойнта? ))) - my504(28.08.2020 06:21)
- Слишком громко сказано. Никогда "фикспоинтом" это не называл и
никакого отношения к одноимённым библиотекам оно не имеет. Понятно,
что в целых числах нельзя работать с числами от нуля до единицы, но
что мешает всё выражение домножить на некоторую величину -- идея в
этом. Не обязательно 24Q8 или что-то ещё, величина может быть
любая, на которую удобно делить и которая с одной стороны ещё не
наткнётся на переполнение сверху, и с другой позволит приемлимую
погрешность вычислений fk0(253 знаков, 28.08.2020 11:24)
- Раз уж ещё раз упомянули - может кините ссылок или материалов на
толковый въезд по теме? А то зачастую "вот библиотека для 24Q8,
пользуйтесь. А я, может хочу 12Q4 и понимать, как оно работает до
битика. Как-то попадалось у TI, но тогда не особо надо было, а
сейчас найти не могу. Пустыня долго хранит, а теперь General ещё и
теги прикрутил! - Dingo(28.08.2020 09:32)
- +100500 - LordN(27.08.2020 19:19)
- Оно же сходится к X при n -> бесконечности. При больших a ~= 1
-- быстро. - fk0(27.08.2020 13:44)
- Процитирую самого себя: "Зачем вообще использовать "экспоненциальное скользящее среднее", кроме как от бедности (не хватает ресурсов CPU)? Я картинку уже давал, повторяю. Если с простым, нормальным, обычным, скользящим средним в графике есть нули, fk0(406 знаков, 01.11.2019 12:14, ссылка, картинка)