Алгоритм для чёрного ящика

ZIA
ZIA аватар
Offline
Зарегистрирован: 04.02.2017

ua6em пишет:

А самим попробовать религия не позволяет??? )))
Это только исправьте, а то сливать в консоли будет

 Serial.println(Data_max471);

 

Позволяет! Пока не на чем, жду заказа и пытаюсь собрать информацию

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

LOGIK говорил, что можно включать последовательно, пробуйте, получится как бы двухзвенный фильтр

Logik
Offline
Зарегистрирован: 05.08.2014

Говорил. Можна. Но не говорил нужно ;) Надо смотреть сигнал, и если нужно - то да, можна.

ZIA
ZIA аватар
Offline
Зарегистрирован: 04.02.2017

Logik пишет:

Говорил. Можна. Но не говорил нужно ;) Надо смотреть сигнал, и если нужно - то да, можна.

Тут бы с этим разобраться...
В одну и туже переменную и читаем из ацп и выводим после обработки...
Для чего читаем и обрабатываем аж 16 раз???

Если второй фильтр ставим, то надо же в цикл его включать???
Вводить же надо уже обработанное значение? Или я не понимаю что-то

void inmax471() {
   for (int j=1; j <= 16; j++) {
   Data_max471=analogRead(Pin_max471);
   G+=Data_max471-(G>>8);
   Data_max471=G>>8; }
   }                         // END INPUT FILTER
   

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Мне для исследования того, что получаем из аналогового порта удобно было выводить по 16 значений в строке, поэтому там число 16. Второе, чтение данных из аналогового порта (команда в строке 3 занимает 100 микросекунд), то-есть получается весь цикл проходит (ориентировочно) за 1.6 миллисекунды, а прерывание вызываем каждые 5 миллисекунд.

Ориентировочно процессор занимает на обработку данных в цифровом фильтре 30%  своих ресурсов.
С точностью до тактов не считал, надо тогда строки 2,4,5 и команды переходов простичать, в крайнем случае всегда можно увеличить таймер на прерывании, к примеру не 5 миллисекунд, а 7 или 10 поставить

После цифрового фильтра имею колебания в данных +-1 (одна единица) на диапазоне 1023, что для меня приемлемо.
 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

А всё таки показания с датчиков MAX471 и вот такого вольтметра разнятся, последний стабильнее, что за микросхема используется не понять, китайцы затёрли. Нужен стабильный датчик среднего тока до 2А, может кто в курсе, что для ардуины такое есть?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Есть ACS712. Для Ардуино вполне подходит.

Правда, он не "среднего" тока.

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Нашёл на али 5 амперный  

Мне удерживать ток в районе 1 ампера, а у него 185 милливолт на ампер, далее отправляю данные на аналоговый вход, для растяжки использую analogrefrence 1.1 вольта

Буду пробовать, но терзают сомнения, чую придётся прикручивать внешний ацп
Сейчас использую GY-471 на max471

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

ACS712 выдает при отсутствии тока 2.5 Вольта. Как Вы собираетесь измерять их при опорном 1.1 В?

С MAX479 дела не имео, но, похоже, там измеряется напряжение на шунте и датчик не имеет гальванической развязки от измеряемой цепи.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Вот так и выжигают оборудование )))
Сегодня что-то озадачило посмотреть осциллографом на выводе с датчика тока и, чую, ждут меня сюрпризы )))

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Сюрприз! на выходе max471 всякая срань с уровнем ТАДАМ - 50 милливольт, хорошо просматриваются  400 герц и 900 килогерц, как-то так, выходит, всё экранировать и фильтровать ФНЧ с частотой среза ???

Опрос датчика раз в 5 миллисекунд, а ожидалась вторая гармоника - 600 кгц )))

Волшебник
Offline
Зарегистрирован: 22.12.2016

Азы позабыли, при выборке (сэмплировании) нужен антиалайсинг фильтр. А полоса пропускания, зависит от частоты самплинга, а он сам зависит от входной. Как быстро меняется ток на входе, отсюда и расчитывается всё остальное, а не наоборот

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Волшебник пишет:

Азы позабыли, при выборке (сэмплировании) нужен антиалайсинг фильтр. А полоса пропускания, зависит от частоты самплинга, а он сам зависит от входной. Как быстро меняется ток на входе, отсюда и расчитывается всё остальное, а не наоборот

я не мог забыть того чего и не знал )))
"молот мне, так я любого своего перекую" я специалист по железу, радио - это хобби

Я же говорю, реакция - неординарная, кладу на катушку руку, подстраиваю частоту, на резонансе ток 0,8, переношу на участок с пораженной грибками тканью, ток на резонансе 0,96 и это работает не емкостная составляющая понижающая частоту резонанса, явно выраженный эффект есть, он не понятен, понятно только чего надо добиваться (ну или думаю, что понятно)
 

 

Волшебник
Offline
Зарегистрирован: 22.12.2016

Как и у большинства на этом форуме, ардуино - весёлый способ провести время. 

Похоже, что косяк вы допустили ещё до первого поста в топике, когда выбрали не тот датчик тока и не посмотрели чего у него на входе. Никто другой я так понимаю чёрного ящика в глаза не видел, и подсказать не мог

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Волшебник пишет:

Как и у большинства на этом форуме, ардуино - весёлый способ провести время. 

Похоже, что косяк вы допустили ещё до первого поста в топике, когда выбрали не тот датчик тока и не посмотрели чего у него на входе. Никто другой я так понимаю чёрного ящика в глаза не видел, и подсказать не мог

Датчик могу взять любой, есть еще INA219, всё в стадии, эта версия прибора с ручным управление работает, переделать плату проблем нет, в бочке с хлорным железом еще килограмм 50 есть )))
Ардуина будет nano которая, места маловато на большее

ЗЫ комбинированный прибор в приборе фиксирует ток очень даже хорошо, что там за микросхема сказать невозможно, товарищи из поднебесной тщательно затёрли

Волшебник
Offline
Зарегистрирован: 22.12.2016

я понять не могу, генератор на 300+ кгц, контур, и ток - постоянный на генератор мерять? 

А частоту мерять, или фазу на контуре - в резонансе она чётко отслеживается, или на худой конец ток переменный померять никак?

А если холл-датчик, ну или катушку рядом и по магнитному полю?

Просто постоянный ток - это самое бредовое решение какое можно придумать, это как радио приёмник батарейками настраивать

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Значит так! Мерять резонанс по амплитуде на контуре безсмыссленно, так как привязка именно выход на максимальный потребляемый устройством (выходным каскадом) ток при подходе к резонансу снизу по частоте, именно потребляемый ток, катушка выглядит так, представляет из себя последовательный колебательный контур

Регулятор должен выводить частоту так, чтобы быть в этой точке

 

 

Волшебник
Offline
Зарегистрирован: 22.12.2016

На зарядку похожа, для мобилы.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Волшебник пишет:

На зарядку похожа, для мобилы.

Ага, только для человеков, там включение катушки только неординарное )))

вот характеристика тока во всём диапазоне генератора  от 270Кгц до 330Кгц

В реальном применении говорить можно об изменении добротности системы, резко возрастает, растет и ток,  Мишин называет этот эффект - имплазия

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Волшебник пишет:

На зарядку похожа, для мобилы.

Да пожалуй зарядит, катушечка с парой светодиодов индицирует сантиметрах в 15 от катушки )))

Волшебник
Offline
Зарегистрирован: 22.12.2016

Так заработала, или нет? Там правильно советовали, модулировать надо генератор, можно прямоугольниками, и смотреть где больше, туда и сдвигать частоту. На режим если быстрее вывести, то метод отрезка пополам наверно лучше всего, как у АЦП (SAR).

А время реакции какое, то есть полоса пропускания по каналу регулирования - через сколько времени ток меняется после изменения частоты? А то непредвиденая осциляция обеспечена, если регулировать са задержкой

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

работает, но не всегда частота выставляется в самую оптимальную точку
Модулировать низзя - вивисекция вроде как запрещена, да и уходим жеж от работы в точке где появляются многочисленные гармоники, на осциллографе видны вплоть до 20-й, а это уже более 10%
через сколько меняется ток - сразу ))) по крайней мере 5 миллисекунд отслеживается, сейчас каждые 5 миллисекунд вызывается прерывание и делается 16 измерений с АЦП и пропускается через цифровой фильтр, на это тратится 1.6 миллисекунды и принимается решение, подстраивать частоту или нет, критерий падение тока более чем на 10 миллиампер
 

Волшебник
Offline
Зарегистрирован: 22.12.2016

ua6em пишет:

Модулировать низзя - вивисекция вроде как запрещена, да и уходим жеж от работы в точке где появляются многочисленные гармоники, на осциллографе видны вплоть до 20-й, а это уже более 10%

Вивисекция? Что это, фень-шуй?

А гармоники - это хорошо или плохо? Может по ним маркер и ставить?

А без модуляции никак, задача не имеет решения, нельзя найти что-то если запрещено искать.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Волшебник пишет:

ua6em пишет:

Модулировать низзя - вивисекция вроде как запрещена, да и уходим жеж от работы в точке где появляются многочисленные гармоники, на осциллографе видны вплоть до 20-й, а это уже более 10%

Вивисекция? Что это, фень-шуй?

Это опыты на живых людях )))

А гармоники - это хорошо или плохо? Может по ним маркер и ставить?

Не знаю, да и никто не знает, поэтому примем, что плохо

А без модуляции никак, задача не имеет решения, нельзя найти что-то если запрещено искать.

А найти надо, критерий-то есть, при правильно установленной частоте имеем максимум тока  потребления (там диапазон максимума) но критерий правильности настройки - нижняя из частот этого максимума

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

у меня тут идея возникла, запитать прибор ок аккумуляторной батареи, увижу на выходе датчика тока грязь или нет, может всё же по питанию не айс, там сделано не по фэншую это точно, только схему разрабатывал не я )))

Волшебник
Offline
Зарегистрирован: 22.12.2016

В ваших словах нет здравого смысла, установка частоты - изменение - и есть модуляция. Если она запрещена, значит частоту устанавливать низзя.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Волшебник пишет:

В ваших словах нет здравого смысла, установка частоты - изменение - и есть модуляция. Если она запрещена, значит частоту устанавливать низзя.

Логично, периодическая модуляция возможна )))
 

Волшебник
Offline
Зарегистрирован: 22.12.2016

Вот в том же прерывании 5 мсек - 200 Гц периодически - сдвигать частоту, а в следующем такте сравнивать новое значение тока со старым. Если больше ток - двигать в ту же сторону частоту опять, если меньше - то поменять направление. Шаг подстройки потом оптимизировать, в идеале до 1 бита

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

вот как-то не лежит душа на столь высоких частотах управлять этим процессом, в область инфранизких скорее 0,1 гц
из тактильных практик - 1/8 герца хорошая частота

Волшебник
Offline
Зарегистрирован: 22.12.2016

Не правильный подход, частота чем выше - тем лучше. Что обычно должно беспокоить так это величина подстройки - её к минимум сводить надо.

Посмотрите на это в таком аспекте - любая система имеет уровень шума, от природы, и даже если вы ничего не модулируете / не подстраиваете (частоту) она всё равно Меняется, и ничего вы с этим поделать не можете. Она меняется потому что есть шум, всегда и везде. Так вот если шаг подстройки сделать настолько малым, как и уровень шума в системе или сопоставимым с ним, то система и не заметит разницы, а вы по <тихой> её загоните в нужную точку

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

по частоте подстройки - 1 шаг DAC из 4095 и это очень малая величина, это порядка 8-14 герц на шаг

Волшебник
Offline
Зарегистрирован: 22.12.2016

ua6em пишет:

по частоте подстройки - 1 шаг DAC из 4095 и это очень малая величина, это порядка 8-14 герц на шаг

Вот это и хорошо. А АЦП разогнать можно, под 50-60 кГц, и аверейжингом до 18-бит/секунду. Ну или до 13-14 бит /5миллисекунд (чуть лучше чем у ЦАПА) и скорость герц 200 оставить как есть, 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Волшебник пишет:

ua6em пишет:

по частоте подстройки - 1 шаг DAC из 4095 и это очень малая величина, это порядка 8-14 герц на шаг

Вот это и хорошо. А АЦП разогнать можно, под 50-60 кГц, и аверейжингом до 18-бит/секунду. Ну или до 13-14 бит /5миллисекунд (чуть лучше чем у ЦАПА) и скорость герц 200 оставить как есть, 

Это Вы с кем разговариваете )))

У меня неплохой словарный запас, но  пас )))
Посоветуйте, что еще попробовать в качестве датчика тока в районе 1 ампера и на выход DAC интегрирующую цепь какую?

Волшебник
Offline
Зарегистрирован: 22.12.2016

А что именно там не понятно?

Датчик тока -резистор. Интегрир. цепь там как зайцу стоп-сигнал

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Волшебник пишет:

А что именно там не понятно?

Датчик тока -резистор. Интегрир. цепь там как зайцу стоп-сигнал

да так и получалось )))
 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Переделал устройство на работу с датчиком тока INA219, видео как оно работает и структурная схема на сегодня:

1. Задающий - XR2206
2. УМ - TDA7056 (оригинал)
3. Блок управления - arduino nano (ch340)
4. Датчик тока - INA219  (I2C)
5. ЦАП - MCP4725 (I2C)

Добавил:

6. DS3231 - часы
7. OLED дисплей - для отображения даты, времени и параметров ус-ва

INA219 работает в режиме усреднения 16 измерений, цифровой фильтр первого порядка не применяется
Это лучший датчик из мной опробованных

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Выбросил всё оставив только удержание частоты на резонансе контура (режим ИМПЛОЗИЯ в терминологии Мишина), визуально, это подтверждается, чётных гармоник на входе контура нет (пушпуль), нечётные вплоть до пятой, то-есть в диапазоне благоприятных для человека частот =< 1600Кгц.
Краткое резюме: если выбросить весь словесный бред, что он несёт с эрана, но с водой не выплеснуть и ребёнка, это РАБОТАЕТ!!!

Осциллограммка, если присмотреться внимательно, то "ИМПЛОЗИЯ" проявляется в точке перехода через ноль

 

Buldakov
Offline
Зарегистрирован: 17.01.2016

Вот посмотрите простенькую програмку для расчета цифровых фильтров. На выходе дает готовый код либо коэффициенты. Необходимо только поправить переменные для Arduino.

"Ссылка удалена"

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

И на кой ляд эта простенькая программа, спамим?

Buldakov
Offline
Зарегистрирован: 17.01.2016

Тут писали, что получилось сделать цифровой фильтр первого порядка. А для более сложного порядка нужно что то непонятное считать. Так вот эта программа это и считает. Выбираем тип фильтра, задаем полосу затухания и биения и порядок фильтра - и получаем готовый код. Ваше дело использовать это или нет. Если не хотите в принципе фильтр до 8 порядка считается на Arduino очень просто. Собака здесь зарыта совсем в другом. Например для звукового диапазона фильтр первого порядка режет все частоты выше определенной частоты со спадом 6 дб на октаву. А вот цифровой фильтр делает то же самое, только возникают фазовые сдвиги. (как и в аналоговом фильтре) . Вот с ними то и придется вам бороться. И высшая математика вам здесь не поможет. Не хотите использовать готовое - изучайте сами. Просто чем больше будите разбираться - тем больше вопросов будет возникать. А по поводу учебников по математике - у вас какого года выпуска учебник? Так вот те фильтры, которые вам нужны появились как вид всего около 10 лет назад. А учебник по математике года 2000 выпуска скажет вам, что они в принципе невозможны.

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Buldakov пишет:

Так вот те фильтры, которые вам нужны появились как вид всего около 10 лет назад. А учебник по математике года 2000 выпуска скажет вам, что они в принципе невозможны.

А можно где-нибудь почитать об этих ФКВН-фильтрах?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Я отказался о цифрового фильтра в обработке, так как перешёл на другую микросхему - INA219!
В этой микросхеме уже реализована математика усреднения показаний, код применения оной:
 

 monitor.begin(64); // i2c address 64=0x40
 // monitor.configure(0, 2, 10, 10, 7); // 4S -2.13ms
 // monitor.configure(0, 2, 11, 11, 7); // 8S -4.26ms
  monitor.configure(0, 2, 12, 12, 7); // 16S -8.51ms
 // monitor.configure(0, 2, 13, 13, 7); // 32S -17.02ms
 // monitor.configure(0, 2, 14, 14, 7); // 64S -34.05ms
 // monitor.configure(0, 2, 15, 15, 7);  // 128S - 68.10ms
 // monitor.configure(0, 2, 8, 8, 7);
                           // range, gain, bus_adc, shunt_adc, mode
                           // range = 1 (0-32V bus voltage range)
                           // gain = 3 (1/8 gain - 320mV range)
                           // bus adc = 3 (12-bit, single sample, 532uS conversion time)
                           // shunt adc = 3 (12-bit, single sample, 532uS conversion time)
                           // mode = 7 (continuous conversion)
   monitor.calibrate(0.100, 0.32, 16, 3.2); 
                           // R_шунта, напряж_шунта, макcнапряж, максток
                           

 

Logik
Offline
Зарегистрирован: 05.08.2014

andriano пишет:

Buldakov пишет:

Так вот те фильтры, которые вам нужны появились как вид всего около 10 лет назад. А учебник по математике года 2000 выпуска скажет вам, что они в принципе невозможны.

А можно где-нибудь почитать об этих ФКВН-фильтрах?

)))) Оба жгете! Даже не знаю кто больше )))

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Logik пишет:

andriano пишет:

Buldakov пишет:

Так вот те фильтры, которые вам нужны появились как вид всего около 10 лет назад. А учебник по математике года 2000 выпуска скажет вам, что они в принципе невозможны.

А можно где-нибудь почитать об этих ФКВН-фильтрах?

)))) Оба жгете! Даже не знаю кто больше )))

а отсутствие познаний в этой области защищает психику )))
имею сведения, что самые передовые наработки в этой области применяются в технике SDR  и,
это очень сложные алгоритмы...не замахиваюсь даже просто почитать

Buldakov
Offline
Зарегистрирован: 17.01.2016

А по поводу того, что не все чему вас учили правда- подумайте на досуге над глупыми вопросами:

Почему при нагревании гири масса гири уменьшается? Или например как зависит время от высоты над уровнем моря? Или помните например плащ невидимку из Поттера. Оказывается и под это уже теорию подвели. Ха.Ха.Ха.

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

Ну для начала простенькая статейка в общем виде с примерами кода.

http://www.rasmas.info/archive.phtml?d=9&did=855&m=9&y=2004

Здесь (кто не верит первой статье) приведен исходник со списком литературы. Правда на английском.

https://www.math.ucdavis.edu/~saito/data/sonar/boashash2.pdf

Здесь уже математика в голом виде, но по русски (мне например совсем ничего непонятно из этого, не знаю как вам, Без бутылки точно не разберещься)

http://vspu2014.ipu.ru/proceedings/prcdngs/2855.pdf

Ну и последняя система - Фильтр Калмана. на русском - но теория.

http://www.machinelearning.ru/wiki/images/3/3f/LDS.pdf

 

Logik
Offline
Зарегистрирован: 05.08.2014

Buldakov пишет:

подумайте на досуге над глупыми вопросами:

Подумал.

Buldakov пишет:

Почему при нагревании гири масса гири уменьшается? 

Голословное ложное утверждение противоречащее существующей научной картине мира. Законы сохранени в том числе и массы мракобесу понятно нипочем. У Вас своя реальность. Ну и ладно.

Buldakov пишет:

Или например как зависит время от высоты над уровнем моря? 

ОТО отлично описывает гравитационное замедление. Чего Вы встрепенулись то по этому поводу?

Buldakov пишет:

 Или помните например плащ невидимку из Поттера. 

Не, не помню. А что, вы его уже сделали?

По ссылкам Кальманы штука хорошая, а причем они ктеме? Вы сюда будете тащить все что найдет гугл со словом фильтр ;)

ПС. Цифровые фильтры стары как говно мамонта. Просто до конца 90-х они не были так популярны т.к. производительности процессоров не хватало для их реализации в аудиодиапазоне. На рассыпухе их делали, но дорого. Потому применялись только там где следует;) А ссылки на всю эту биржевую фигню лучше повытирайте сами, а отлично еще помню восторги в захлеб от нейросетей на бирже, и здесь результат будет такой же. Но лохи как всегда поведутся на прогресс и заплатят))

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Нейросети - это к Павлу Свиридову, он в своих роликах даже сказал, при каких условиях его программа начинает нести пургу )))

Да, кстати, чип цифрового фильтра 80-х у меня где-то валяется, такая загогулина с полсотней ног и размером 80  на 80 мм, естественно в керамике и металле, радиацию надо держать )))
 

Buldakov
Offline
Зарегистрирован: 17.01.2016

Ссылку удалил поскольку никому это похоже не надо, а шума много. А по поводу ФКВН это как раз по теме относящейся к работе "черного ящика". Где внутреннее устройство и механизм работы устройства очень сложны, неизвестны или неважны в рамках данной задачи. см Википедию.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Buldakov пишет:

Ссылку удалил поскольку никому это похоже не надо, а шума много. А по поводу ФКВН это как раз по теме относящейся к работе "черного ящика". Где внутреннее устройство и механизм работы устройства очень сложны, неизвестны или неважны в рамках данной задачи. см Википедию.

дело не в ссылках, к примеру я точно алгоритм на ардуино не переложу, нужны примеры готовых алгоритмов
в отношении неважны, неверно, важны!
Простыми методами удалось добиться того, что показано на осциллограмме
В этом устройстве важна грань не перекомпенсировать иначе дезут гармоники высшего порядка, три единицы для DAC уже много, поиск методом максимального тока подошёл к своему пределу, дальше нужны уже другие методы поиска и подстройки резонанса, настройка - генератор на основе DDS а вот по поиску мыслей нет и, невольный вопрос, а нужно ли еще точнее???

Buldakov
Offline
Зарегистрирован: 17.01.2016

Вот пример алгоритма для Arduino.

Здесь сигнал фильтруется от переменной Fast_time до значения переменной Slow_time. Для входного массива Output из 700 чисел. Чем быстрее меняется сигнал, тем меньше постоянная времени цифрового фильтра. Ну это одно из самых простых решение. Естественно никакие задержки сдесь не убираются.

На выходе получаем только одно последнее сглаженное значение (переменная i). Если надо не только последнее значение , но и предыдущие значения делаем расчет для всех i аналогично i=0.

int Fast_time                  =   200; //Количество точек фильтра для быстрой АМА  
int Slow_time                  =   698; //Количество точек фильтра для медленной АМА
//---Условия заполнения массива данными---------------------------------------------
for (i = (700-2); i >= 0; i = i - 1) {Output[i+1]=Output[i];}                       
Output[0]=U_out;                                                                    
//---Само усреднение----------------------------------------------------------------
i=0;                                                                                
signal= abs(Output[i]-Output[i+Slow_time]);                                         
noise=0.0;                                                                          
for(j=Slow_time; j>=0; j=j-1)                                                       
{noise=noise+abs(Output[i+j]-Output[i+j+1]);}                                       
if (noise!=0) ER=(signal/noise); else ER=0.0;                                       
fastSC=(2.0/(Fast_time+1.0));                                                       
slowSC=(2.0/(Slow_time+1.0));                                                       
SSC=ER*(fastSC-slowSC)+slowSC;                                                      
AMA = AMA_1+(SSC*(Output[i]-AMA_1));                                                
AMA_1=AMA;