Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Подскажите с фильтром
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
EasenMan
Подскажите фильтр для снижения равномерно распределенного шума в сигнале. Полезный сигнал лежит в диапазоне 0-200Гц, частота дискритезации 10КГц. Фильтр должен быть простым в вычислительном плане, т.к. будет применятся в реальном времени на обычном МК ARM.
bahurin
Цитата(EasenMan @ Apr 10 2011, 21:33) *
Подскажите фильтр для снижения равномерно распределенного шума в сигнале. Полезный сигнал лежит в диапазоне 0-200Гц, частота дискритезации 10КГц. Фильтр должен быть простым в вычислительном плане, т.к. будет применятся в реальном времени на обычном МК ARM.


ФНЧ c частотой среза 200 Гц думаю подойдет
sup-sup
Цитата(EasenMan @ Apr 10 2011, 21:33) *
Подскажите фильтр для снижения равномерно распределенного шума в сигнале. Полезный сигнал лежит в диапазоне 0-200Гц, частота дискритезации 10КГц. Фильтр должен быть простым в вычислительном плане, т.к. будет применятся в реальном времени на обычном МК ARM.

Шум в полосе 0-200Гц ничем нельзя снизить.
Иван Панченко
Фильтром максимизирующим отношение сигнал-шум на выходе будет согласованный: http://ru.wikipedia.org/wiki/%D0%A1%D0%BE%...%8C%D1%82%D1%80.
Если Вы имеете ввиду, шум в полосе вашего сигнала, то единственный способ его снижения - охлаждение устройства. http://ru.wikipedia.org/wiki/%D0%96%D0%B8%...%B7%D0%BE%D1%82
Если же все же, шум вне полосы вашего сигнала - синтезируйте КИХ фильтр(например,матлабом).

EasenMan
Охладить девайс это сурово). Сегодня подсказали что оптимальным в такой ситуации будет фильтр, имеющий АЧХ схожую с АЧХ полезного сигнала. Буду смотреть расхождение и находить оптимальный. Но важнее другой вопрос. Какие фильтры выгоднее в вычислительном плане? Что нибудь скользящее среднее или что нибудь похожие. КИХ фильтр это хорошо, но уж больно большой порядок выходит.
Самурай
Цитата(EasenMan @ Apr 13 2011, 01:11) *
Сегодня подсказали что оптимальным в такой ситуации будет фильтр, имеющий АЧХ схожую с АЧХ полезного сигнала.


Это и есть согласованный фильтр, как об этом было сказано постом выше.

Цитата(EasenMan @ Apr 13 2011, 01:11) *
Но важнее другой вопрос. Какие фильтры выгоднее в вычислительном плане? Что-нибудь скользящее среднее или что-нибудь похожие.


Если речь идет о согласованном фильтре, то ничего другого кроме КИХ быть в принципе не может. И скользящее среднее это тоже КИХ-фильтр.

Цитата(EasenMan @ Apr 13 2011, 01:11) *
КИХ фильтр это хорошо, но уж больно большой порядок выходит.


Большой порядок чего? ФНЧ КИХ-фильтра на частоту среза 200Гц и частотой дискретизации 10кГц? Реализуйте в виде каскадного соединения КИХ-фильтров дециматоров реализованных полифазно, это снизит вычислительные затраты в 10-100 раз.

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


