defunct 0 27 апреля, 2007 Опубликовано 27 апреля, 2007 · Жалоба Snaky Ради интереса попробуйте вот это (по 4м точкам): int UpdateAverage( int CurrVal ) { static int Sum = 0; int tmp = (Sum + 2) >> 2; Sum += CurrVal - tmp; return tmp; } за 12 итераций будет вам 10. ;> А алгоритм прост до ужаса, упрощенно: среднее = Sum / кол-во выборок по который усредняем. Sum = Sum + Текущее значение - среднее. Но это, IMHO, не скользящее среднее. ... А этот "экспоненциальный" фильтр имеет поведение как у RC-цепочки. Согласен Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Snaky 0 27 апреля, 2007 Опубликовано 27 апреля, 2007 · Жалоба Пример рабочий. Вы дальше повызывайте. Хотите чтоб быстрее получался рез-тат усредняйте по 8-ми или по 4-м точкам. Почитайте какую-нить книжку по усреднению прежде чем выступать. Константа эта для устранения абсолютной погрешности в 0.5LSB при накоплении суммы. У вас видать памяти в МК всегда много.. Тогда называйте вещи своими именами сразу. А то человек спросил про скользящее среднее, а вы ему совсем другое под этим названием подсовываете. Метод скользящего среднего - это то,что описал IgorKossak и Lepeksiy. Иначе захочется кому-нибудь сэкономить на памяти под массив, и будет потом долго удивляться, что результат поменялся. PS Да, памяти у меня в МК всегда много - не жалуюсь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 27 апреля, 2007 Опубликовано 27 апреля, 2007 · Жалоба Тогда называйте вещи своими именами сразу. А то человек спросил про скользящее среднее, а вы ему совсем другое под этим названием подсовываете. Свои имена не всегда упомнишь. Я не подсовываю, а делюсь примером, мог бы ведь и не делиться. Он сам решит подходит ему пример или нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ReAl 0 27 апреля, 2007 Опубликовано 27 апреля, 2007 · Жалоба Иначе захочется кому-нибудь сэкономить на памяти под массив, и будет потом долго удивляться, что результат поменялся.Да, реакция на выбросы у них отличается. Кстати, а в чём вообще смысл скользящего среднего? Фильтрует он не лучше, чем "экспоненциальный", памяти жрёт. Раз уж есть массив - так сделать бы фильтр с "более нормальным" откликом, чем прямоугольник. Да, счёту больше, ну так а жалко счёту - вон он, экспоненциальный, заодно и памяти меньше :-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Anjey_N 0 27 апреля, 2007 Опубликовано 27 апреля, 2007 (изменено) · Жалоба Спасибо всем! Благодаря вашим советам мне удалось запустить АЦП. Только врёт он немножко. Эталон --- АЦП 96 мВ --- 89 мВ 207 мВ --- 201 мВ 500 мВ --- 496 мВ 1 В --- 1 В 1.49 мВ --- 1.492 мВ 2 В --- 2.011 В 2.52 В --- 2.532 В Как это исправить, подскажите! Изменено 27 апреля, 2007 пользователем Anjey_N Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 28 апреля, 2007 Опубликовано 28 апреля, 2007 · Жалоба Как это исправить, подскажите! Если эталон - китайский мультиметр, то сменить мультиметр. Если же эталон заслуживает доверия, то давайте думать. Это не похоже на погрешность источника опорного напряжения, ибо отклонения имеют разный знак на концах шкалы. Какое у вас выходное сопротивление источника сигнала? И что вы используете в качестве опорного напряжения? Если внешняя опора, то какое выходное сопротивление ее источника? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
singlskv 0 28 апреля, 2007 Опубликовано 28 апреля, 2007 · Жалоба Да, реакция на выбросы у них отличается. Кстати, а в чём вообще смысл скользящего среднего? Фильтрует он не лучше, чем "экспоненциальный", памяти жрёт. Раз уж есть массив - так сделать бы фильтр с "более нормальным" откликом, чем прямоугольник. Да, счёту больше, ну так а жалко счёту - вон он, экспоненциальный, заодно и памяти меньше :-) Разница между скользящим средним и "экспоненциальным" заключается в том что "экспоненциальный" дает сдвиг фазы сигнала до 1/2 частоты сигнала То есть если сигнал "постоянный" то разницы нет никакой, а вот если изменяющийся, то тогда в каждом конкретном случае нужно рассчитывать в какой момент времени данные уже устаканились и устраивает ли нас такой сдвиг фазы Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Snaky 0 28 апреля, 2007 Опубликовано 28 апреля, 2007 · Жалоба Да, реакция на выбросы у них отличается. Кстати, а в чём вообще смысл скользящего среднего? Фильтрует он не лучше, чем "экспоненциальный", памяти жрёт. Раз уж есть массив - так сделать бы фильтр с "более нормальным" откликом, чем прямоугольник. Да, счёту больше, ну так а жалко счёту - вон он, экспоненциальный, заодно и памяти меньше :-) Оба фильтра по сути цифровая реализация ФНЧ. Просто фильтр скользящего среднего с массивом - это КИХ фильтр, экспоненциальный - БИХ. В моих задачах нужна конечная по времени реакция на отклик - я иду на затраты памяти. Олссон/Пиани интерпретируют экспоненциальный фильтр как авторегрессионный фильтр скользящего среднего первого порядка (признаю, тут можно согласиться с defunct). Подробнее - см. аттач (имхо лучше не объяснишь). PS Что значит "с более нормальным откликом" - я не понял :) filtr.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirYU 0 28 апреля, 2007 Опубликовано 28 апреля, 2007 · Жалоба VladimirYU А как это выражается формулами? Все очень просто, привожу не код, а алгоритм: Исходно имеем Summator - переменная двойной длины, Current - результат текущих измерений (данные с прибора, АЦП ...) Previos - предыдущий фильтрованный результат Далее error = Current - Previos Summator = Summator +error Previos = Summator>>N N определяет степень фильтрации ( количество результатов по которым идет усреднение). Ньюансы кода, как понимаете, зависят от формы предсавления результатов (разрядность, тип и т.д.) А математика за этим следующая 1/(TS+1) представить можно как интегратор 1/TS охваченный единичной отрицательной обратной связью. W(S) = Wпр(S)/(Wпр(S)*Wос(S) + 1) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yod 0 28 апреля, 2007 Опубликовано 28 апреля, 2007 · Жалоба Вот такой вот рабочий код приведен в документе slaa037.pdf - апликэшн репорт от тексаса ***************************************************************************** * Anti–bias results * answer = input + (0.875 * lasty) – lastx; * lasty = answer; * lastx = input; ***************************************************************************** Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Anjey_N 0 29 апреля, 2007 Опубликовано 29 апреля, 2007 (изменено) · Жалоба Если эталон - китайский мультиметр, то сменить мультиметр. Если же эталон заслуживает доверия, то давайте думать. Это не похоже на погрешность источника опорного напряжения, ибо отклонения имеют разный знак на концах шкалы. Какое у вас выходное сопротивление источника сигнала? И что вы используете в качестве опорного напряжения? Если внешняя опора, то какое выходное сопротивление ее источника? 1) Мультимер UNI-T M890F, купленный 4 года назад за 20 баксов. На него я ещё не разу не жаловался! 2) В качестве источника входного сигнала я ис пользую такую сему 3) ИОН внутренний с конденсатором на ножке AREF, равен 2.66 В Может я чего намутил в программе,посмотрите, пожалуйста, код ADC_new.rar Изменено 29 апреля, 2007 пользователем Anjey_N Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 143 29 апреля, 2007 Опубликовано 29 апреля, 2007 · Жалоба На него я ещё не разу не жаловался!Это не значит что он показывает правильно. 2) В качестве источника входного сигнала я ис пользую такую семуВыходное сопротивление вашей цепи близко к предельному:The ADC is optimized for analog signals with an output impedance of approximately 10k or less. If such a source is used, the sampling time will be negligible.Попробуйте увеличить время выборки (sampling time) снизив тактовую частоту АЦП или возьмите потенциометр на 10К Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться