Перейти к содержанию
    

Обработка результатов аналого-цифрового пребразования.

Доброго времени суток.

 

Измерительный канал: Датчик, предварительный усилитель, мультиплексор АЦП 12 разрядный, микроконтроллер 51 серии.

Сигнал, приходящий на АЦП, медленно меняющееся напряжение 0 – 5 В. Сигнал зашумлен. Размах шумовой составляющей 5 – 10 мВ. Во время работы устройства по сигналу иногда проходят пики «шилья» амплитудой до 50 мВ частотой около 400 Гц.

В цикле измерения напряжения накапливается среднее арифметическое по 255 значениям. После осреднения получаем разброс с кодовым расстоянием от 2 до 15. Допустимо не более 2. Понятно, что нужно чистить сигнал на входе АЦП и работы в этом направлении ведутся, однако хотелось бы попробовать справиться с проблемой средствами контроллера. Посему вопрос. Не подскажет ли кто приблизительный алгоритм, по которому можно было бы отфильтровать сигнал.

Во времени обработки я практически не ограничен, но достаточно серьезно ограничен в памяти. Максимум, который можно выделить на эту задачу 64 байта.

 

PS: Сорри, если на форуме уже обсуждалось. Я не нашел.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Надо фильтр НЧ городить. Т.к. памяти мало лучше каскадное включение нескольких фильтров.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сигнал напряжение постоянного тока. Если я правильно понимаю полосы у него нет :)

Фактическое время выборки кодов из АЦП около 5 мкс.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Полоса есть у любого сигнала, так что назовите рамки частот.

Я так понимаю, что сгодится самый простой цифровой ФНЧ чуть ли не первого порядка. Но с таким же успехом можно поставить на входе АЦП и RC-цепь. Поскольку решение простое, найти его реализацию можно в любом учебнике по цифровой обработке, в том числе, думаю, и в интернете полно. Памяти много цифровой фильтр не скушает, если он будет рекурсивным.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2Fedor78:

 

так я про цифровой фильтр говорю (то что вы называете статистическими методами).

 

Зачем такая большая частота квантования для сигнала частоты 0 Гц (интересная полоса :-))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спраситься с шумом без фильтра на входе АЦП будет очень сложно (из - за теоремы Котельникова). Надо хотябы простой RC фильтр поставить на входе, уровень -3Дб которого приходится на половинную частоту

оцифровки (если Вы цифруете с большим запасом по скорости, как я понял это так).

Программно легче всего организовать скажем 20 разрядный аккумулятор в памяти. После каждого измерения вычитать сдвинутое вправо на 8 разрядов его же значение и прибавлять результат измерения. Получится классический БИХ фильтр первого порядка с постоянной времени 256 измерений. Памяти он не сожрет почти ничего. Его постоянная времени легко меняется на любые 2 в N циклов измерений.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

1. Выборка 10 отсчетов

2. Max/min значение отбрасываем (или только max)

3. Находим среднее из остальных 8 отсчетов.

 

Размер выборки можно и еще уменьшить.

 

По Вашим данным разброс почти только из-за "шильев" (а так был бы 2-4 единицы кода)

Изменено пользователем Vic1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

можно построить фильтр так - Вы знаете максимальную скорость нарастания сигнала - 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 примерное значение вх сигнала(среднее, можно просуммировать пару сотен выборок и разделить на количество их же)

 

можно влепить последовательно несколько БИХ фильтров первого порядка

можно сделать скользящее среднее

 

А вообще, помеха идет от источника сигнала или формируется где-то рядом?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так как сигнал резко не может измениться по определению, есть мысли отбрасывать промахи.

А что, это хорошая мысль.

 

В начальном режиме можно просто накапливать усредненное значение. Например, накопить 256 отсчетов, как и раньше.

 

После этого можно начать отбрасывать все значения, которые отличаются от усредненного более чем на 15 отсчетов в каждую сторону. "Прошедшие" значения с малым весовым коэффициентом усредняются с уже имеющимся средним.

 

Затем можно постепенно уменьшать "порог нечувствительности" с 15 отсчетов до 2-3.

 

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

Изменено пользователем =AK=

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2Alex17

IMHO Цифровой фильтр и статистическая обработка результата измерений разные вещи.

О частоте квантования я не задумывался. Хотя не вижу особой разницы буду я измерять раз в секунду или раз в 10 микросекунд. Если быть совсем точным, я с указанной частотой квантования снимаю 255 значений, одновременно накапливая среднее арифметическое, потом переключаюсь на другие каналы. Там чистые сигналы, да и требования к точности ниже. Потом расчеты. Пустой цикл около секунды.

 

2DS_

На самом деле RC, непосредственно перед АЦП и перед мультиплексором по каждому каналу, стоят. RC - цепь перед АЦП ставилась исходя из рекомендаций для 1108ПВ2. С учетом сказанного вами, проверю и пересчитаю цепочки. За предложенный алгоритм - спасибо. Сейчас попробую.

 

2Vic1 Согласен именно из за "шильев".

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

 

2Bay Спасибо. Мысль такая витала, но не оформилась. Попробую.

"Шилья" точно формируются рядом. Источник - ключевая система регулятора расхода, который питается напряжениями вместе с аналоговым трактом. Это неправильно, но и быстро не исправишь :(

 

 

2 =AK= Подозреваю что когда Bay говорил о скользящем среднем что то подобное и имелось ввиду. Надо попробовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2Bay Спасибо. Мысль такая витала, но не оформилась. Попробую.

"Шилья" точно формируются рядом. Источник - ключевая система регулятора расхода, который питается напряжениями вместе с аналоговым трактом. Это неправильно, но и быстро не исправишь :(

 

А моменты переключения регулятора расхода известны? Может связать их с контроллером и в эти моменты не измерять? Или наоборот, в моменты измерений блокировать переключения регулятора расхода?

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Регулятор расхода упрощенно: датчик расхода, диф усилитель, ШИМ, транзисторный ключ. Определить моменты переключения не проблема. Не измерять в этот момент тоже идея хорошая. Но

IMHO это латание дыр и усложнение без того не очень простой схемы существующего прибора. Уж если лезть в «железо» лучше исправлять причину, а не следствие. Собственно это основной путь переработки. Устранение влияния помех средством контролера меня в первую очередь интересует потому, что если я получу приемлемый результат на грязном сигнале, то на нормальном тем более будет все хорошо, плюс получу некоторый запас прочности.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Регулятор расхода упрощенно: датчик расхода, диф усилитель, ШИМ, транзисторный ключ. Определить моменты переключения не проблема. Не измерять в этот момент тоже идея хорошая. Но

IMHO это латание дыр и усложнение без того не очень простой схемы существующего прибора. Уж если лезть в «железо» лучше исправлять причину, а не следствие. Собственно это основной путь переработки. Устранение влияния помех средством контролера меня в первую очередь интересует потому, что если я получу приемлемый результат на грязном сигнале, то на нормальном тем более будет все хорошо, плюс получу некоторый запас прочности.

 

Вы правильно поняли, то что я Вам написал, но трактуете неправильно. Сначала надо УСТРАНИТЬ причину возникновения помехи, а потом, если это не получится пытаться ее замазывать. Потому что помеха НЕ нормирована. На одной плате она будет одного уровня, на другой - другого. А где гарантия, что на любом серийном изделии это замазывание будет работать?

Вот если хотите пример: у меня на сайте в разделе "записки инженера", Эпизод называется "мультивибратор длиной в две стойки". Если хотите получить тоже - флаг Вам в ... Но я так уже давно не работаю.

Удачи!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добавлю небольшое примечание: описанные ранее алгоритмы с отбрасыванием выделяющихся значений называются "ранговые алгоритмы цифровой фильтрации"

 

Спраситься с шумом без фильтра на входе АЦП будет очень сложно (из - за теоремы Котельникова). Надо хотябы простой RC фильтр поставить на входе, уровень -3Дб которого приходится на половинную частоту оцифровки (если Вы цифруете с большим запасом по скорости, как я понял это так).
Если есть большой запас, то при применении ФНЧ первого порядка, лучше всё-таки его верхнюю граничную частоту существенно понизить относительно того, что вы написали. Т.к. крутизна характеристики ФНЧ первого порядка при указанной граничной частоте не позволит избавиться от (не знаю, как этот термин будет по-русски) "aliasing".

 

 

 

Автору: цифровая фильтрация и статистическая обработка - не всегда разные вещи. Просто цифровая фильтрация в частном случае является средством (инструментом) статистической обработки. Простейший пример: матожидание - статистическая обработка, цифровой фильтр - реализация обработки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так я же и написал "хотя бы". Конечно, чем лучше задавишь входную частотку, тем меньше aliasing (по нашему, это, по моему, "перенос спектров" чего - то там, по английски проще писать и понятнее). Но с RC цепочками на очень низкие частоты обычно другие проблемы начинаются. Я в таких случаях обычно ставлю фильтр второго порядка на операционнике (а ОУ почти всегда есть у входа АЦП) и режу частоту примерно до 0.1 - 0.2 от частоты дискретизации. Да и АЦП для таких целей ставят дельта-сигма, тогда выбросы намного меньше сказываются. Но человек, видимо задавлен какими-то ограничениями у военных - я уже про существование таких АЦП, как ПВ2 забыл давно, думал что кануло, а вот оказывается еще на них работает кто-то. Это же сам по себе глючной агрегат (был по крайней мере)

Изменено пользователем DS_

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...