st232bd
А зачем КИХ? Автор минимальный фильтр хочет (отдельный вопрос что с 200 Гц сигналом ARM и здоровенный протащит). Что-нибудь рекурсивное, типа интегратора с постоянной времени. Uout += Uin-Uout/k, можно несколько раз последовательно, причём только первое звено с частотой 10 кГц считать нужно. Для ARM (без однотактового деления) k - выбираем степень двойки и заменяем сдвигом, получаем полосу чуть шире 200 Гц (следующими звеньями точнее подгоним), или, что лучше, умножаем всё на k, получаем k*Uin - Uout (просто формула менее наглядна). Если коэффициент передачи фильтра должен быть = 1, нормируем его на выходе делением (вместо деления можно посчитать дробь со степенью двойки в знаменателе и заменить одним умножением и одним сдвигом). Предполагается, что всё считаем целочисленно. Мысленно представляем операционник в инвертирующем включении, с конденсатором параллельно резистору обратной связи, работу которого описывает данная формула. Литературу читать не надо, коэффициенты подбираем методом тыка или вариацией в математическом пакете. Проще некуда.
Если АЧХ сложный, то после этого уже фильтрованный сигнал, с малым потоком данных неспеша мучаем сложными фильтрами, если известна форма - коррелируем быстрым алгоритмом. Если от узкополосных помех отстраиваемся - обеляющий фильтр наверное стоит добавить и т. д.
Короче если мыслить категориями схемотехники - тупо фильтруем несколько раз интегрирующей RC цепочкой, а потом уже обрабатываем замысловато. RC - в данном случае програмная.
EasenMan
То что ARM хороший фильтр потащит, это не спорю, просто система, которая построена на этом МК, работает в реальном времени и кроме расчета фильтра ,необходимо еще много чего сделать, в том числе и регуляторы обсчитать, поэтому и ставка на максимальную производительность(в пределах разумного).
С несколькими проходами рекурсивного фильтра согласен, а вот последующая обработка я так понимаю не получится, т.к. входной сигнал может быть либо синусоида с частотой 50-200Гц, либо какие то S-кривые.
Хотелось бы узнать про расчет коэффициентов для БИХ фильтра. Точней рассчитать то их не трудно в MATLAB, но они получаются очень маленькие и точные(0,00097962856 что то типа того), так вот, можно ли их отмасштабиравать до целых чисел и как это сделать?
AndrewS6
Цитата(EasenMan @ Apr 14 2011, 15:38) *
Хотелось бы узнать про расчет коэффициентов для БИХ фильтра. Точней рассчитать то их не трудно в MATLAB, но они получаются очень маленькие и точные(0,00097962856 что то типа того), так вот, можно ли их отмасштабиравать до целых чисел и как это сделать?

Нормируете коэффициенты к единице, умножаете на 2^{ваша разрядность-1}-1, берете целую часть ( а лучше округляете до ближайшего целого).
dsp_counter
Цитата(EasenMan @ Apr 11 2011, 00:33) *
Подскажите фильтр для снижения равномерно распределенного шума в сигнале. Полезный сигнал лежит в диапазоне 0-200Гц, частота дискритезации 10КГц. Фильтр должен быть простым в вычислительном плане, т.к. будет применятся в реальном времени на обычном МК ARM.

Не буду открывать новую тему, т.к. эта вроде в тему :-)
На 16-разрядном АЦП измеряю с частотой 10кГц.(ФНЧ 5кГц на входе есть)
Полоса полезного сигнала тоже до 200Гц.
Ни какие фильтрации не помогают выйти даже на 16-разрядную точность измерений, не говоря уж о мечтах в виде 18-разрядной точности. Присутствует шум порядка 2-х младших значащих разрядов, частотой - единицы Герц.
О чем дальше думать? (ограничений в производительности нет)
sinc_func
Цитата(st232bd @ Apr 13 2011, 17:44) *
А зачем КИХ?
....
Короче если мыслить категориями схемотехники - тупо фильтруем несколько раз интегрирующей RC цепочкой, а потом уже обрабатываем замысловато. RC - в данном случае програмная.


Кстати, это неплохо работающая идея.
У себя в проектах, связанных с управлением (например, специализированный инвертор) я часто ставлю фильтры
малого порядка на вычитаниях,сложениях и сдвигах - там какая проблема - одна частота - сэмплинга - определяется
ШИМ-ом (10 kHz) а другая оборотами ротора (до 450 Hz) - ну а посередке надо все убрать для работы в представлении
управления ротором (и убрать лишний шум)

Если идти от теории - данная схема просто приводиться к чуть модифицированной классической структуре цифрового фильтра
(чтобы уйти от головной боли со сверхмалыми коэффициентами)
dsp_counter
На всякий случай добавлю деталей:
- из АЦП получаю последовательность 10 кГц; (16 разрядов)
- усредняя по 8 точек получаем сигнал с частотой сэмплирования 1250Гц; (здесь и далее плавающая точка при вычислениях)
- фильтрую КИХ с полосой пропускания 110-140Гц (всего 199 коэффициентов);
- выделяю амплитуду полученного сигнала; (по 3-м точкам интерполирую и нахожу максимум)
- получается не очень :-).

О чем дальше думать? (ограничений в производительности нет)

sinc_func
Цитата(dsp_counter @ Apr 21 2011, 08:18) *
...
Ни какие фильтрации не помогают выйти даже на 16-разрядную точность измерений, не говоря уж о мечтах в виде 18-разрядной точности. Присутствует шум порядка 2-х младших значащих разрядов, частотой - единицы Герц.
О чем дальше думать? (ограничений в производительности нет)


Если там действительно есть таким образом частотно-локализованный шум - я бы надрезами на плате и закоротками
постарался бы выяснить - что все таки является источником этого шума (разделяй и властвуй) Плата конечно будет
серьезно "пожевана", но множественные быстрые практические опыты при контроле величины шума по FFT
(например в Матлабе) и чтение дата-шитов могут быстрее вывести к источнику проблемы чем изыски в фильтрации
Самурай
Цитата(dsp_counter @ Apr 21 2011, 15:15) *
На всякий случай добавлю деталей:
- из АЦП получаю последовательность 10 кГц; (16 разрядов)
- усредняя по 8 точек получаем сигнал с частотой сэмплирования 1250Гц; (здесь и далее плавающая точка при вычислениях)
- фильтрую КИХ с полосой пропускания 110-140Гц (всего 199 коэффициентов);
- выделяю амплитуду полученного сигнала; (по 3-м точкам интерполирую и нахожу максимум)
- получается не очень :-).

О чем дальше думать? (ограничений в производительности нет)


Конечно, можно и даже нужно курочить и кромсать плату в поисках источника шума, но для начала я бы посоветовал избавиться от первого дециматора на 8. Столь, казалось бы, незамысловатое действие, как усреднение по 8 отсчетам засрет испортит Вам весь околонулевой участок спектра по самое некуда, особенно если в исходном сигнале есть помехи на частотах кратных (и близких к ним) частоте 1250Гцsm.gif. Да и вообще, все что выше 625Гц просто завернется в нольsm.gif. Если ограничений по ресурсам нет, то ставьте нормальный фильтр перед дециматором.

Но все эти фильтрации будут сильно бесполезными если то, что Вы называете ФНЧ на 5кГц это просто RC-цепочкаsm.gif. Ситуация полностью аналогичная сказанному до этого, только теперь все что выше 5кГц будет заворачиваться в ваш сигнал. И не заметить это будет очень трудно имея 16-битный АЦПsm.gif. Да, а что за АЦП то? И уверены, что он сам не шумит в младших 1-3 разрядах?

А вообще, какая конечная цель?
И зачем "выделяю амплитуду полученного сигнала; (по 3-м точкам интерполирую и нахожу максимум)" ?


dsp_counter
Цитата(Самурай @ Apr 21 2011, 18:24) *
1. ....... Столь, казалось бы, незамысловатое действие, как усреднение по 8 отсчетам испортит Вам весь околонулевой участок спектра по самое некуда......

2. ......... Если ограничений по ресурсам нет, то ставьте нормальный фильтр перед дециматором.......

3. ........Да, а что за АЦП то? И уверены, что он сам не шумит в младших 1-3 разрядах?.......

4. .....А вообще, какая конечная цель? И зачем "выделяю амплитуду полученного сигнала;.....


Уважаемый САМУРАЙ, кажется, что Вы в теме. Если можете, помогите.

1. А как от него избавиться (от усреднения)? Просто взять каждую восьмую точку?
2. Про ресурсы я чуть-чуть увлекся. :-) Но если обсуждать еще и их, то мы можем в дебри уйти.
3. Наверняка шумит АЦП. Но не на низких же частотах.
4. Конечная цель: измерить напряжение в этой полосе частот (110-140). А вото что такое "измерить напряжение", точно сформулировать не могу, пока пытаюсь измерить амплитуду.

Уважаемый sinc_func, плату курочил. Даже при закороченном входе АЦП шумит и сильно.
Самурай
Цитата(dsp_counter @ Apr 21 2011, 19:29) *
Уважаемый sinc_func, плату курочил. Даже при закороченном входе АЦП шумит и сильно.


Проверяйте шумы по питанию и опоре АЦП и входных усилителей (если есть).
И все-таки, что за АЦП? Схема включения?

Насчет фильтра, можно все сделать честно: три фильтра-дециматора на 2, каждый фильтр либо обычный КИХ, либо Halfband (тоже КИХ, но каждый второй коэфф. = 0), все фильтры одинаковые, для Halfband это примерно 23-ой порядок для подавления 100дБ, всего 6 нетривиальных умножений. Если делать полифазно то 3. После каждого фильтра частота понижается вдвое. Фильтры легко считаются в Матлабе.
dsp_counter
АЦП - Diamond-MM-16-AT (плата РС/104).

Перед ним стоит модуль гальванической развязки SCM7B40-08A (пришлось использовать такую громоздкую вещь, т.к. не смогли реализовать опторазвязку на плате. Но это отдельная тема.).

Между SCM7B40-08A и Diamond-MM-16-AT вставили RC фильтр (1.6кОм на 0.3 мкФ).

Спасибо за советы, пока еще не переварил. :-)
Понял их так:
- считаем фильтр Halfband на четверть частоты сэмплирования;
- прогоняем фильтр, выкидываем каждую вторую точку;
- предыдущий пункт выполняем еще два раза;
- дальше наша цепочка: полосовой КИХ на 110-140Гц, выделение амплитуд.
dsp_counter
Цитата(dsp_counter @ Apr 22 2011, 10:17) *
....
- считаем фильтр Halfband на четверть частоты сэмплирования;
....


Halfband он и есть Halfband, какие еще "четверть частоты сэмплирования". СОРРИ.

dsp_counter
Что-то ни чего приличного не получается.
Для примера прилагаю файл с входными данными от АЦП.

У 16-разрядного АЦП среднеквадратичное отклонение измерений почти в 8 раз больше веса младшего разряда.
Это нормально?

В результате следующей обработки:
- трехкратного уменьшения частоты сэмплирования в два раза (т.е. всего в 8 раз до 125 Гц);
- фильтрации с полосой 11-14 Гц (много разных фильтров попробовал);
- выделения амплитуды получающейся синусойды (а может тут надо как-то иначе мерять напряжение?).
Шум остается сравнимый с весом младшего разряда АЦП. Это не устраивает.

Может что присоветуете?
Самурай
Цитата(dsp_counter @ Apr 26 2011, 15:22) *
У 16-разрядного АЦП среднеквадратичное отклонение измерений почти в 8 раз больше веса младшего разряда.
Это нормально?
Может что присоветуете?


Да, шум страшныйsm.gif. И что интересно, шум белый. Полосовой фильтр 11Гц-14Гц дает на выходе шум, имеющий среднеквадратическое отклонение порядка 0.2мВ, т.е. грубо 1-2 младших разряда АЦП. Собственно, этот же результат получается и у Вас. И боюсь, что цифровым методом уменьшить шум можно, только сужая полосу наблюдения.

Посмотрел элементную базу Вашей платы АЦП, шум должен быть на 1-2 порядка меньше чем есть сейчас. Могу только еще раз повторить: смотрите шумы по питанию и опоре АЦП. Попробуйте дополнительно отфильтровать. Еще интересно повторить эксперимент с бОльшими частотами дискретизации, попробовать подать сигнал на другие входы и/или в дифф. режиме.
dsp_counter
Разбираемся.
Оказалось, что близкое расположение импульсного блока питания (HE-104) и АЦП является источником помех.
Пробуем перетасовать стойку РС-104.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.