Visits: 779
УСРЕДНЕНИЕ – извечная проблема, кода данные на входе пляшут и надо выделить среднее значение.
Классически такая задача решается когда, в каком то массиве накапливаются данные, а потом находиться среднее из полученных данных. Но наличие массива может быть ограниченно размерам памяти микроконтроллера. поэму я в Инете нашел новый принцип и доработал его для этой задачи.
Суть заключается в чем:
Мы получаем данные, затем берем, например 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 вполне приемлемо для многих проектов, где необходимо сгладить, усреднить, какие то данные например, с АЦП или с емкостного сенсора.
Это может быть интересно
- Altium Designer – создание рисунков на печатной платеVisits: 3242 Для создание рисунков на печатной платы в Altium Designer можно использовать возможность использовать в Altium Designer сторонних скриптов. Мне возможность эта очень понравилась и я решил её расшарить …
- Простой оптический сенсор приближенияОптический сенсор, назначение оптический концевик, для автоматики, бесконтактный выключатель с функцией автоматического отключения...
- REFERENCE CLOCK OUTPUT MODULEVisits: 489 REFERENCE CLOCK OUTPUT MODULE Модуль формирования опорного тактового сигнала Модуль опорного тактового сигнала обеспечивает возможность посылать сигнал синхронизации на тактовый опорный выходной контакт или контакты (CLKR) в зависимости от …
- AD9833 – Programmable Waveform GeneratorVisits: 2753 Простой генератор звуковых частот на AD9833. Для тестирования БПФ в светомузыке мне нужен был генератор звуковых частот. Я использовал советский Г3-112, но он себя давно изжил. Все думал купить …
- Контроллер управления светодиодным освещением с дистанционным управлениемVisits: 1998 Все активнее светодиоды входят в нашу жизнь. Всё эффективнее становится светодиодное освещение. Всё ниже опускаются цены. Всё больше появляется возможностей получения сочных цветов, простоты в управлении. Всё чаще …
- ch-светомузыка и AK4113Visits: 1266 Пришло время вернуться к светомузыке. На сегодня использование аналогового входа стало непрактичным, на сегодня необходимо использовать S/PDIF и Toslink. С этим надо было как то разобрать, что это …
- Audio-bluetooth modules BK8000L (noname)Visits: 646 Еще один вариант, так сказать недоразумения Audio-bluetooth modules BK8000L (noname). Его отличительной маркировкой служат два отверстия в плате и надпись R2. Отличают его от модулей на чипе BK8000L, …
- BMP280 – температура и атмосферное давление – учебный проектVisits: 2035 Учебный проект на PIC32 и светодиодной панели P5 (2121)-168-6432-80 (32*64). Проект позволяет ознакомиться с простой графикой и с чтением давления и температуры с датчика BMP280. Для тестирования необходимо …
- Arduino LCD + STONE STVI056WT-01 + Strain gaugeVisits: 436 Author li grey email: greyli1987@outlook.com The strain assessment instrument is used to assess the degree of corresponding muscle strain by obtaining the muscle surface action potential through silver …
- Защита датчиков температуры DS18B20 от статического электричестваVisits: 1811 Статья перепечатана с сайта http://svetomuzyka.narod.ru При удалении датчика на большие расстояния возникает опасность наведения импульсов высокого напряжения на кабель, который соединяет датчик с контролером. Если не принимать меры защиты, …