На счет того, что Excel не любит точки в качестве разделителя. Изменить это можно в Панели управления -> Язык -> Изменение форматов даты, времени и чисел -> Дополнительные параметры -> Разделитель целой и дробной части.
Это повлияет на все настройки системы и программ в ОС. Проще в настройках экселя принудительно указать разделитель точку (или другой символ). Как правило это и нужно только в экселе. Работает во всех экслеях. В последнем 2016 экселе, параметры - дополнительно - убираем галочку с использовать системные разделители и вводим в окошко необходимый знак разделителя.
Спасибо, очень ценная информация для меня, а то квадрик собрал на меге, а его колбасит, никакой стабилизации, хорошо, что есть такие светочи, ещё раз Спасибо!!!
Чувак, у тебя этот фильтр работает как простой экспоненциальный фильтр, так как коэффициент фильтра только в начале меняется, а потом стабилизируется и не зависит от сигнала )
Если в настройках Виндовс, а именно в разделе "Языковые настройки" указать в качестве разделителя точку, а не запятую, то Excel будет работать с точками.
КМК, если канал обучающий, то стоило бы хотя бы кратко объяснить физический смысл данного фильтра, как именно он работает. И как работают эти два коэффициента. А то получается магия: сюды суёшь, вот тут пристукни и чё-то-там получишь. Вроде, работает, а как - непонятно. ЗЫ: мне было бы лень гуглить фильтр и я бы сделал свой собственный велосипед :)))
Интересно, такой фильтр подойдёт для детекта, скажем, открытия/закрытия двери? Поставить пару датчиков и, если на обоих резкое изменение, подаём сигнал
Подскажи плс а как ты останавливаешь на время поток данных в serial? Ты вроде на какую-то кнопку нажимаешь чтоб остановить графики и поменять значения перед продолжением работы
Можно проще: при объявлении alt выставляем 0. float k=0..1; (скорость реакции , подобрать) alt=k*(bmp.readAltitude()-baseline)+(1-k)*alt; фильтр получаем практически такой же, а констант на 7 меньше, что экономит 28 байт. фильтры проверял в Exel drive.google.com/file/d/1LxZQXgJ3dzRc-Bv73d3N13rm5gVoCvOJ/view?usp=sharing
Минут двадцать фтыкал в эту странную функцию... Или я чего-то не понимаю, или: переменные Хр и Zp не рекурсивные, следовательно Zp=Xp=Xe ВСЕГДА. Выкидываем с чистой совестью лишнее, подставляем Xe в формулу, раскрываем скобки: Xe=G*val+(1-G)*Xe. Так проще, экономичнее по памяти и смысл лучше читается. Далее к расчету коэффициента G: при его расчете учитывается только предыдущее значение коэффициента, сами фильтруемые значения в расчете не участвуют. Таким образом, при любой последовательности значений, коэффициенты будут считаться всегда одинаково для одинаковых varVolt и varProcess. Попробуйте вывести на график также значение G - подозреваю, оно после переходного процесса сойдется к некоторой константе. Если это так и учитывая, что varProcess мы все равно подбираем на глазок, можно отказаться от расчета среднего отклонения в экселе, да и весь расчет G отправить на свалку. Тогда вся функция сведется к одной строчке: Xe=varProcess*val+(1-varProcess)*Xe и работать, думаю, будет не хуже)
абсолютно те же мысли были при просмотре) я даже давече работав с фильтром Калмана не сразу въехал, где тут что и чему в теории соответствует) вообще запись "Xe=G*val+(1-G)*Xe" - самая правильная и читаемая, так как выражает базовую идею данного фильтра. и почему "G" - тоже не очень понятно) эту штуку зовут коэффициентом Калмана и обозначают - барабанная дробь - буквой "К")
Ну в каком-то смысле будет, да, это даже на вашем графике видно, но это собственно то, во что вырождается фильтр калмана при таком сильном упрощении. А конкретно то, как комментатор выше записал сокращенное выражение - и есть канонический вид фильтра К, разве что без управляющего воздействия (оно в данном варианте списано в неизвестные)
Да, получится апериодический фильтр 1-ого порядка (его дискретный эквивалент).Такой фильтр описывается передаточной функцией вида: 1/(T*p+1), единственный настраиваемый параметр -- постоянная времени Т. Фильтр Калмана в столь вырожденном виде нет смысла применять.
@@ArduNotes Вот поэтому я и не люблю такие простые библиотеки. Библиотеку обозвали фильтром Калмана, а на самом деле засунули обыкновенное скользящее среднее.
А если требуется хорошая сглаженность и при этом высокое время отклика, можно ли, как вариант, сглаживать в два этапа? Сперва сглаживаем исходные данные, а потом сглаживаем уже их, и всё это с требуемым высоким временем отклика.
Можно сделать последовательную цепочку фильтров, например экспоненциального сглаживания. Количество фильтров в цепочке (порядок фильтра) 5-8, а частота отсечки (LPF) - примерно частоте синусоиды сигнала, так что через одиночный фильтр синус проваливается почти без потерь (правда, и шум тоже фильтруется абы как). Децимации быть не должно, то есть на каждый входной сэмпл получаем один выходной. Особенность такого составного фильтра - сильное подавление сигналов с частотой выше Fs/4, и он относительно короткий.
А почему в приведенном примере используется смещённое отклонение (СТАНДОТКЛОН.Г)? Мне кажется, что логичнее использовать несмещённое (СТАНДОТКЛОН.В), в чём моя ошибка?
тогда на резкие изменения график будет еще меньше реагировать. Вы же можете поставить тот коефициент насколько малым, что график будет очень плавным, но не будет нормально реагировать на скачки.
для такого я бы написал 1-2строчный свой фильтр :) а не гуглил бы сверхматематический. например у нас есть x который берется в каждом проходе лупа float x = analogRead чето там до функций делаем переменную float xSmoothed = 0; в лупе делаем - float smoothSpeed = 0.001; float xSmoothed = xSmoothed + ((x - xSmoothed) * smoothSpeed); я так сглаживал пару дней назад слишком резкие движения сервы и отлично :)
+† там в самом мониторе надо либо галочку поставить какуюто, либо режим выбрать. Либо переписать код так, чтобы были println и пробелы вместо знаков табуляции, как у вас
В тему простых фильтров рекомендую попробовать AB фильтр. Фишка его в том что он инерциальный и сохраняет свою скорость. С помощью калмана такое значительно сложнее сделать.
Если разбираетесь, подскажете, как сделать (как создать или найти готовый фильтр), чтобы рост (резкий рост получался очень плавным) показаний сглаживался с одним коэффициентом, Падение - другим коэффициентом (Резкое падение оставалось резким), но при этом был третий коэффициент, отвечающий за сглаживание мелких дрожаний? Помогите пожалуйста. ООочень нужно, сам не справляюсь. (можно в личку на vk.com/write226228)
Такой фильтр можно самому запрограммировать на основе AB фильтра. Например, вам пришло более маленькое значение. Изменяете параметры фильтра(увеличиваете чувствительность), и скармливаете ему новое значение. Два первых пункта тогда будут выполнятся. Если для начала сделаете так, то потом возможное придет идея как сделать "третий параметр".
Самый правильный способ считать среднеквадратичное значение. То есть возводим результат измерения в квадрат, вычисляем среднее значение квадратов за множество измерений, потом вычисляем квадратный корень из результата. То есть если у нас есть сигнал с частотой 50 герц и амплитудой 311 вольт, то вычислив его среднеквадратичное значение мы как раз получим те 220 вольт которые у нас в розетке. Но этот способ довольно ресурсоемкий и в мультиметрах часто ставят микросхему RMS to DC преобразователя, которая на выходе дает постоянное напряжение соответствующее среднеквадратичному значению.
Немного эффективнее брать не 10 значений, а например, 8 или 16, вобщем количество измерений должно быть кратно степени 2, тогда делить можно просто сдвигая вправо. Конечно, это имеет значение, если вы сначала считаете сумму всех элементов, а потом делите. ;)
@@mark05071977 эффективно брать то значение, в какой среде и для чего берутся данные. Например, такую скользящую среднюю применяют в биржевой торговле. Берут значения 7, 14, 21 кратное неделям или 90 кратное кварталу
Есть кто может написать частотный фильтр на STM32 нужно отрезать лишние частоты и шумы с пьезоэлектрического микрофона и воспроизводить отфильтрованный сигнал на гарнитуру(наушники)?
вообще-то существует такое понятие как ГИСТЕРЕЗИС, которое намного проще и понятнее фильтра Калмана, спрашивается - зачем огород городить, или заниматься тем, что не понимаешь? а с ГИСТЕРЕЗИСОМ разобраться довольно просто и поэтому при его применении можно ОСОЗНАНО писать код, понимая что делаешь. просто задаёте величину изменения в ПЛЮС и МИНУС при коротком отрезке времени, на которое система НЕ БУДЕТ РЕАГИРОВАТЬ - всё гениальное просто )))
а теперь попробуй прикрутить гистерезис к процессу например для ПИД регулятора, вот потеха то будет =) Все та кие умные, а элементарных вещей не понимают
@@ArduNotes просто делаете ДИСКРЕТНУЮ РЕАЛИЗАЦИЮ, то-есть для каждого значения P, I, D высчитываете своё значение, при этом ГИСТЕРЕЗИС (интервал шума, ошибки) у каждого значения свой, затем все значения складываете и сравниваете с прошлым результатом, если он ОТЛИЧАЕТСЯ, значит БЫЛО СОБЫТИЕ и вы вносите изменения в систему.
Ну да, здесь фильтрация по Калману -- это из пушки по воробьям. :) Фильтр Калмана хорош, когда значения, которые нужны отфильтрованными, зависят от измеряемых параметров не самым простым способом -- например, нам необходимо застабилизировать координату, мы знаем Ньютоновы параметры (начальную скорость, начальную координату и основную часть ускорения), и у нас есть источник поправки к ускорению (акселерометр), который "работает не очень хорошо", то есть, его данные содержат значительную случайную компоненту.
А как сделать (какое выражение замутить в фильтре), чтобы рост (резкий рост получался очень плавным) показаний сглаживался с одним коэффициентом, Падение - другим коэффициентом (Резкое падение оставалось резким), но при этом был третий коэффициент, отвечающий за сглаживание мелких дрожаний? Помогите пожалуйста. ООочень нужно, сам не справляюсь. (можно в личку на vk.com/write226228)
Не будет. Аппаратные фильтры точно так же изменяют ФЧХ, кроме того, аппаратно невозможно получить фильтры с КИХ. Ну и, конечно, же внутренняя периферия микроконтроллера сама вносит шумы в измерения АЦП (таймеры, например). Так что все же лучше изучать цифровые фильтры.
Так в этом "простом Калмане" и применена скользящая средняя, если внимательно присмотреться к коду функции. Калманом там и не пахнет, либо он сильно вырожден.
Имеет право на жизнь. Однако, оперируя флоатами, вы раздуваете код и ухудшаете быстродействие программы. ИМХО, везде где только можно нужно стараться обходиться целыми числами.
Как-то с Экселем вы... Через жопу гланды... Выделяем столб с цифирью. Данные / Текст по столбцам. И выбираем разделители, какие нравятся... Какие-то танцы с блокнотами...
С фоторезистором ничего внятного не вышло. Он управляет светодиодом. В полумраке из_за скачков мерцает светодиод. С этим фильтром получил вообще стробоскоп.
На счет того, что Excel не любит точки в качестве разделителя. Изменить это можно в Панели управления -> Язык -> Изменение форматов даты, времени и чисел -> Дополнительные параметры -> Разделитель целой и дробной части.
ооох, спасибо!
А еще заменить точки на запятые можно все также через ctrl+H в экселе, предварительно изменив формат ячеек на текстовый.
Это повлияет на все настройки системы и программ в ОС.
Проще в настройках экселя принудительно указать разделитель точку (или другой символ). Как правило это и нужно только в экселе.
Работает во всех экслеях. В последнем 2016 экселе, параметры - дополнительно - убираем галочку с использовать системные разделители и вводим в окошко необходимый знак разделителя.
Угу. Или поменять локаль на какую-нить нерусскую англо-саксонскую. Откуда этот разделитель точка и пришёл.
Спасибо, очень ценная информация для меня, а то квадрик собрал на меге, а его колбасит, никакой стабилизации, хорошо, что есть такие светочи, ещё раз Спасибо!!!
Чувак, у тебя этот фильтр работает как простой экспоненциальный фильтр, так как коэффициент фильтра только в начале меняется, а потом стабилизируется и не зависит от сигнала )
@@InterdimensionalHypnofuc-ee1gf А что он не так написал?
Вышей класс! Давно искал подобный филтр. Большое спасибо!
Супер! Вещь полезная, хотел по умничать, но в комментариях уже все описали ))))
Если в настройках Виндовс, а именно в разделе "Языковые настройки" указать в качестве разделителя точку, а не запятую, то Excel будет работать с точками.
КМК, если канал обучающий, то стоило бы хотя бы кратко объяснить физический смысл данного фильтра, как именно он работает. И как работают эти два коэффициента.
А то получается магия: сюды суёшь, вот тут пристукни и чё-то-там получишь. Вроде, работает, а как - непонятно.
ЗЫ: мне было бы лень гуглить фильтр и я бы сделал свой собственный велосипед :)))
Вопрос по фильтру...
Можно ли профильтровать прерывания?
Дребезг контактов при считывании оборотов двигателя с контактного зажигания
Точки или запятые в Экселе настраиваются в региональных настройках.
Интересно, такой фильтр подойдёт для детекта, скажем, открытия/закрытия двери? Поставить пару датчиков и, если на обоих резкое изменение, подаём сигнал
Жду еще от тебя подобные видео
Спасибо за видео. А если не заниматься *ексом с Кальманом, а банально, считать среднюю за какой-то период?
Подскажи плс а как ты останавливаешь на время поток данных в serial? Ты вроде на какую-то кнопку нажимаешь чтоб остановить графики и поменять значения перед продолжением работы
Спасибо за видео и советы
Я просто в шоке!!!! Класс!!!! Мое почтение автору!!!
Здравствуйте, автор. Фильтром Калман-Бьюси можно оценивать энергетические параметры канала LTE стандарта?
Огромное спасибо! Очень пригодилось
Шик, то что нужно для дипломной)
Можно проще:
при объявлении alt выставляем 0.
float k=0..1; (скорость реакции , подобрать)
alt=k*(bmp.readAltitude()-baseline)+(1-k)*alt;
фильтр получаем практически такой же, а констант на 7 меньше, что экономит 28 байт.
фильтры проверял в Exel drive.google.com/file/d/1LxZQXgJ3dzRc-Bv73d3N13rm5gVoCvOJ/view?usp=sharing
Чтобы избавиться от пиков, можно использовать медианный фильтр
+Михаил Лубинец спасибо, почитаю что за зверь такой
+Михаил Лубинец спасибо, почитаю что за зверь такой
А можно таким образом вывести синхронизацию датчика распредвала по датчику коленвала?
а если сделать фильтр фильтра с разными скоростями реакции? возможно получится более точно подстроить.
если увеличить коэффициент, получим тот же результат. коэффициенты просто перемножатся.
Минут двадцать фтыкал в эту странную функцию... Или я чего-то не понимаю, или: переменные Хр и Zp не рекурсивные, следовательно Zp=Xp=Xe ВСЕГДА. Выкидываем с чистой совестью лишнее, подставляем Xe в формулу, раскрываем скобки: Xe=G*val+(1-G)*Xe. Так проще, экономичнее по памяти и смысл лучше читается. Далее к расчету коэффициента G: при его расчете учитывается только предыдущее значение коэффициента, сами фильтруемые значения в расчете не участвуют. Таким образом, при любой последовательности значений, коэффициенты будут считаться всегда одинаково для одинаковых varVolt и varProcess. Попробуйте вывести на график также значение G - подозреваю, оно после переходного процесса сойдется к некоторой константе. Если это так и учитывая, что varProcess мы все равно подбираем на глазок, можно отказаться от расчета среднего отклонения в экселе, да и весь расчет G отправить на свалку. Тогда вся функция сведется к одной строчке: Xe=varProcess*val+(1-varProcess)*Xe и работать, думаю, будет не хуже)
абсолютно те же мысли были при просмотре) я даже давече работав с фильтром Калмана не сразу въехал, где тут что и чему в теории соответствует) вообще запись "Xe=G*val+(1-G)*Xe" - самая правильная и читаемая, так как выражает базовую идею данного фильтра.
и почему "G" - тоже не очень понятно) эту штуку зовут коэффициентом Калмана и обозначают - барабанная дробь - буквой "К")
а случайно это не будет low pass filter?
Ну в каком-то смысле будет, да, это даже на вашем графике видно, но это собственно то, во что вырождается фильтр калмана при таком сильном упрощении. А конкретно то, как комментатор выше записал сокращенное выражение - и есть канонический вид фильтра К, разве что без управляющего воздействия (оно в данном варианте списано в неизвестные)
Да, получится апериодический фильтр 1-ого порядка (его дискретный эквивалент).Такой фильтр описывается передаточной функцией вида: 1/(T*p+1), единственный настраиваемый параметр -- постоянная времени Т. Фильтр Калмана в столь вырожденном виде нет смысла применять.
@@ArduNotes Вот поэтому я и не люблю такие простые библиотеки. Библиотеку обозвали фильтром Калмана, а на самом деле засунули обыкновенное скользящее среднее.
Спасибо, очень помог)
А если требуется хорошая сглаженность и при этом высокое время отклика, можно ли, как вариант, сглаживать в два этапа? Сперва сглаживаем исходные данные, а потом сглаживаем уже их, и всё это с требуемым высоким временем отклика.
Можно сделать последовательную цепочку фильтров, например экспоненциального сглаживания. Количество фильтров в цепочке (порядок фильтра) 5-8, а частота отсечки (LPF) - примерно частоте синусоиды сигнала, так что через одиночный фильтр синус проваливается почти без потерь (правда, и шум тоже фильтруется абы как). Децимации быть не должно, то есть на каждый входной сэмпл получаем один выходной. Особенность такого составного фильтра - сильное подавление сигналов с частотой выше Fs/4, и он относительно короткий.
А почему в приведенном примере используется смещённое отклонение (СТАНДОТКЛОН.Г)? Мне кажется, что логичнее использовать несмещённое (СТАНДОТКЛОН.В), в чём моя ошибка?
А если применять фильтр, уже к фильтрованному сигналу , что бы и всплески были и было гладко ?
тогда на резкие изменения график будет еще меньше реагировать. Вы же можете поставить тот коефициент насколько малым, что график будет очень плавным, но не будет нормально реагировать на скачки.
Отлично!
Шедеврально!
для такого я бы написал 1-2строчный свой фильтр :) а не гуглил бы сверхматематический.
например у нас есть x который берется в каждом проходе лупа float x = analogRead чето там
до функций делаем переменную float xSmoothed = 0;
в лупе делаем -
float smoothSpeed = 0.001;
float xSmoothed = xSmoothed + ((x - xSmoothed) * smoothSpeed);
я так сглаживал пару дней назад слишком резкие движения сервы и отлично :)
При импорте файла можно просто выбрать какой там разделитесь. Даже ничего менять не нужно!
great. Thank you very much!
а как именно ты создавал резкие скачки атмосферного давления?
просто дунул на датчик
наоборот втянул)
День добрый уважаемый Alex !
Вы не подскажите : работаю с датчиком mpu6050 и скетчем (нашёл в сети):
// подключение библиотек
#include "I2Cdev.h"
#include "MPU6050.h"
#include "Wire.h"
#define TEMP_ADDR 72
MPU6050 accelgyro;
int16_t ax, ay, az;
int16_t gx, gy, gz;
void setup()
{ Serial.begin(9600);
Wire.begin();
// инициализация
Serial.println("Initializing I2C devices...");
accelgyro.initialize();
delay(100);
}
void loop()
{
// чтение значений гироскопа и акселерометра
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
// вывод значений в монитор
// Serial.print("a/g:\t");
//Serial.print("Giro:\t");
// Serial.print(ax); Serial.print("\t");
// Serial.print(ay); Serial.print("\t");
// Serial.print(az); Serial.print("\t");
Serial.print(gx); Serial.print("\t");
Serial.print(gy); Serial.print("\t");
Serial.println(gz);
}
Данные этот скетч выдает не фильтрованные . Скачут значения . График строится вроде нормально . Я хочу прикрутить фильтр Калмана как у Вас . Написал вот так :
#include "I2Cdev.h"
#include "MPU6050.h"
#include "Wire.h"
MPU6050 accelgyro;
int16_t ax, ay, az;
int16_t gx, gy, gz;
float filtered_gx = 0.0;
// переменные для калмана
float varVolt = -28.26; // среднее отклонение (ищем в excel)
float varProcess = 0.1; // скорость реакции на изменение (подбирается вручную)
float Pc = 0.0;
float G = 0.0;
float P = 1.0;
float Xp = 0.0;
float Zp = 0.0;
float Xe = 0.0;
// переменные для калмана
void setup()
{
Serial.begin(1200);
Wire.begin();
// инициализация
Serial.println("Initializing I2C devices...");
accelgyro.initialize();
delay(100);
}
void loop()
{
// чтение значений гироскопа и акселерометра
accelgyro.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
//функция фильтрации
float filtered_gx = filter(gx);
// вывод значений в монитор
//Serial.print("Giro:\t");
//Serial.print(ax); Serial.print("\t");
//Serial.print(ay); Serial.print("\t");
//Serial.print(az); Serial.print("\t");
Serial.print(gx); Serial.print("n");
Serial.print(filtered_gx); Serial.print("n");
//Serial.print(gy); Serial.print("\t");
//Serial.println(gz);
}
float filter(float val){ //функция фильтрации
Pc = P + varProcess;
G = Pc/(Pc + varVolt);
P = (1-G)*Pc;
Xp = Xe;
Zp = Xp;
Xe = G*(val-Zp)+Xp; // "фильтрованное" значение
return(Xe);
}
Но значения в Мониторе Порта идут(бегут) в ряд , а не в столбцы .
Не знаете как исправить ?
+† там в самом мониторе надо либо галочку поставить какуюто, либо режим выбрать. Либо переписать код так, чтобы были println и пробелы вместо знаков табуляции, как у вас
Да ! Вы правы ! Спасибо ! Оказывается надо было вот так : вместо Serial.print("\t"); писать Serial.print(0x0A)
В тему простых фильтров рекомендую попробовать AB фильтр. Фишка его в том что он инерциальный и сохраняет свою скорость. С помощью калмана такое значительно сложнее сделать.
Если разбираетесь, подскажете, как сделать (как создать или найти готовый фильтр), чтобы рост (резкий рост получался очень плавным) показаний сглаживался с одним коэффициентом, Падение - другим коэффициентом (Резкое падение оставалось резким), но при этом был третий коэффициент, отвечающий за сглаживание мелких дрожаний?
Помогите пожалуйста. ООочень нужно, сам не справляюсь. (можно в личку на vk.com/write226228)
Такой фильтр можно самому запрограммировать на основе AB фильтра. Например, вам пришло более маленькое значение. Изменяете параметры фильтра(увеличиваете чувствительность), и скармливаете ему новое значение. Два первых пункта тогда будут выполнятся. Если для начала сделаете так, то потом возможное придет идея как сделать "третий параметр".
Александр Гращенков, спасибо.
Правда ничего не удалось по делу нагуглить по тому, "что такое AB фильтр" и о реализации этого на Си.
en.wikipedia.org/wiki/Alpha_beta_filter
Санечка вами недоволен
Не попадались ли вам способ, как отфильтровать 50 Гц на АЦП ардуины?
Самый правильный способ считать среднеквадратичное значение. То есть возводим результат измерения в квадрат, вычисляем среднее значение квадратов за множество измерений, потом вычисляем квадратный корень из результата. То есть если у нас есть сигнал с частотой 50 герц и амплитудой 311 вольт, то вычислив его среднеквадратичное значение мы как раз получим те 220 вольт которые у нас в розетке. Но этот способ довольно ресурсоемкий и в мультиметрах часто ставят микросхему RMS to DC преобразователя, которая на выходе дает постоянное напряжение соответствующее среднеквадратичному значению.
+Denis Primo не понял. Нужно изменять частоту?
Ситуация: на вход АЦП поступает сигнал, на него наводится паразитные 50Гц от сети 220В. Задача - программно убрать эту наводку.
Denis Primo А можешь показать схему. А то сдается мне, что гораздо проще эту проблему решить аппаратно.
конденсатор ставь. I = C dV/dt. там около 60uF Переменка же)
Где ж ты был 6 месяцев назад =(
Я просто вывожу средние за 10 последних изменений. Делаю массив из 10 элементов и заполняю их по кругу.
Немного эффективнее брать не 10 значений, а например, 8 или 16, вобщем количество измерений должно быть кратно степени 2, тогда делить можно просто сдвигая вправо. Конечно, это имеет значение, если вы сначала считаете сумму всех элементов, а потом делите. ;)
@@mark05071977 эффективно брать то значение, в какой среде и для чего берутся данные. Например, такую скользящую среднюю применяют в биржевой торговле. Берут значения 7, 14, 21 кратное неделям или 90 кратное кварталу
@@mark05071977 вместо деления лучше умножеть всегда, например не А=Б/10 лучше А=Б*0.1
красавчик
Ексель любит смотреть в настройки языка и стандартов а не то что он любит точку или запятую. Что там есть то так и будет отображаться)
Архив пропал!!!
Где я могу скачать exel файл😒
Я новичок в этой сфере! Можете подсказать для чего могут понадобится графики?
Либо для визуального понимание результата работы датчиков, либо, если графики требуются в интерфейсе управления чем-либо.
Спасибо)
Много искал так и не нашёл! Как запускать ардуино с отдельной кнопки!! Как это сделать???
+ЧтоДаКак выключатель по питанию
Есть кто может написать частотный фильтр на STM32 нужно отрезать лишние частоты и шумы с пьезоэлектрического микрофона и воспроизводить отфильтрованный сигнал на гарнитуру(наушники)?
Zp=Xp! Может, удалить одно из них, если они тождественны?
это не равно, а присвоить)
Хотел использовать для фильтрации сигнала с RC приемника, но ничего не сработало сигнал с фильтром абсолютно такой же "шумный" как и без фильтра
оставлю ка 112 коммент =)
вообще-то существует такое понятие как ГИСТЕРЕЗИС,
которое намного проще и понятнее фильтра Калмана,
спрашивается - зачем огород городить, или заниматься тем, что не понимаешь?
а с ГИСТЕРЕЗИСОМ разобраться довольно просто
и поэтому при его применении можно ОСОЗНАНО писать код, понимая что делаешь.
просто задаёте величину изменения в ПЛЮС и МИНУС при коротком отрезке времени,
на которое система НЕ БУДЕТ РЕАГИРОВАТЬ - всё гениальное просто )))
а теперь попробуй прикрутить гистерезис к процессу например для ПИД регулятора, вот потеха то будет =) Все та кие умные, а элементарных вещей не понимают
@@ArduNotes просто делаете ДИСКРЕТНУЮ РЕАЛИЗАЦИЮ, то-есть для каждого значения P, I, D высчитываете своё значение, при этом ГИСТЕРЕЗИС (интервал шума, ошибки) у каждого значения свой, затем все значения складываете и сравниваете с прошлым результатом, если он ОТЛИЧАЕТСЯ, значит БЫЛО СОБЫТИЕ и вы вносите изменения в систему.
Древне эльфийский)))))
Для Excel 2007 функция называется СТАНДОТКЛОНА
Ну да, здесь фильтрация по Калману -- это из пушки по воробьям. :)
Фильтр Калмана хорош, когда значения, которые нужны отфильтрованными, зависят от измеряемых параметров не самым простым способом -- например, нам необходимо застабилизировать координату, мы знаем Ньютоновы параметры (начальную скорость, начальную координату и основную часть ускорения), и у нас есть источник поправки к ускорению (акселерометр), который "работает не очень хорошо", то есть, его данные содержат значительную случайную компоненту.
А как сделать (какое выражение замутить в фильтре), чтобы рост (резкий рост получался очень плавным) показаний сглаживался с одним коэффициентом, Падение - другим коэффициентом (Резкое падение оставалось резким), но при этом был третий коэффициент, отвечающий за сглаживание мелких дрожаний?
Помогите пожалуйста. ООочень нужно, сам не справляюсь. (можно в личку на vk.com/write226228)
Нет такой страницы в вк
Что я только не пробовал,но плоттер не рисует графики.
У меня сразу запустился. Главное соблюдать синтаксис при выводе переменных (предыдущее видео) и помнить что он не умеет во Флоаты, только инты
если фильтровать шумы аппаратно, то скорость реакции будет один к одному.
Не будет. Аппаратные фильтры точно так же изменяют ФЧХ, кроме того, аппаратно невозможно получить фильтры с КИХ. Ну и, конечно, же внутренняя периферия микроконтроллера сама вносит шумы в измерения АЦП (таймеры, например). Так что все же лучше изучать цифровые фильтры.
Скользящую среднюю применили бы и всего делов.
ага, тоже дрючился с фильтрами и всяким умничанием типа выбрасывания крайних значений - скользящее среднее просто и четко работает.
Так в этом "простом Калмане" и применена скользящая средняя, если внимательно присмотреться к коду функции. Калманом там и не пахнет, либо он сильно вырожден.
Можно, наверное, использовать этот датчик вместо микрофона
Нафига его фильтровать сглаживанием? Его фильтровать можно обычным порогом.
класс но для меня пока сложно....
dostum çok iyisin bu işi bir de PID için yapsan harika olur
скользяшка)
Точки можно заменить написав пару строк...
И среднее посчитать пиздец не рокет сайенс даже на ардуино
это не фильтр Калмана.
лол а что же это))))))))))
@@Muerte_S очень похоже на скользящее среднее. Либо этот Калман уж слишком вырожден.
Имеет право на жизнь. Однако, оперируя флоатами, вы раздуваете код и ухудшаете быстродействие программы. ИМХО, везде где только можно нужно стараться обходиться целыми числами.
для ардуины есть библиотеки для вычислений с фиксированной точкой
@@smprohd библиотеки сами в свою очередь раздувают код)
Как-то с Экселем вы... Через жопу гланды... Выделяем столб с цифирью. Данные / Текст по столбцам. И выбираем разделители, какие нравятся... Какие-то танцы с блокнотами...
С фоторезистором ничего внятного не вышло. Он управляет светодиодом. В полумраке из_за скачков мерцает светодиод. С этим фильтром получил вообще стробоскоп.
Такой вариант гораздо удобнее использовать github.com/someWhoAnon/SimpleFilter
Лучший фильтр это медиана) я так думаю, особенно для лядских уз датчиков которые любят врать)
Лучшие фильтры, это те что используют матмодель процесса. Это или нелинейный фильтр калмана или фильтр частиц.
Фийня это полная, а не фильтр Калмана. Это обычный Low Pass Filter X = X*k + V * (1-k).
float в ардуино?? Серьезно? В фильтре? Просто дичь.
А что не так?
Архив пропал!!!
Архив пропал!!!
Архив пропал!!!
Архив пропал!!!