реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
Fedor78
сообщение Mar 14 2006, 08:45
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 13-03-06
Пользователь №: 15 199



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

Измерительный канал: Датчик, предварительный усилитель, мультиплексор АЦП 12 разрядный, микроконтроллер 51 серии.
Сигнал, приходящий на АЦП, медленно меняющееся напряжение 0 – 5 В. Сигнал зашумлен. Размах шумовой составляющей 5 – 10 мВ. Во время работы устройства по сигналу иногда проходят пики «шилья» амплитудой до 50 мВ частотой около 400 Гц.
В цикле измерения напряжения накапливается среднее арифметическое по 255 значениям. После осреднения получаем разброс с кодовым расстоянием от 2 до 15. Допустимо не более 2. Понятно, что нужно чистить сигнал на входе АЦП и работы в этом направлении ведутся, однако хотелось бы попробовать справиться с проблемой средствами контроллера. Посему вопрос. Не подскажет ли кто приблизительный алгоритм, по которому можно было бы отфильтровать сигнал.
Во времени обработки я практически не ограничен, но достаточно серьезно ограничен в памяти. Максимум, который можно выделить на эту задачу 64 байта.

PS: Сорри, если на форуме уже обсуждалось. Я не нашел.
Go to the top of the page
 
+Quote Post
Aleks17
сообщение Mar 14 2006, 09:08
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 238
Регистрация: 17-01-05
Из: Новосибирск
Пользователь №: 2 003



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

Какова частота преобразования ? Какова полоса полезного сигнала ? Имейте в виду, что размер буфера должен соответствовать времени накопления в несколько раз превышающем периоду помехи иначе нормально отфильтровать не удастся.
Go to the top of the page
 
+Quote Post
Fedor78
сообщение Mar 14 2006, 09:43
Сообщение #3





Группа: Новичок
Сообщений: 4
Регистрация: 13-03-06
Пользователь №: 15 199



Сигнал напряжение постоянного тока. Если я правильно понимаю полосы у него нет smile.gif
Фактическое время выборки кодов из АЦП около 5 мкс.
Вопросы установки пассивных или активных фильтров перед АЦП я бы сейчас не обсуждал. На самом деле хочется обойтись статистическими методами. Так как сигнал резко не может измениться по определению, есть мысли отбрасывать промахи. Вот сейчас изучаю соответствующие книжки. Однако очень не охота изобрести велосипед.
Go to the top of the page
 
+Quote Post
Krys
сообщение Mar 14 2006, 10:24
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Полоса есть у любого сигнала, так что назовите рамки частот.
Я так понимаю, что сгодится самый простой цифровой ФНЧ чуть ли не первого порядка. Но с таким же успехом можно поставить на входе АЦП и RC-цепь. Поскольку решение простое, найти его реализацию можно в любом учебнике по цифровой обработке, в том числе, думаю, и в интернете полно. Памяти много цифровой фильтр не скушает, если он будет рекурсивным.
Go to the top of the page
 
+Quote Post
Aleks17
сообщение Mar 14 2006, 10:36
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 238
Регистрация: 17-01-05
Из: Новосибирск
Пользователь №: 2 003



2Fedor78:

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

Зачем такая большая частота квантования для сигнала частоты 0 Гц (интересная полоса :-))
Go to the top of the page
 
+Quote Post
DS
сообщение Mar 14 2006, 10:59
Сообщение #6


Гуру
******

Группа: СуперМодераторы
Сообщений: 3 096
Регистрация: 16-01-06
Из: Москва
Пользователь №: 13 250



Спраситься с шумом без фильтра на входе АЦП будет очень сложно (из - за теоремы Котельникова). Надо хотябы простой RC фильтр поставить на входе, уровень -3Дб которого приходится на половинную частоту
оцифровки (если Вы цифруете с большим запасом по скорости, как я понял это так).
Программно легче всего организовать скажем 20 разрядный аккумулятор в памяти. После каждого измерения вычитать сдвинутое вправо на 8 разрядов его же значение и прибавлять результат измерения. Получится классический БИХ фильтр первого порядка с постоянной времени 256 измерений. Памяти он не сожрет почти ничего. Его постоянная времени легко меняется на любые 2 в N циклов измерений.


--------------------
Не бойтесь тюрьмы, не бойтесь сумы, не бойтесь мора и глада, а бойтесь единственно только того, кто скажет - "Я знаю как надо". А. Галич.
Go to the top of the page
 
+Quote Post
Виктория
сообщение Mar 14 2006, 11:21
Сообщение #7


инженер
****

Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701



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

Я думаю, совсем простая робастная фильтрация Вас точно спасет (я бы даже не называла это так сложно).
1. Выборка 10 отсчетов
2. Max/min значение отбрасываем (или только max)
3. Находим среднее из остальных 8 отсчетов.

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

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

Сообщение отредактировал Vic1 - Mar 14 2006, 11:25
Go to the top of the page
 
+Quote Post
bav
сообщение Mar 14 2006, 11:25
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 693
Регистрация: 21-06-05
Из: Санкт-Петербург
Пользователь №: 6 184



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

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

А вообще, помеха идет от источника сигнала или формируется где-то рядом?
Go to the top of the page
 
+Quote Post
=AK=
сообщение Mar 14 2006, 12:21
Сообщение #9


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(Fedor78 @ Mar 14 2006, 19:13) *
Так как сигнал резко не может измениться по определению, есть мысли отбрасывать промахи.

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

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

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

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

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

Сообщение отредактировал =AK= - Mar 14 2006, 12:28
Go to the top of the page
 
+Quote Post
Fedor78
сообщение Mar 14 2006, 13:57
Сообщение #10





Группа: Новичок
Сообщений: 4
Регистрация: 13-03-06
Пользователь №: 15 199



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

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

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

2Bay Спасибо. Мысль такая витала, но не оформилась. Попробую.
"Шилья" точно формируются рядом. Источник - ключевая система регулятора расхода, который питается напряжениями вместе с аналоговым трактом. Это неправильно, но и быстро не исправишь sad.gif


2 =AK= Подозреваю что когда Bay говорил о скользящем среднем что то подобное и имелось ввиду. Надо попробовать.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Mar 14 2006, 14:09
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Fedor78 @ Mar 14 2006, 16:57) *
2Bay Спасибо. Мысль такая витала, но не оформилась. Попробую.
"Шилья" точно формируются рядом. Источник - ключевая система регулятора расхода, который питается напряжениями вместе с аналоговым трактом. Это неправильно, но и быстро не исправишь sad.gif


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


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Fedor78
сообщение Mar 15 2006, 06:22
Сообщение #12





Группа: Новичок
Сообщений: 4
Регистрация: 13-03-06
Пользователь №: 15 199



Регулятор расхода упрощенно: датчик расхода, диф усилитель, ШИМ, транзисторный ключ. Определить моменты переключения не проблема. Не измерять в этот момент тоже идея хорошая. Но
IMHO это латание дыр и усложнение без того не очень простой схемы существующего прибора. Уж если лезть в «железо» лучше исправлять причину, а не следствие. Собственно это основной путь переработки. Устранение влияния помех средством контролера меня в первую очередь интересует потому, что если я получу приемлемый результат на грязном сигнале, то на нормальном тем более будет все хорошо, плюс получу некоторый запас прочности.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Mar 15 2006, 06:33
Сообщение #13


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Fedor78 @ Mar 15 2006, 09:22) *
Регулятор расхода упрощенно: датчик расхода, диф усилитель, ШИМ, транзисторный ключ. Определить моменты переключения не проблема. Не измерять в этот момент тоже идея хорошая. Но
IMHO это латание дыр и усложнение без того не очень простой схемы существующего прибора. Уж если лезть в «железо» лучше исправлять причину, а не следствие. Собственно это основной путь переработки. Устранение влияния помех средством контролера меня в первую очередь интересует потому, что если я получу приемлемый результат на грязном сигнале, то на нормальном тем более будет все хорошо, плюс получу некоторый запас прочности.


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


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Krys
сообщение Mar 15 2006, 07:33
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



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

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



Автору: цифровая фильтрация и статистическая обработка - не всегда разные вещи. Просто цифровая фильтрация в частном случае является средством (инструментом) статистической обработки. Простейший пример: матожидание - статистическая обработка, цифровой фильтр - реализация обработки.
Go to the top of the page
 
+Quote Post
DS
сообщение Mar 15 2006, 07:53
Сообщение #15


Гуру
******

Группа: СуперМодераторы
Сообщений: 3 096
Регистрация: 16-01-06
Из: Москва
Пользователь №: 13 250



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

Сообщение отредактировал DS_ - Mar 15 2006, 07:54


--------------------
Не бойтесь тюрьмы, не бойтесь сумы, не бойтесь мора и глада, а бойтесь единственно только того, кто скажет - "Я знаю как надо". А. Галич.
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 14:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.01498 секунд с 7
ELECTRONIX ©2004-2016