Fedor78
Mar 14 2006, 08:45
Доброго времени суток.
Измерительный канал: Датчик, предварительный усилитель, мультиплексор АЦП 12 разрядный, микроконтроллер 51 серии.
Сигнал, приходящий на АЦП, медленно меняющееся напряжение 0 – 5 В. Сигнал зашумлен. Размах шумовой составляющей 5 – 10 мВ. Во время работы устройства по сигналу иногда проходят пики «шилья» амплитудой до 50 мВ частотой около 400 Гц.
В цикле измерения напряжения накапливается среднее арифметическое по 255 значениям. После осреднения получаем разброс с кодовым расстоянием от 2 до 15. Допустимо не более 2. Понятно, что нужно чистить сигнал на входе АЦП и работы в этом направлении ведутся, однако хотелось бы попробовать справиться с проблемой средствами контроллера. Посему вопрос. Не подскажет ли кто приблизительный алгоритм, по которому можно было бы отфильтровать сигнал.
Во времени обработки я практически не ограничен, но достаточно серьезно ограничен в памяти. Максимум, который можно выделить на эту задачу 64 байта.
PS: Сорри, если на форуме уже обсуждалось. Я не нашел.
Aleks17
Mar 14 2006, 09:08
Надо фильтр НЧ городить. Т.к. памяти мало лучше каскадное включение нескольких фильтров.
Какова частота преобразования ? Какова полоса полезного сигнала ? Имейте в виду, что размер буфера должен соответствовать времени накопления в несколько раз превышающем периоду помехи иначе нормально отфильтровать не удастся.
Fedor78
Mar 14 2006, 09:43
Сигнал напряжение постоянного тока. Если я правильно понимаю полосы у него нет

Фактическое время выборки кодов из АЦП около 5 мкс.
Вопросы установки пассивных или активных фильтров перед АЦП я бы сейчас не обсуждал. На самом деле хочется обойтись статистическими методами. Так как сигнал резко не может измениться по определению, есть мысли отбрасывать промахи. Вот сейчас изучаю соответствующие книжки. Однако очень не охота изобрести велосипед.
Полоса есть у любого сигнала, так что назовите рамки частот.
Я так понимаю, что сгодится самый простой цифровой ФНЧ чуть ли не первого порядка. Но с таким же успехом можно поставить на входе АЦП и RC-цепь. Поскольку решение простое, найти его реализацию можно в любом учебнике по цифровой обработке, в том числе, думаю, и в интернете полно. Памяти много цифровой фильтр не скушает, если он будет рекурсивным.
Aleks17
Mar 14 2006, 10:36
2Fedor78:
так я про цифровой фильтр говорю (то что вы называете статистическими методами).
Зачем такая большая частота квантования для сигнала частоты 0 Гц (интересная полоса :-))
Спраситься с шумом без фильтра на входе АЦП будет очень сложно (из - за теоремы Котельникова). Надо хотябы простой RC фильтр поставить на входе, уровень -3Дб которого приходится на половинную частоту
оцифровки (если Вы цифруете с большим запасом по скорости, как я понял это так).
Программно легче всего организовать скажем 20 разрядный аккумулятор в памяти. После каждого измерения вычитать сдвинутое вправо на 8 разрядов его же значение и прибавлять результат измерения. Получится классический БИХ фильтр первого порядка с постоянной времени 256 измерений. Памяти он не сожрет почти ничего. Его постоянная времени легко меняется на любые 2 в N циклов измерений.
Виктория
Mar 14 2006, 11:21
Цитата
Так как сигнал резко не может измениться по определению, есть мысли отбрасывать промахи. Вот сейчас изучаю соответствующие книжки. Однако очень не охота изобрести велосипед
Я думаю, совсем простая робастная фильтрация Вас точно спасет (я бы даже не называла это так сложно).
1. Выборка 10 отсчетов
2. Max/min значение отбрасываем (или только max)
3. Находим среднее из остальных 8 отсчетов.
Размер выборки можно и еще уменьшить.
По Вашим данным разброс почти только из-за "шильев" (а так был бы 2-4 единицы кода)
можно построить фильтр так - Вы знаете максимальную скорость нарастания сигнала - 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 примерное значение вх сигнала(среднее, можно просуммировать пару сотен выборок и разделить на количество их же)
можно влепить последовательно несколько БИХ фильтров первого порядка
можно сделать скользящее среднее
А вообще, помеха идет от источника сигнала или формируется где-то рядом?
Цитата(Fedor78 @ Mar 14 2006, 19:13)

Так как сигнал резко не может измениться по определению, есть мысли отбрасывать промахи.
А что, это хорошая мысль.
В начальном режиме можно просто накапливать усредненное значение. Например, накопить 256 отсчетов, как и раньше.
После этого можно начать отбрасывать все значения, которые отличаются от усредненного более чем на 15 отсчетов в каждую сторону. "Прошедшие" значения с малым весовым коэффициентом усредняются с уже имеющимся средним.
Затем можно постепенно уменьшать "порог нечувствительности" с 15 отсчетов до 2-3.
Правда, я подозреваю, что даже ничего не отбрасывая, можно добиться нормального результата, если весовой коэфф. выбрать достаточно малым. Например, имеющееся среднее значение умножается на 9999, к результату добавляется новое измеренное значение, и затем все делится на 10000 (понятно, что среднее значение само по себе должно храниться с приличной разрядностью, т.к. соотношение его разрядности и величины весового коэфф. само создает "зону нечувствительности" для малых изменений)
Fedor78
Mar 14 2006, 13:57
2Alex17
IMHO Цифровой фильтр и статистическая обработка результата измерений разные вещи.
О частоте квантования я не задумывался. Хотя не вижу особой разницы буду я измерять раз в секунду или раз в 10 микросекунд. Если быть совсем точным, я с указанной частотой квантования снимаю 255 значений, одновременно накапливая среднее арифметическое, потом переключаюсь на другие каналы. Там чистые сигналы, да и требования к точности ниже. Потом расчеты. Пустой цикл около секунды.
2DS_
На самом деле RC, непосредственно перед АЦП и перед мультиплексором по каждому каналу, стоят. RC - цепь перед АЦП ставилась исходя из рекомендаций для 1108ПВ2. С учетом сказанного вами, проверю и пересчитаю цепочки. За предложенный алгоритм - спасибо. Сейчас попробую.
2Vic1 Согласен именно из за "шильев".
По сути, предложенный вами алгоритм я и собираюсь реализовать, но отбрасывать не минимальные и максимальные значения, а все что более интервала в 3 среднеквадратичных отклонения. Минус этого алгоритма - надо хранить всю выборку, а это память.
2Bay Спасибо. Мысль такая витала, но не оформилась. Попробую.
"Шилья" точно формируются рядом. Источник - ключевая система регулятора расхода, который питается напряжениями вместе с аналоговым трактом. Это неправильно, но и быстро не исправишь
2 =AK= Подозреваю что когда Bay говорил о скользящем среднем что то подобное и имелось ввиду. Надо попробовать.
iosifk
Mar 14 2006, 14:09
Цитата(Fedor78 @ Mar 14 2006, 16:57)

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

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

Регулятор расхода упрощенно: датчик расхода, диф усилитель, ШИМ, транзисторный ключ. Определить моменты переключения не проблема. Не измерять в этот момент тоже идея хорошая. Но
IMHO это латание дыр и усложнение без того не очень простой схемы существующего прибора. Уж если лезть в «железо» лучше исправлять причину, а не следствие. Собственно это основной путь переработки. Устранение влияния помех средством контролера меня в первую очередь интересует потому, что если я получу приемлемый результат на грязном сигнале, то на нормальном тем более будет все хорошо, плюс получу некоторый запас прочности.
Вы правильно поняли, то что я Вам написал, но трактуете неправильно. Сначала надо УСТРАНИТЬ причину возникновения помехи, а потом, если это не получится пытаться ее замазывать. Потому что помеха НЕ нормирована. На одной плате она будет одного уровня, на другой - другого. А где гарантия, что на любом серийном изделии это замазывание будет работать?
Вот если хотите пример: у меня на сайте в разделе "записки инженера", Эпизод называется "мультивибратор длиной в две стойки". Если хотите получить тоже - флаг Вам в ... Но я так уже давно не работаю.
Удачи!
Добавлю небольшое примечание: описанные ранее алгоритмы с отбрасыванием выделяющихся значений называются "ранговые алгоритмы цифровой фильтрации"
Цитата(DS_ @ Mar 14 2006, 16:59)

Спраситься с шумом без фильтра на входе АЦП будет очень сложно (из - за теоремы Котельникова). Надо хотябы простой RC фильтр поставить на входе, уровень -3Дб которого приходится на половинную частоту оцифровки (если Вы цифруете с большим запасом по скорости, как я понял это так).
Если есть большой запас, то при применении ФНЧ первого порядка, лучше всё-таки его верхнюю граничную частоту существенно понизить относительно того, что вы написали. Т.к. крутизна характеристики ФНЧ первого порядка при указанной граничной частоте не позволит избавиться от (не знаю, как этот термин будет по-русски) "aliasing".
Автору: цифровая фильтрация и статистическая обработка - не всегда разные вещи. Просто цифровая фильтрация в частном случае является средством (инструментом) статистической обработки. Простейший пример: матожидание - статистическая обработка, цифровой фильтр - реализация обработки.
Так я же и написал "хотя бы". Конечно, чем лучше задавишь входную частотку, тем меньше aliasing (по нашему, это, по моему, "перенос спектров" чего - то там, по английски проще писать и понятнее). Но с RC цепочками на очень низкие частоты обычно другие проблемы начинаются. Я в таких случаях обычно ставлю фильтр второго порядка на операционнике (а ОУ почти всегда есть у входа АЦП) и режу частоту примерно до 0.1 - 0.2 от частоты дискретизации. Да и АЦП для таких целей ставят дельта-сигма, тогда выбросы намного меньше сказываются. Но человек, видимо задавлен какими-то ограничениями у военных - я уже про существование таких АЦП, как ПВ2 забыл давно, думал что кануло, а вот оказывается еще на них работает кто-то. Это же сам по себе глючной агрегат (был по крайней мере)
А экспоненциальное накопление не пробовали?
Если помеха короткая, то проскочит незаметно.
Stanislav
Mar 15 2006, 09:28
Цитата(Vic1 @ Mar 14 2006, 14:21)

Цитата
Так как сигнал резко не может измениться по определению, есть мысли отбрасывать промахи. Вот сейчас изучаю соответствующие книжки. Однако очень не охота изобрести велосипед
Я думаю, совсем простая робастная фильтрация Вас точно спасет (я бы даже не называла это так сложно).
1. Выборка 10 отсчетов
2. Max/min значение отбрасываем (или только max)
3. Находим среднее из остальных 8 отсчетов.
Размер выборки можно и еще уменьшить.
По Вашим данным разброс почти только из-за "шильев" (а так был бы 2-4 единицы кода)
Простите, но так делать нельзя!
Если наводка идет на линейный тракт, подобная нелинейная фильтрация приведет к смещению оценки измеряемой величины (если не очевидно - могу пояснить). Всем поддержавшим подобный метод также предлагаю подумать над этим.
В то же время, правильно рассчитанный линейный фильтр способен качественно подавить помеху импульсного характера. В частности, ее удаётся устранить полностью, если спектры полезного сигнала и помехи не перекрываются.
АЦП совсем без входного фильтра включать нельзя, это знают даже военные. Зачастую RC-цепочки вполне достаточно. Для передачи неискаженной формы сигнала частота среза такого фильтра должна быть выбрана ~10*Fmax, где Fmax - максимальная частота спектра сигнала. В большинстве же случаев ее допустимо сделать ниже.
В данном случае фильтры нужно включать
перед мультиплексором и сделать их активными, с малым вых. сопротивлением - в высокооомную цепь мультиплексор вносит большую коммутационную помеху, влияющую на результат преобразования.
1108ПВ2 вовсе не глючен, если с ним правильно обращаться.
А УВХ к нему сделано?
Цитата(Stanislav @ Mar 15 2006, 12:28)

1108ПВ2 вовсе не глючен, если с ним правильно обращаться.
А УВХ к нему сделано?
А где Вы их берете ? Я с ними столкнулся году кажется в 91, их делал нынче незалежный Вильнюс. Как только у нас появились ad677 пв2 забылись как страшный сон.
А по уму для Fedor78 надо ставить какой- нибудь из ad773X. И все проблемы решаться сами собой. И места и мощности будет в разы меньше потреблять.
Stanislav
Mar 15 2006, 12:44
Цитата(DS_ @ Mar 15 2006, 15:01)

Цитата(Stanislav @ Mar 15 2006, 12:28)

1108ПВ2 вовсе не глючен, если с ним правильно обращаться.
А УВХ к нему сделано?
А где Вы их берете ? Я с ними столкнулся году кажется в 91, их делал нынче незалежный Вильнюс. Как только у нас появились ad677 пв2 забылись как страшный сон...
Не беру вовсе. Прибор, конечно, устарел безнадёжно. Просто приходилось с ним работать в начале 90-х. Потом, ессно, тоже с AD...
Для точного измерения НЧ сигналов, конечно же, нужен сигма-дельта АЦП.
2Fedor78
Как успехи? Что проверили, чего добились?
Еще, проверьте питающие линии, стоит ли керамика по питанию на контролле, мультиплексоре, АЦП. Проверьте осциллографом эти же линии, какая амплитуда пульсаций.
Виктория
Mar 16 2006, 12:01
Цитата
Простите, но так делать нельзя!
Если наводка идет на линейный тракт, подобная нелинейная фильтрация приведет к смещению оценки измеряемой величины (если не очевидно - могу пояснить). Всем поддержавшим подобный метод также предлагаю подумать над этим.
Поясните пожалуйста, Станислав.
To Fedor78 - сколько отсчетов приходится на эти "шилья". В том моем алгоритме, естественно, предполагалось что по одному. И Ваше замечание насчет дополнит. памяти поясните, пожалуйста. п.п.1-3 буферной памяти точно не требуют (скользящее среднее с медианной отбраковкой)
Stanislav
Mar 16 2006, 20:42
Цитата(Vic1 @ Mar 16 2006, 15:01)

Цитата
Простите, но так делать нельзя!
Если наводка идет на линейный тракт, подобная нелинейная фильтрация приведет к смещению оценки измеряемой величины (если не очевидно - могу пояснить). Всем поддержавшим подобный метод также предлагаю подумать над этим.
Поясните пожалуйста, Станислав.
Поясню на примере. Для наглядности привожу рисунок.
Нажмите для просмотра прикрепленного файлаЗдесь:
t - время,
U(t) - напряжение (или число на выходе АЦП).
Предположим, мы измеряем постоянное напряжение (истинное значение условно изображено непрерывным и зелёным). Последовательность измерений - коричневые точки. На рисунке я попытался изобразить импульсную помеху, воздействующую на входной тракт. Характерной особенностью электромагнитных помех, воздействующих на линейный тракт, является их нулевое мат. ожидание (иными словами, среднее значение помехи равно 0). Таким образом, усреднив "отсчёты", изображенные на рисунке, получим оценку, очень близкую к истинному значению измеряемой величины (несмещённую оценку). Нетрудно убедиться, что, применив предложенный Вами способ нелинейной фильтрации, получим
смещение оценки относительно истинного значения, т.к. основной пик помехи будет устранён, а её "хвост" - нет.
Средств подавления периодических импульсных помех существует множество. Особенно простой их реализация становится, если частота помехи известна (400 Гц - автор темы явно работает с военным оборудованием

). Еще один пример: положив частоту выборки медленно меняющегося сигнала кратной 400 Гц, и, применив КИХ-фильтр НЧ с нулями, расположенными на частотах k*400 Гц (k - натуральное число), получим полное подавление помехи.
Цитата(Stanislav @ Mar 17 2006, 02:42)

пример: положив частоту выборки медленно меняющегося сигнала кратной 400 Гц, и, применив КИХ-фильтр НЧ с нулями, расположенными на частотах k*400 Гц (k - натуральное число), получим полное подавление помехи.
Блестящее решение!
Виктория
Mar 17 2006, 09:43
Цитата
На рисунке я попытался изобразить импульсную помеху, воздействующую на входной тракт.
Да, для такого вида помехи, конечно, предложенный алгоритм не подходит.
Stanislav
Mar 18 2006, 08:28
Цитата(Vic1 @ Mar 17 2006, 12:43)

Да, для такого вида помехи, конечно, предложенный алгоритм не подходит.
Насколько я себе могу представить,
все помехи, наводимые на линейный тракт бесконтактным образом, имеют свойство нулевого среднего, хотя вид их при этом может быть и не совсем похож на изображенный мной. Чаще всего, "хвост" является быстрозатухающим колебательным процессом, что ни в коей степени не нарушает общность моих рассуждений - нелинейная фильтрация даст ненулевое среднее.
2 KrysДа нет, решение более-менее очевидное. Самое приятное в нём - вид КИХ-фильтра НЧ: для реализации можно выбрать простейший фильтр скользящего среднего малой длины, в котором отсутствуют операции умножения и который легко реализуется даже на 8-битных МК. Так, например, для 400 Гц помехи и частоты дискретизации 4 кГц можно применить фильтр с такими вот характеристиками:
Нажмите для просмотра прикрепленного файлаФильтр имеет характеристику H(z)=1+z^(-1)+z^(-2)+...+z^(-9) и может быть легко реализован на 8-битном МК с малым объёмом ОЗУ. Если частота помехи может меняться в небольших пределах, можно включить последовательно два таких фильтра - тогда нули станут второго порядка, и полосы заграждения расширятся.
Естественно, при этом нужно обеспечить подавление спектральных компонент входного сигнала на частотах 2 кГц и выше, чего можно достичь только при помощи входного аналогового фильтра.
Andreas1
Mar 19 2006, 10:25
Обработка сильно зависит от того, что с этими результатами будет происходить далее. Если они будут в той или иной форме интегрироваться, то я соглашись со Stanislav. Если это будет индикация или пороговый детектор, то лучше использовать нелинейные методы(выбросы отсчетов по различным алгоритмам). Ибо если выброс будет вблизи конца измерения, то этот результат все равно исказится, и что будет дальше неважно (кстати у меня почему-то обычно после одиночного выброса нет релаксации).
Так красиво описанный фильтр конечно будет хорошо работать при регулярных выбросах.
Stanislav
Mar 19 2006, 11:10
Цитата(Andreas1 @ Mar 19 2006, 13:25)

Обработка сильно зависит от того, что с этими результатами будет происходить далее. Если они будут в той или иной форме интегрироваться, то я соглашись со Stanislav.
Что значит "интегрироваться", да ещё и "в той или иной форме"? Поясните, пожалуйста.
Цитата(Andreas1 @ Mar 19 2006, 13:25)

...Если это будет индикация или пороговый детектор, то лучше использовать нелинейные методы(выбросы отсчетов по различным алгоритмам)...
Это неверно. Почитайте внимательно тему.
Цитата(Andreas1 @ Mar 19 2006, 13:25)

...Ибо если выброс будет вблизи конца измерения, то этот результат все равно исказится, и что будет дальше неважно (кстати у меня почему-то обычно после одиночного выброса нет релаксации).
Какова природа "выброса"? Если электромагнитная, уверен, что "отсутствие релаксации" Вам только кажется...
Цитата(Andreas1 @ Mar 19 2006, 13:25)

...Так красиво описанный фильтр конечно будет хорошо работать при регулярных выбросах.
А что такое "регулярные выбросы"? Изъясняйтесь общепринятым языком, пожалуйста.
Andreas1
Mar 19 2006, 20:34
Цитата
Что значит "интегрироваться", да ещё и "в той или иной форме"? Поясните, пожалуйста.
Например, это сигнал ошибки в контуре инерционной системы регулирования.
Цитата
Какова природа "выброса"? Если электромагнитная, уверен, что "отсутствие релаксации" Вам только кажется...
ЭМИ от искры(очень частый случай) имеет длительность менее единиц мкс. и высокую амплитуду(см. исходное письмо). Соответственно, низкоскоростные входные каскады без специальных цепей защиты от глубокого насыщения входят в режим ограничения и не выходят из него значительное время (на практике десятки мкс.) и была там релаксация или нет уже безразлично. Т.е., ограничение и выход из него - нелинейный процесс и дальнейшая линейная обработка некорректна.
Даже входной аналоговый фильтр(которого правда нет по условию задачи) необязательно спасет, поскольку энергия выброса и релаксации необязательно совпадают.
Цитата
А что такое "регулярные выбросы"?
Выбросы каждые 2.5 мс.
Цитата
Это неверно. Вам только кажется...
Пожалуйста, аргументируйте свои высказывания.
При выбросе экстремальных значений (результат нелинейной входной обработки) и интегрирующем АЦП вполне можно попробовать обойтись без входного фильтра. Сначала отбрасывать значения, значительно отличающееся от среднего за N отсчетов, а затем простейший цифровой аналог RC фильтра Yn=(K*Yn-1 + Xn)/(k+1) , желательно хранить остаток от деления и учитывать в следующем цикле, иначе возможна систематическая ошибка в 1 мл. разряд(не помню почему так получалось, интересно, можно ли без этго обойтись). Опять таки, в зависимости от дальнейшей судьбы измерений и времени установления, можно перед фильтром просто просуммировать несколько отсчетов, поскольку при увеличении K сильно затягивается время установления. И очень полезно записать последовательность отсчетов в PC и поиграться там. Особенно нагляден результат в графической форме.
Stanislav
Mar 19 2006, 21:09
Цитата(Andreas1 @ Mar 19 2006, 23:34)

Цитата
Что значит "интегрироваться", да ещё и "в той или иной форме"? Поясните, пожалуйста.
Например, это сигнал ошибки в контуре инерционной системы регулирования.
Простите, но Ваша терминология мне непонятна. Речи идёт об измерении напряжения. При чём здесь регулирование? И почему в "контуре инерционной системы регулирования" сигнал обязательно должен интегрироваться?
Цитата(Andreas1 @ Mar 19 2006, 23:34)

...ЭМИ от искры(очень частый случай) имеет длительность менее единиц мкс. и высокую амплитуду(см. исходное письмо).
Какое такое "исходное письмо"? Вот Вам не помешает прочитать пост #1 еще раз.
Цитата(Andreas1 @ Mar 19 2006, 23:34)

...Соответственно, низкоскоростные входные каскады без специальных цепей защиты от глубокого насыщения входят в режим ограничения и не выходят из него значительное время (на практике десятки мкс.) и была там релаксация или нет уже безразлично. Т.е., ограничение и выход из него - нелинейный процесс и дальнейшая линейная обработка некорректна.
Да Вы, никак, издеваетесь? Где здесь было упоминание о нелинейном характере помехи? Я в своих постах специально обратил на это внимание.
Цитата(Andreas1 @ Mar 19 2006, 23:34)

...Даже входной аналоговый фильтр(которого правда нет по условию задачи) необязательно спасет, поскольку энергия выброса и релаксации необязательно совпадают.
..............................
При выбросе экстремальных значений (результат нелинейной входной обработки) и интегрирующем АЦП вполне можно попробовать обойтись без входного фильтра. Сначала отбрасывать значения, значительно отличающееся от среднего за N отсчетов, а затем простейший цифровой аналог RC фильтра Yn=(K*Yn-1 + Xn)/(k+1) , желательно хранить остаток от деления и учитывать в следующем цикле, иначе возможна систематическая ошибка в 1 мл. разряд(не помню почему так получалось, интересно, можно ли без этго обойтись). Опять таки, в зависимости от дальнейшей судьбы измерений и времени установления, можно перед фильтром просто просуммировать несколько отсчетов, поскольку при увеличении K сильно затягивается время установления. И очень полезно записать последовательность отсчетов в PC и поиграться там. Особенно нагляден результат в графической форме.
Уважаемый, прежде чем писать посты, необходимо навести порядок в собственных сведениях о предмете обсуждения, а также терминологии. У Вас явные несуразности в
каждом предложении, на возражения просто жалко тратить время...
Для борьбы с " шильями" и придуман медианный фильтр. Операция проводится в скользящем регистре
более двойной длины по отн к шилу. Режет начисто без остатков - остальной дисперсный шум - статаистическая обработка по времени.
Stanislav
Mar 24 2006, 20:26
Поясните, пожалуйста, что Вы подразумеваете под медианным фильтром?
Не в обиду, просто бывает разная интерпретация этого термина.
А какие, Вы, Станислав знаете интерпретации?
Лично я со школы (ну т.е. с вуза) знаю такое: вокруг интересующей точки выбирается апертура (окно) с нечётным количеством точек, чтобы получилось симметрично. Все отсчёты в этой апертуре выстраиваются в ряд в порядке возрастания, а данной точке присваивается значение, равное значению отсчёта, расположенного в средине ряда. Если я ничего не путаю. По моим понятиям, это частный случай ранговых методов цифровой обработки.
Stanislav
Mar 28 2006, 19:35
Цитата(Krys @ Mar 27 2006, 06:57)

