Fedor78 0 14 марта, 2006 Опубликовано 14 марта, 2006 · Жалоба Доброго времени суток. Измерительный канал: Датчик, предварительный усилитель, мультиплексор АЦП 12 разрядный, микроконтроллер 51 серии. Сигнал, приходящий на АЦП, медленно меняющееся напряжение 0 – 5 В. Сигнал зашумлен. Размах шумовой составляющей 5 – 10 мВ. Во время работы устройства по сигналу иногда проходят пики «шилья» амплитудой до 50 мВ частотой около 400 Гц. В цикле измерения напряжения накапливается среднее арифметическое по 255 значениям. После осреднения получаем разброс с кодовым расстоянием от 2 до 15. Допустимо не более 2. Понятно, что нужно чистить сигнал на входе АЦП и работы в этом направлении ведутся, однако хотелось бы попробовать справиться с проблемой средствами контроллера. Посему вопрос. Не подскажет ли кто приблизительный алгоритм, по которому можно было бы отфильтровать сигнал. Во времени обработки я практически не ограничен, но достаточно серьезно ограничен в памяти. Максимум, который можно выделить на эту задачу 64 байта. PS: Сорри, если на форуме уже обсуждалось. Я не нашел. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleks17 0 14 марта, 2006 Опубликовано 14 марта, 2006 · Жалоба Надо фильтр НЧ городить. Т.к. памяти мало лучше каскадное включение нескольких фильтров. Какова частота преобразования ? Какова полоса полезного сигнала ? Имейте в виду, что размер буфера должен соответствовать времени накопления в несколько раз превышающем периоду помехи иначе нормально отфильтровать не удастся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Fedor78 0 14 марта, 2006 Опубликовано 14 марта, 2006 · Жалоба Сигнал напряжение постоянного тока. Если я правильно понимаю полосы у него нет :) Фактическое время выборки кодов из АЦП около 5 мкс. Вопросы установки пассивных или активных фильтров перед АЦП я бы сейчас не обсуждал. На самом деле хочется обойтись статистическими методами. Так как сигнал резко не может измениться по определению, есть мысли отбрасывать промахи. Вот сейчас изучаю соответствующие книжки. Однако очень не охота изобрести велосипед. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 14 марта, 2006 Опубликовано 14 марта, 2006 · Жалоба Полоса есть у любого сигнала, так что назовите рамки частот. Я так понимаю, что сгодится самый простой цифровой ФНЧ чуть ли не первого порядка. Но с таким же успехом можно поставить на входе АЦП и RC-цепь. Поскольку решение простое, найти его реализацию можно в любом учебнике по цифровой обработке, в том числе, думаю, и в интернете полно. Памяти много цифровой фильтр не скушает, если он будет рекурсивным. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Aleks17 0 14 марта, 2006 Опубликовано 14 марта, 2006 · Жалоба 2Fedor78: так я про цифровой фильтр говорю (то что вы называете статистическими методами). Зачем такая большая частота квантования для сигнала частоты 0 Гц (интересная полоса :-)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DS 0 14 марта, 2006 Опубликовано 14 марта, 2006 · Жалоба Спраситься с шумом без фильтра на входе АЦП будет очень сложно (из - за теоремы Котельникова). Надо хотябы простой RC фильтр поставить на входе, уровень -3Дб которого приходится на половинную частоту оцифровки (если Вы цифруете с большим запасом по скорости, как я понял это так). Программно легче всего организовать скажем 20 разрядный аккумулятор в памяти. После каждого измерения вычитать сдвинутое вправо на 8 разрядов его же значение и прибавлять результат измерения. Получится классический БИХ фильтр первого порядка с постоянной времени 256 измерений. Памяти он не сожрет почти ничего. Его постоянная времени легко меняется на любые 2 в N циклов измерений. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Виктория 0 14 марта, 2006 Опубликовано 14 марта, 2006 (изменено) · Жалоба Так как сигнал резко не может измениться по определению, есть мысли отбрасывать промахи. Вот сейчас изучаю соответствующие книжки. Однако очень не охота изобрести велосипед Я думаю, совсем простая робастная фильтрация Вас точно спасет (я бы даже не называла это так сложно). 1. Выборка 10 отсчетов 2. Max/min значение отбрасываем (или только max) 3. Находим среднее из остальных 8 отсчетов. Размер выборки можно и еще уменьшить. По Вашим данным разброс почти только из-за "шильев" (а так был бы 2-4 единицы кода) Изменено 14 марта, 2006 пользователем Vic1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bav 0 14 марта, 2006 Опубликовано 14 марта, 2006 · Жалоба можно построить фильтр так - Вы знаете максимальную скорость нарастания сигнала - max_du: 1. вычисляем разницу между предыдущей и текущей выборками(du=u_in-u_old) 2. если разность больше, приравниваем ее максимально допустимой(if(du>max_du) du=max_du;else if(du<-max_du) du=-max_du) 3. выходной сигнал равен сумме предыдущего отсчета и откорректированной разнице(u_out=u_old+du) 4. запоминаем выходное значение как предыдущую выборку(u_old=u_out) перед запуском процедуры в цикле, желательно занести в u_old примерное значение вх сигнала(среднее, можно просуммировать пару сотен выборок и разделить на количество их же) можно влепить последовательно несколько БИХ фильтров первого порядка можно сделать скользящее среднее А вообще, помеха идет от источника сигнала или формируется где-то рядом? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=AK= 10 14 марта, 2006 Опубликовано 14 марта, 2006 (изменено) · Жалоба Так как сигнал резко не может измениться по определению, есть мысли отбрасывать промахи. А что, это хорошая мысль. В начальном режиме можно просто накапливать усредненное значение. Например, накопить 256 отсчетов, как и раньше. После этого можно начать отбрасывать все значения, которые отличаются от усредненного более чем на 15 отсчетов в каждую сторону. "Прошедшие" значения с малым весовым коэффициентом усредняются с уже имеющимся средним. Затем можно постепенно уменьшать "порог нечувствительности" с 15 отсчетов до 2-3. Правда, я подозреваю, что даже ничего не отбрасывая, можно добиться нормального результата, если весовой коэфф. выбрать достаточно малым. Например, имеющееся среднее значение умножается на 9999, к результату добавляется новое измеренное значение, и затем все делится на 10000 (понятно, что среднее значение само по себе должно храниться с приличной разрядностью, т.к. соотношение его разрядности и величины весового коэфф. само создает "зону нечувствительности" для малых изменений) Изменено 14 марта, 2006 пользователем =AK= Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Fedor78 0 14 марта, 2006 Опубликовано 14 марта, 2006 · Жалоба 2Alex17 IMHO Цифровой фильтр и статистическая обработка результата измерений разные вещи. О частоте квантования я не задумывался. Хотя не вижу особой разницы буду я измерять раз в секунду или раз в 10 микросекунд. Если быть совсем точным, я с указанной частотой квантования снимаю 255 значений, одновременно накапливая среднее арифметическое, потом переключаюсь на другие каналы. Там чистые сигналы, да и требования к точности ниже. Потом расчеты. Пустой цикл около секунды. 2DS_ На самом деле RC, непосредственно перед АЦП и перед мультиплексором по каждому каналу, стоят. RC - цепь перед АЦП ставилась исходя из рекомендаций для 1108ПВ2. С учетом сказанного вами, проверю и пересчитаю цепочки. За предложенный алгоритм - спасибо. Сейчас попробую. 2Vic1 Согласен именно из за "шильев". По сути, предложенный вами алгоритм я и собираюсь реализовать, но отбрасывать не минимальные и максимальные значения, а все что более интервала в 3 среднеквадратичных отклонения. Минус этого алгоритма - надо хранить всю выборку, а это память. 2Bay Спасибо. Мысль такая витала, но не оформилась. Попробую. "Шилья" точно формируются рядом. Источник - ключевая система регулятора расхода, который питается напряжениями вместе с аналоговым трактом. Это неправильно, но и быстро не исправишь :( 2 =AK= Подозреваю что когда Bay говорил о скользящем среднем что то подобное и имелось ввиду. Надо попробовать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 14 марта, 2006 Опубликовано 14 марта, 2006 · Жалоба 2Bay Спасибо. Мысль такая витала, но не оформилась. Попробую. "Шилья" точно формируются рядом. Источник - ключевая система регулятора расхода, который питается напряжениями вместе с аналоговым трактом. Это неправильно, но и быстро не исправишь :( А моменты переключения регулятора расхода известны? Может связать их с контроллером и в эти моменты не измерять? Или наоборот, в моменты измерений блокировать переключения регулятора расхода? Тогда аналоговое напряжение будет более стабильным и, следовательно, все измерения будут точнее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Fedor78 0 15 марта, 2006 Опубликовано 15 марта, 2006 · Жалоба Регулятор расхода упрощенно: датчик расхода, диф усилитель, ШИМ, транзисторный ключ. Определить моменты переключения не проблема. Не измерять в этот момент тоже идея хорошая. Но IMHO это латание дыр и усложнение без того не очень простой схемы существующего прибора. Уж если лезть в «железо» лучше исправлять причину, а не следствие. Собственно это основной путь переработки. Устранение влияния помех средством контролера меня в первую очередь интересует потому, что если я получу приемлемый результат на грязном сигнале, то на нормальном тем более будет все хорошо, плюс получу некоторый запас прочности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 15 марта, 2006 Опубликовано 15 марта, 2006 · Жалоба Регулятор расхода упрощенно: датчик расхода, диф усилитель, ШИМ, транзисторный ключ. Определить моменты переключения не проблема. Не измерять в этот момент тоже идея хорошая. Но IMHO это латание дыр и усложнение без того не очень простой схемы существующего прибора. Уж если лезть в «железо» лучше исправлять причину, а не следствие. Собственно это основной путь переработки. Устранение влияния помех средством контролера меня в первую очередь интересует потому, что если я получу приемлемый результат на грязном сигнале, то на нормальном тем более будет все хорошо, плюс получу некоторый запас прочности. Вы правильно поняли, то что я Вам написал, но трактуете неправильно. Сначала надо УСТРАНИТЬ причину возникновения помехи, а потом, если это не получится пытаться ее замазывать. Потому что помеха НЕ нормирована. На одной плате она будет одного уровня, на другой - другого. А где гарантия, что на любом серийном изделии это замазывание будет работать? Вот если хотите пример: у меня на сайте в разделе "записки инженера", Эпизод называется "мультивибратор длиной в две стойки". Если хотите получить тоже - флаг Вам в ... Но я так уже давно не работаю. Удачи! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 15 марта, 2006 Опубликовано 15 марта, 2006 · Жалоба Добавлю небольшое примечание: описанные ранее алгоритмы с отбрасыванием выделяющихся значений называются "ранговые алгоритмы цифровой фильтрации" Спраситься с шумом без фильтра на входе АЦП будет очень сложно (из - за теоремы Котельникова). Надо хотябы простой RC фильтр поставить на входе, уровень -3Дб которого приходится на половинную частоту оцифровки (если Вы цифруете с большим запасом по скорости, как я понял это так).Если есть большой запас, то при применении ФНЧ первого порядка, лучше всё-таки его верхнюю граничную частоту существенно понизить относительно того, что вы написали. Т.к. крутизна характеристики ФНЧ первого порядка при указанной граничной частоте не позволит избавиться от (не знаю, как этот термин будет по-русски) "aliasing". Автору: цифровая фильтрация и статистическая обработка - не всегда разные вещи. Просто цифровая фильтрация в частном случае является средством (инструментом) статистической обработки. Простейший пример: матожидание - статистическая обработка, цифровой фильтр - реализация обработки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DS 0 15 марта, 2006 Опубликовано 15 марта, 2006 (изменено) · Жалоба Так я же и написал "хотя бы". Конечно, чем лучше задавишь входную частотку, тем меньше aliasing (по нашему, это, по моему, "перенос спектров" чего - то там, по английски проще писать и понятнее). Но с RC цепочками на очень низкие частоты обычно другие проблемы начинаются. Я в таких случаях обычно ставлю фильтр второго порядка на операционнике (а ОУ почти всегда есть у входа АЦП) и режу частоту примерно до 0.1 - 0.2 от частоты дискретизации. Да и АЦП для таких целей ставят дельта-сигма, тогда выбросы намного меньше сказываются. Но человек, видимо задавлен какими-то ограничениями у военных - я уже про существование таких АЦП, как ПВ2 забыл давно, думал что кануло, а вот оказывается еще на них работает кто-то. Это же сам по себе глючной агрегат (был по крайней мере) Изменено 15 марта, 2006 пользователем DS_ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться