| Электроника - это просто Теоретические и практические вопросы для начинающих электронщиков. |
Подскажите где глянуть кусок кода на Си.
18.07.2018, 16:57
|
|
|
Прописка
Регистрация: 17.08.2013
Сообщений: 282
Сказал спасибо: 10
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Подскажите где глянуть кусок кода на Си.
Фи́льтр Ка́лмана — эффективный рекурсивный фильтр, оценивающий вектор состояния динамической системы, используя ряд неполных и зашумленных измерений. Назван в честь Рудольфа Калмана.
Фильтр Калмана широко используется в инженерных и эконометрических приложениях: от радаров и систем технического зрения до оценок параметров макроэкономических моделей[1][2]. Калмановская фильтрация является важной частью теории управления, играет большую роль в создании систем управления. Совместно с линейно-квадратичным регулятором фильтр Калмана позволяет решить задачу линейно-квадратичного гауссовского управления. Фильтр Калмана и линейно-квадратичный регулятор — возможное решение большинства фундаментальных задач в теории управления.
В большинстве приложений размерность вектора состояния объекта превосходит размерность вектора данных наблюдения. И при этом фильтр Калмана позволяет оценивать полное внутреннее состояние объекта.
Наверное крутая штука, обязательно попробую разобраться.
|
|
|
|
18.07.2018, 18:57
|
|
|
Прописка
Регистрация: 17.08.2013
Сообщений: 282
Сказал спасибо: 10
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Подскажите где глянуть кусок кода на Си.
Взял отсюда
http://www-users.cs.york.ac.uk/~fish...-bin/mkfscript
этот код:
/* Digital filter designed by mkfilter/mkshape/gencode A.J. Fisher
Command line: /www/usr/fisher/helpers/mkfilter -Bu -Lp -o 3 -a 1.0000000000e-01 0.0000000000e+00 -l */
#define NZEROS 3
#define NPOLES 3
#define GAIN 5.525187588e+01
static float xv[NZEROS+1], yv[NPOLES+1];
static void filterloop()
{ for (; 
{ xv[0] = xv[1]; xv[1] = xv[2]; xv[2] = xv[3];
xv[3] = next input value / GAIN;
yv[0] = yv[1]; yv[1] = yv[2]; yv[2] = yv[3];
yv[3] = (xv[0] + xv[3]) + 3 * (xv[1] + xv[2])
+ ( 0.2780599176 * yv[0]) + ( -1.1828932620 * yv[1])
+ ( 1.7600418803 * yv[2]);
next output value = yv[3];
}
}
Вставил его в цикл непрерывного измерения АЦП.
Дает постоянное смещение. Например на вход АЦП реально подаю 1.000022 В.
На дисплее показывает 1.000726 В.
Это потому что ничего не откалибровано. 
Разброс показаний при этом плюс минус 15 мкВ. ( Шумит)
Это с накоплением 32 разряда (т.е. вычисление среднеарифм. по 32 реализ.)
А после подключения фильтра индикатор стал показывать 1.094313 В.
Разброс около 3-5 мкв.
Фильтр работает. Но вносит сдвиг в показаниях существенный - не знаю получится это скомпенсировать или нет?
Последний раз редактировалось optical illusion; 18.07.2018 в 19:18.
|
|
|
|
18.07.2018, 20:00
|
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО/МО
Сообщений: 12,276
Сказал спасибо: 11,858
Сказали Спасибо 4,158 раз(а) в 3,176 сообщении(ях)
|
Re: Подскажите где глянуть кусок кода на Си.
Итого имеем попытку последовательность отсчетов ADC избавить от некоторой суммы погрешностей? А попробовать на втором ADC измерять на длинной дорожке на некотором сопротивлении из той же партии напряжение Vref, аналогично напряжение питания, короткозамкнутую дорожку, висящую в воздухе или через сопротивление дорожку,…
По совокупности отсчетов вводить коррекцию, а потом уже фильтрами с откорректированным входным сигналом разбираться.
Пока нет никакого понимания о вкладе разных участников во входной цепи в наблюдаемое поведение.
Для этого желательно таки с исходным сигналом до фильтрации разобраться…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
|
18.07.2018, 20:29
|
|
|
Прописка
Регистрация: 17.08.2013
Сообщений: 282
Сказал спасибо: 10
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Подскажите где глянуть кусок кода на Си.
Сообщение от mike-y-k
|
|
Для этого желательно таки с исходным сигналом до фильтрации разобраться…
|
На входе АЦП сигнал хороший. Вольтметр с отключенными фильтрами показывает флюктуации 1-2 мкВ.
Vref тоже шумит вряд ли больше этого.
После измерений, уже когда сигнал оцифрован - там появляется разброс основной.
В самом чипе до АЦП еще стоит цифровой фильтр для подавления наводки сети - 50\60 Гц. Он тоже сигнал фильтрует.
НО, паспортные данные АЦП не лучше 200 мкВ заявлены, для 1 В входного напряжения. Так то 15 мкВ - это норм.
По всякому получается, что бы уменьшить шум, это только фильтровать цифровую последовательность на выходе.
|
|
|
|
18.07.2018, 21:08
|
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО/МО
Сообщений: 12,276
Сказал спасибо: 11,858
Сказали Спасибо 4,158 раз(а) в 3,176 сообщении(ях)
|
Re: Подскажите где глянуть кусок кода на Си.
Таки может изначально долбится корректных отсчетов на ADC, решить вопрос с получением поправок для коррекции показаний от внешних факторов,…
А потом уже заниматься фильтрацией…
Сейчас пока идёт попытка из чего-то неопределенного получить истинное значение.
Даже чисто математически это не даст требуемого результата.
Сейчас в отсчетах есть сумма из трёх величин - реального значения, ошибки измерения и помехи. Из-за неопределенности первых двух результат фильтрации и выдаёт что-то непонятное на выходе. Если величина ошибки ещё и плавает, то неопределенность результата только растёт…
И в самом алгоритме неплохо бы увеличить глубину выборки для обработки…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
|
19.07.2018, 09:24
|
|
|
Прописка
Регистрация: 17.08.2013
Сообщений: 282
Сказал спасибо: 10
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Подскажите где глянуть кусок кода на Си.
Сообщение от mike-y-k
|
|
А потом уже заниматься фильтрацией…
|
А какие внешние факторы? Только шум. АЦП тоже шумит, кстати, там же проц шлепает, коммутатор переключает, дельта-сигма заряжает конденсатор и т.д.
Уменьшать шум в железе - это на два порядка сложнее чем в программах.
Вон я тут скачал кусок кода с интернета, вставил и оно работает. Даже это бы решило проблему, если бы не масштабирование сигнала. Поэтому нужен вейвлет, что бы узреть - будет ли масштабирование в результате фильтрации или нет. Если его не будет, то большего и не нужно в моем случае. Это бы решило проблему...
|
|
|
|
19.07.2018, 10:19
|
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО/МО
Сообщений: 12,276
Сказал спасибо: 11,858
Сказали Спасибо 4,158 раз(а) в 3,176 сообщении(ях)
|
Re: Подскажите где глянуть кусок кода на Си.
optical illusion, в данном случае железо и есть внешний фактор к программе…
Для начала разобраться с шумами самого преобразования на замкнутом входе, использовать дополнительный канал для получения адекватной информации о шумах, артефактах,…
И потом уже фильтровать откорректированное значение.
PS Можно ещё тут посмотреть на код
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
|
19.07.2018, 11:24
|
|
|
Прописка
Регистрация: 17.08.2013
Сообщений: 282
Сказал спасибо: 10
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Подскажите где глянуть кусок кода на Си.
Последний раз редактировалось optical illusion; 19.07.2018 в 14:30.
|
|
|
|
Сказали "Спасибо" optical illusion
|
|
|
19.07.2018, 16:14
|
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО/МО
Сообщений: 12,276
Сказал спасибо: 11,858
Сказали Спасибо 4,158 раз(а) в 3,176 сообщении(ях)
|
Re: Подскажите где глянуть кусок кода на Си.
optical illusion, известный ресурс, но несколько не wavelets…
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
|
19.07.2018, 18:37
|
|
|
Прописка
Регистрация: 17.08.2013
Сообщений: 282
Сказал спасибо: 10
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Подскажите где глянуть кусок кода на Си.
Сообщение от mike-y-k
|
|
Для начала разобраться с шумами самого преобразования на замкнутом входе,
|
Замыкание входа это, как говорится, "по определению" сделано. Когда замкнут вход АЦП, на выходе пару десятков микровольт (стабильно) - шуметь нечему.
Напряжение 1 В взято путем деления Vref. И оно измеряется внешним качественным вольтметром.
Этот сигнал тоже не шумит (раз в 5 секунд на 1 мкВ меняется туда-сюда). Его подаю на вход АЦП.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:21.
|
|