А какие, Вы, Станислав знаете интерпретации?
Лично я со школы (ну т.е. с вуза) знаю такое: вокруг интересующей точки выбирается апертура (окно) с нечётным количеством точек, чтобы получилось симметрично. Все отсчёты в этой апертуре выстраиваются в ряд в порядке возрастания, а данной точке присваивается значение, равное значению отсчёта, расположенного в средине ряда. Если я ничего не путаю. По моим понятиям, это частный случай ранговых методов цифровой обработки.
Знаю ещё похожие на то, что предложила
Vic1. Ваше определение, безусловно, верное, однако, для измерительных целей такой фильтр не подходит по причинам, о которых я писал выше, что легко проверить. Медианный фильтр действительно может быть полезен в некоторых случаях, когда не нужно измерять истинное значение сигнала (например, для визуального "улучшения" изображения, зашумлённого "черными и белыми" точками). Следует, однако, помнить, что такой способ фильтрации приводит к частичной потере информации о сигнале (искажениям вследствие нелинейности), поэтому даже в этих случаях его нужно применять с осторожностью.
Честно говоря, я таких задач в своей практике не встречал...
Да, Вы правы, я в вузе медианную фильтрацию проходил как инструмент очистки двумерных изображений от шума, полностью согласен, что данный метод не позволит измерять истинное значения сигнала.
После прочтения сей длинной ветки у меня создалось впечатление, что деревья заслонили лес.
Совершенно очевидно, что никакими математическими (статистическими) ухищрениями данную проблему решить невозможно. Ведь инициатор темы ясно изложил, что несмотря на усреднение по большому числу точек, помеха пролезает. Это значит, что либо наводка нелинейная по своей или природе входных каскадов, либо нелинейность возникает (и) вследствие того, что пресловутые "шилья" узкие. Поэтому скорость АЦП недостаточна для их адекватной регистрации. Т.е. может на пик один отсчет приходится или два в различные моменты этого пика. Поэтому крылья пика вносят вклад, а вершина частично пропадает.
Тут можно было бы пойти в сторону восстановления вершины по крыльям, если источник помех предсказуем, но это имело бы смысл только на самый худой конец. Ведь в выборку может попасть только крыло, а пик в предыдущую. Или наоборот. Поэтому пассивная аналоговая фильтрация - самый простой и эффективный выход.
Или рассейте мой пессимизм.
Stanislav
Mar 29 2006, 12:23
Цитата(Tanya @ Mar 29 2006, 11:32)

