-
- Кстати 256 притянуто за уши. Ничто не мешает приближённо делить (верней умножать на числа меньше единицы) на любое число. x/y == (k/y)*x/k, где k=256 или 65536... В современных микроконтроллерах аппаратное умножение чаще всё же есть. - fk0(09.09.2011 11:16)
- Это арифметика с фиксированной точкой(fixed point math)для случая, если скользящее среднее по 256 значениям (деление на 256) (частный члучай): ++(497 знак., 08.09.2011 08:53, ссылка)
- скользящее среднее LordN(45 знак., 08.09.2011 05:07 - 06:03, ссылка)
- Я как-то набрёл на это дело случайно (типа сам изобрёл). С тех пор повсеместно применяю для АЦП. А вот в цифровых фильтрах не бум-бум... SciFi(401 знак., 07.09.2011 23:59)
- это не "усреднение", а обычный БИХ фильтр. Считай, как простой ФНЧ в виде RC-цепочки koyodza(143 знак., 07.09.2011 23:11 - 23:25)
- y0=x+y1*k, где k=1-1/256. Можно и более сложные фильтры строить. Но при 8-битной разрядности сложно подобрать коэффициенты, чтоб не нарваться на переполнение. И практически на PIC-контроллерах (hitech C 9.51pl2 STD) плавающая точка может fk0(105 знак., 09.09.2011 11:02 - 11:10)
- "...Можно и более сложные фильтры строить..." А у финских студентов примерчиков не завалялось? - Т.Достоевский(09.09.2011 17:34)
- Что изображено на прилепленном графике? - =AlexD=(09.09.2011 11:21)
- Синим цветом фаза, очевидно. Красным амплитуда (шкала линейная). Чёрным -- за 1.0 принята частота дискретизации. Т.е. грубо можно считать, что такой фильтр "пропускает" до одной тысячной от частоты дискретизации. Но также видно, что практически fk0(73 знак., 09.09.2011 12:58 - 13:03)
- Дык...Задуплить многократно... Несыграные мизера IIR-ы по одному не ходят. ;О) - mse ща как залогинюсь!(09.09.2011 22:49, )
- Синим цветом фаза, очевидно. Красным амплитуда (шкала линейная). Чёрным -- за 1.0 принята частота дискретизации. Т.е. грубо можно считать, что такой фильтр "пропускает" до одной тысячной от частоты дискретизации. Но также видно, что практически fk0(73 знак., 09.09.2011 12:58 - 13:03)
- Тесть так? x += (newdata - x/256) - Т.Достоевский(07.09.2011 23:30)
- Нет. Прибавляется разница между предыдущим и текущим значением величины. x += (newdata - x) / (N + 1). Переменные x и newdata должны быть знаковыми. При N = 0 фильтр отключен. - rezident(07.09.2011 23:47)
- Чёта у меня так ничего и не заработало! Т.Достоевский(132 знак., 08.09.2011 00:02)
- Как-то так: SciFi(169 знак., 08.09.2011 00:11)
- Странный фильтр. Пока значение x не превысит 256 он ничего не фильтрует. Так и задумано? - rezident(08.09.2011 00:39)
- Я его не задумывал. Скорее открыл как явление Природы. Работает. Чего более? - SciFi(08.09.2011 00:43)
- Т.е. вопросы: как он работает, чего фильтрует, какова форма его АЧХ и т.п., вас вообще не волнуют? - rezident(08.09.2011 01:11)
- Нет, не волнуют. Спасибо за заботу :-) - SciFi(08.09.2011 11:20)
- Т.е. вопросы: как он работает, чего фильтрует, какова форма его АЧХ и т.п., вас вообще не волнуют? - rezident(08.09.2011 01:11)
- Я его не задумывал. Скорее открыл как явление Природы. Работает. Чего более? - SciFi(08.09.2011 00:43)
- Да, случайно поставил x ниже скобачки. Спсб. Работает. - Т.Достоевский(08.09.2011 00:20)
- Странный фильтр. Пока значение x не превысит 256 он ничего не фильтрует. Так и задумано? - rezident(08.09.2011 00:39)
- Потому, что у вас целочисленное деление. Если последующий отсчет АЦП меняется менее чем на 8 разрядов (2^8), то приращение величины после целочисленного деления на 256 (2^8) будет равно нулю! - rezident(08.09.2011 00:06)
- А как сделать знаковое??? - Т.Достоевский(08.09.2011 00:08)
- Вы целочисленное от знакового отличаете? :) Вам нужно плавучку (float) использовать. Или хотя бы с фиксированной точкой работать. Например, в формате 16.16, раз у вас входная величина не превышает 12 разрядов. - rezident(08.09.2011 00:10)
- Запутался, виноват. Это усреднитель. Специально поставил кортекс чтобы сделать получше. Понял что плаваю совершенно, не подскажете как правильно усреднять? - Т.Достоевский(08.09.2011 00:13)
- Пример. rezident(202 знак., 08.09.2011 00:17 - 00:21)
- Очень большое СПСБ! А то Йа после фсего уже нисоображаю -> - Т.Достоевский(08.09.2011 00:37 - 00:43, ссылка)
- Пример. rezident(202 знак., 08.09.2011 00:17 - 00:21)
- Запутался, виноват. Это усреднитель. Специально поставил кортекс чтобы сделать получше. Понял что плаваю совершенно, не подскажете как правильно усреднять? - Т.Достоевский(08.09.2011 00:13)
- Вы целочисленное от знакового отличаете? :) Вам нужно плавучку (float) использовать. Или хотя бы с фиксированной точкой работать. Например, в формате 16.16, раз у вас входная величина не превышает 12 разрядов. - rezident(08.09.2011 00:10)
- А как сделать знаковое??? - Т.Достоевский(08.09.2011 00:08)
- Как-то так: SciFi(169 знак., 08.09.2011 00:11)
- Чёта у меня так ничего и не заработало! Т.Достоевский(132 знак., 08.09.2011 00:02)
- Нет. Прибавляется разница между предыдущим и текущим значением величины. x += (newdata - x) / (N + 1). Переменные x и newdata должны быть знаковыми. При N = 0 фильтр отключен. - rezident(07.09.2011 23:47)
- y0=x+y1*k, где k=1-1/256. Можно и более сложные фильтры строить. Но при 8-битной разрядности сложно подобрать коэффициенты, чтоб не нарваться на переполнение. И практически на PIC-контроллерах (hitech C 9.51pl2 STD) плавающая точка может fk0(105 знак., 09.09.2011 11:02 - 11:10)
- Типа, берешь 7 частей уже имеющего значения и прибавляешь новое и делишь на 8. Вот тебе и "усреднение" в виде уменьшенного до 1/8 вклада от нового значения. - POV(07.09.2011 23:01)
- 7 частей это как? - Т.Достоевский(07.09.2011 23:08)
- Вот так... POV(103 знак., 07.09.2011 23:10)
- А на 256 так? meanX = (meanX << 8 - meanX +newX) / 256 ? И вот -> похожее нашёл. - Т.Достоевский(07.09.2011 23:18, ссылка)
- Ну да. - POV(07.09.2011 23:26)
- Тоесть получается что meanX = (meanX << coeff - meanX + newX) / coeff) где coeff - (meanX - meanX) отношение выборок к усреднению? Какой простор для "оптимизации" $-))! - Т.Достоевский(07.09.2011 23:39 - 23:42)
- Ну да. - POV(07.09.2011 23:26)
- А на 256 так? meanX = (meanX << 8 - meanX +newX) / 256 ? И вот -> похожее нашёл. - Т.Достоевский(07.09.2011 23:18, ссылка)
- Вот так... POV(103 знак., 07.09.2011 23:10)
- 7 частей это как? - Т.Достоевский(07.09.2011 23:08)