Усреднение

Views: 821


УСРЕДНЕНИЕ – извечная проблема, кода данные на входе пляшут и надо выделить среднее значение.

Классически такая задача решается когда, в каком то массиве накапливаются данные, а потом находиться среднее из полученных данных. Но наличие массива может быть ограниченно размерам памяти микроконтроллера. поэму я в Инете нашел новый принцип и доработал его для этой задачи.

Суть заключается в чем:

Мы получаем данные, затем берем, например 1,5 часть. Из переменной СРЕДНЕЕ мы также вычитаем из нее её 1,5 часть, а затем прибавляем к СРЕДНЕЕ 1,5 измеренного из нового параметра. получается маленький компактный код, который можно применить на 8 битных контроллерах даже где нет операции аппаратного деления, для этого можно использовать функции сдвига.

в СИ он будет выглядеть такт:

//======================================================================================
// subroutine: среднее число
// входные данные		staroe - старое значение переменой,
//				novoe - новое измеряемое значение
// старое значение уменьшается на коэффициент INTEG
// а затем увеличивается на величину нового/INTEG
signed int averageg (signed int staroe, signed int novoe)
{
    if(staroe<=INTEG && staroe>0)
    {
        staroe=staroe-1;
    }
    else   staroe=staroe-staroe/INTEG;
    staroe=staroe-(staroe/INTEG);
    staroe=staroe+(novoe/INTEG);
return staroe;
}//

ну не забудь добавить константу (чаще всего константы достаточно)

#define INTEG 10	// глубина интеграции

 


Вариант вычисление среднего для микроконтроллеров с малым объемов памяти например PIC10.

void averaging (void)
{
        /*уменьшаем базовому уровень на 2^avdepth*/
        avtemp=average;             //
        divide();                   //
        average-=avtemp;            //

        /*получаем часть от freq 2^avdepth* и добавляем его к базовому уровню*/
        avtemp=freq;                // текущая частота
        divide();                   //
        average+=avtemp;            //

}
/*деление 2^n*/
void divide (void)
{
char a;
    for(a=0;a<avdepth;a++)
    {
        avtemp>>=1;
    }
}

где average – средняя величина которая вычисляется от переменной freq. степень усреднения зависит от константы avdepth

чем больше avdepth – тем медленнее будет расти average от изменения freq. Но не стоит её выбирать очень большой в пределе от 2 до 5 вполне приемлемо для многих проектов, где необходимо сгладить, усреднить, какие то данные например, с АЦП или с емкостного сенсора.



Это может быть интересно


  • Проект с использованием MCC часть 12-2Проект с использованием MCC часть 12-2
    Views: 1182 Настало время для изучения шины I2C. Изучать будем на примере работы с индикатором RET012864E. Что изменили со старой схемы: В прошлой теме я затупил и не добавил подтягивающие резисторы …
  • ESP8266  процедура получение данных даты и времени от серверов точного времени.ESP8266 процедура получение данных даты и времени от серверов точного времени.
    Views: 6188 Эта функция доступна уже в версии 1.6.1. Для многих приложений, необходимо часы реального времени,  если в вашем проекте есть модуль WiFI ESP8266, то легко можно сделать следующим образом. …
  • Проблемы классической светомузыкиПроблемы классической светомузыки
    Views: 2176 Светомузыка – что это такое? Определение: Светомузыка  (жаргонное: цветомузыка)  — вид искусства, основанный на способности человека ассоциировать звуковые ощущения со световыми восприятиями. Такое явление в неврологии получило название …
  • PIC32MZ – прерывания (заметки)PIC32MZ – прерывания (заметки)
    Views: 528 Виды формирования запоминая контекста при входе в прерывания. Компилятор представляет три варианта AUTO – когда запоминания места возврата из подпрограммы возложено на программу, т.е все создается программно. Этот …
  • Дисплей KD035C-3A подключение и управлениеДисплей KD035C-3A подключение и управление
    Views: 829 Дисплей KD035C-3A производиться компанией SHENZHEN STARTEK ELECTRONIC TECHNOLOGY CO.,LTD Характеристики Параметр Спецификация Единицы измерения Размер дисплея 70.08(H)*52.56(V) (3.5inch) mm Тип дисплея TFT active matrix Цветовая гамма 65K/262K colors Разрешение …
  • Altium Designer – подготовка документации для производства и сборки печатных платAltium Designer – подготовка документации для производства и сборки печатных плат
    Views: 3979 В процессе освоения Altium Designer много возникает вопросов по подготовке документации для производства плат, а также для её сборки. Altium Designer позволяет сделать все требуемые документы, хотя скажем …
  • УКВ – радиоприем, часть 2УКВ – радиоприем, часть 2
    Views: 6415 Пришло свободное время решил вторую часть проекта реализовать (правда есть мысль и третью с использование цветного OLED и функцией ch-светомузыки, но это только задумка… Для понимания функций интегрального …
  • Инфракрасный датчик движения, PIR-sensorИнфракрасный датчик движения, PIR-sensor
    Views: 3294 Домашняя автоматика предполагает наличие датчиков движения, которые способны контролировать движения человека. Самым простым и доступным устройством позволяющие контролировать изменения ИК-излучения, это ПИР-сенсоры. На текущий момент доступны не дорогие модели D203B, D204B, D205B. Все …
  • APA102 – светодиоды со встроенным драйвером и SPI интерфейсомAPA102 – светодиоды со встроенным драйвером и SPI интерфейсом
    Views: 3514 APA102 В 2014 году фирма Shenzhen Led Color Optoelectronic Co., Ltd http://www.szledcolor.com/ начала производство светодиодов на драйвере APA102. Это серия так называемых светодиодов со встроенным драйвером. Основной особенностью этих …
  • Самый простой индикатор уровня звукового сигналаСамый простой индикатор уровня звукового сигнала
    Views: 6657 Демонстрационный проект создания индикаторов уровня с использованием WS2812B. Изучив этот проект вы сможете  самостоятельно изготавливать и конструировать свои индикаторы уровня звукового сигнала. Дополнительно читайте статью Бегущие огни на …



Поделись этим!