После прочтения сей длинной ветки у меня создалось впечатление, что деревья заслонили лес.
Совершенно очевидно, что никакими математическими (статистическими) ухищрениями данную проблему решить невозможно. Ведь инициатор темы ясно изложил, что несмотря на усреднение по большому числу точек, помеха пролезает. Это значит, что либо наводка нелинейная по своей или природе входных каскадов, либо нелинейность возникает (и) вследствие того, что пресловутые "шилья" узкие. Поэтому скорость АЦП недостаточна для их адекватной регистрации. Т.е. может на пик один отсчет приходится или два в различные моменты этого пика. Поэтому крылья пика вносят вклад, а вершина частично пропадает.
Тут можно было бы пойти в сторону восстановления вершины по крыльям, если источник помех предсказуем, но это имело бы смысл только на самый худой конец. Ведь в выборку может попасть только крыло, а пик в предыдущую. Или наоборот. Поэтому пассивная аналоговая фильтрация - самый простой и эффективный выход.
Или рассейте мой пессимизм.
Думаю, что тему Вы прочитали всё же не слишком внимательно.
В постах #22 и #25 я предложил способ решения данной конкретной задачи. И этот способ - только "один из".
[/quote]Думаю, что тему Вы прочитали всё же не слишком внимательно.
В постах #22 и #25 я предложил способ решения данной конкретной задачи. И этот способ - только "один из".
[/quote]
Да, нет... Все понятно.
Наверное Вы меня не поняли. Вот если представить себе такую помеху -
Дельта-функция + нечто плавное с интегралом = -1. То такая помеха приведет к сдвигу постоянной составляющей. Т.е. дельта-функция не регистрируется никак, а нечто плавное никак не отделить от полезного сигнала.
Stanislav
Mar 29 2006, 21:21
Цитата(Tanya @ Mar 29 2006, 19:27)

...Вот если представить себе такую помеху -
Дельта-функция + нечто плавное с интегралом = -1. То такая помеха приведет к сдвигу постоянной составляющей. Т.е. дельта-функция не регистрируется никак, а нечто плавное никак не отделить от полезного сигнала.
Мне кажется, что Ваши сомнения рассеятся, если Вы "пропустите" даже такую гипотетическую помеху через anti-aliasing фильтр НЧ на входе АЦП, о необходимости применения которого я также писал.
Цитата(Stanislav @ Mar 30 2006, 04:21)

Мне кажется, что Ваши сомнения рассеятся, если Вы "пропустите" даже такую гипотетическую помеху через anti-aliasing фильтр НЧ на входе АЦП, о необходимости применения которого я также писал.
Дак именно об этом он и написал. Просто это уже повторение вашей мысли (или её подтверждение). Но доля истины в его посте есть, т.к. он открывает глаза на детали происходящего. Возможно, вы тоже эти детали прекрасно понимали с самого начала, но не все так. Для меня его пост не был бесполезным, кое-что я положил в копилку своего опыта
Цитата(Krys @ Mar 30 2006, 06:43)

Цитата(Stanislav @ Mar 30 2006, 04:21)

Мне кажется, что Ваши сомнения рассеятся, если Вы "пропустите" даже такую гипотетическую помеху через anti-aliasing фильтр НЧ на входе АЦП, о необходимости применения которого я также писал.
Дак именно об этом он и написал.
Она...
Dmitron
Mar 30 2006, 09:52
Пгастите, если перебиваю. Или если идея не нова.
Фильтр нада от импульсных помех. Программный. RC-цепь на входе АЦП естественно.
Попробуйте реализовать фильтр Кальмана, много памяти в отличии от скользящего среднего не требует, но требует дробные числа с точкой.
см здесь
http://www.cs.unc.edu/~welch/kalman/и здесь
http://www.cs.unc.edu/~welch/media/pdf/kalman_intro.pdfВот пример реализации фильтра Кальмана в МатЛабе
Код
function [z_out] = kalman(z,xk,r)
n = length(z);
%xk=0;
pk=1;
q=0.00001;
%r=0.01;
for i=1:n
x = xk;
p = pk + q;
k = p/(p+r);
xk = x + k*(z(i)-x);
pk = (1-k)*p;
z_out(i) = xk;
end;
muravei
Apr 3 2006, 07:31
Я бы предложил алгоритм "скользящего среднего".
Берете , например, 8 послед. значений суммируете елите на 8, затем сдвигаете на 1 и повторяете.Незная как с шумом а 50 , 100 Гц давит (при моделировании) очень прилично.
Еще можно посмотреть медианный фильтр.
Но RC на входе обязательно.
Если "шило" высокое и узкое на фоне достаточно гладкого сигнала (как указано на картинке), то любые статистические методы
внесут погрешность в измеряемую величину (пропорционально соотношению площади пика к окну)большую чем у медианного фильтра, который простоне учитывает "шило".
Причем ставить его нужно обязательно до любых фильтров
Stanislav
Apr 10 2006, 19:16
Цитата(TED17 @ Apr 10 2006, 22:45)

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