Страница 1 из 2

АЦП в условиях значительных шумов

Добавлено: Пн дек 29, 2014 20:22:31
kolobokus
Требуется получить результат АЦП встроенным 10-разрядным преобразователем микроконтроллера
в условиях действия почти "белого" шума, с амплитудой 1-2 мзр. Преобразуемый сигнал - DC.
Время на получение результата - до 200 мс. Требуется получить не менее чем 10 разрядный результат
без "пляски" младшего разряда.
Если ограничиться имеющимися 10 разрядами, то помимо самого простого метода цифровой фильтрации
- вычисления среднего арифметического значения по множеству последовательных измерений,
можно попробовать применить оверсемплинг с децимацией для виртуального повышения разрядности
имеющегося АЦП, скажем до 12 разрядов, с последующим усреднением и приведением к 10 разрядам.
Вопрос в том, стоит ли это делать для достижения обозначенной мной цели (10 разрядов без "пляски")???

Re: АЦП в условиях значительных шумов

Добавлено: Пн дек 29, 2014 21:45:11
a5021
Совсем без пляски, это врят ли, но ослабить пляску оверсемплинг поможет. Если задача повышения разрядности не стоит, то самое незатейливое усреднения большого количества замеров уже показывает неплохие результаты. Если измеряемая величина меняется медленно, то можно еще окно за собой тащить. В том смысле, что не отбрасывать суммы после нахождения среднего, а сохранять в кольцевом массиве с последующим нахождением среднего от свеженакопленной суммы замеров и всех предыдущих сохраненных сумм.

Re: АЦП в условиях значительных шумов

Добавлено: Пн дек 29, 2014 22:16:33
polyname
экспоненциальный ФНЧ тоже неплохо работает, в отличии от бегущего среднего не нужно накапливать предыдущие данные, и легко наращивается порядок фильтра
http://en.wikipedia.org/wiki/Low-pass_f ... ealization
y := y[i-1] + α * (x - y[i-1])

Код: Выделить всё

// 1st-order exp.LPF, alpha=0..256
inline s32 lpf1_s32(const s32 cur, const s32 prev, const u8 alpha){ return (prev * 256 + alpha * (cur - prev)) / 256; }

Re: АЦП в условиях значительных шумов

Добавлено: Пн дек 29, 2014 23:34:22
Kotofil
против дрожания младшего разряда хорошо работает "люфт" ширина люфта ставится в зависимости от средней амплитуды помех

но лучше использовать вместо атмел или пик ти у них ацп куда качественнее сделан и помех существенно меньше при измерении.

Re: АЦП в условиях значительных шумов

Добавлено: Пн дек 29, 2014 23:37:02
polyname
но лучше использовать вместо атмел или пик ти у них ацп куда качественнее сделан
:) бред. Если руки кривые, виноват кто угодно, только не я...

Re: АЦП в условиях значительных шумов

Добавлено: Пн дек 29, 2014 23:50:42
Kotofil
polyname
:) бред. Если руки кривые, виноват кто угодно, только не я...

вы отрицаете что разные АЦП имеют разное качество при одинаковой разрядности? :)

Re: АЦП в условиях значительных шумов

Добавлено: Пн дек 29, 2014 23:56:03
polyname
я такой разницы не заметил. Даже без фильтрации на AVR удавалось добиться отсутствия шума. А с цифровой фильтрацией - и подавно.
В AVR плохая опора - лучше использовать внешнюю или VCC. С АЦП особых проблем не было.

Re: АЦП в условиях значительных шумов

Добавлено: Вт дек 30, 2014 00:34:13
kolobokus
Опора у меня внешняя, а вот питание adc общее с цифрой (разводка не позволяет их разделить), но для оверсэмплинга это даже плюс (имхо). Преобразование в режиме idle. Сигнал меняется настолько медленно, что окно скользящего среднего тащить не имеет смысла. А вот окно, вырезающее середину, отбрасывая края, наверное попробую, Впрочем, сочетать сразу несколько методов трудно.
Я затрудняюсь определить разницу между средним арифметическим по многим выборкам и оверсемплингом без повышения разрядности. Целесообразно ли использовать в моей ситуации оба метода и будет ли между ними разница в результатах при одинаковых количествах измерений?
Спасибо за советы.

Re: АЦП в условиях значительных шумов

Добавлено: Вт дек 30, 2014 00:47:35
a5021
polyname писал(а):экспоненциальный ФНЧ тоже неплохо работает,
Как-то я без оптимизма смотрю на кучу арифметических действий с тридцатидвухбитными значениями применительно к AVR.
kolobokus писал(а):Я затрудняюсь определить разницу между средним арифметическим по многим выборкам и оверсемплингом без повышения разрядности.
А это вообще не одно ли и то же? Я как-то вообще для себя упростил эту всю теоретическую подоплеку и тупо беру 4 в степени N семплов, складываю и сдвигаю вправо до нужной разрядности.

Re: АЦП в условиях значительных шумов

Добавлено: Вт дек 30, 2014 01:58:05
polyname
Как-то я без оптимизма смотрю на кучу арифметических действий с тридцатидвухбитными значениями применительно к AVR.
несколько сдвигов, сложений, вычитаний и умножение. В пределах 1..2 десятков мкс. Даже на полной скорости, в прерывании успеет. Можно переписать для 16-бит.

Re: АЦП в условиях значительных шумов

Добавлено: Вт дек 30, 2014 10:52:16
kolobokus
Буду исходить из результатов практики. Не помогут простые способы - замутю что-нибудь этакое...
В одной статье попался совет, сначала повысить разрядность, если недостаточно, а после усреднить. Так как эти приемы относятся к контролю очень медленных изменений величин, то я ими и подумал воспользоваться. Разрядности мне и такой (10) хватает, так что была мысль повысить ее повторными считываниями, с тем, чтобы потом отсечь прыгающие младшие разряды и снова вернуться к исходной разрядности, но уже без дерганья.
Только вот эта идея напоминает чем-то Perpetum Mobile.
Может ее эффективность не превышает простое усреднение. Попробую.

Re: АЦП в условиях значительных шумов

Добавлено: Вт дек 30, 2014 11:05:51
КРАМ
kolobokus писал(а):Буду исходить из результатов практики. Не помогут простые способы - замутю что-нибудь этакое...
Любая цифровая фильтрация подразумевает, что АЦ преобразование удовлетворяет теореме Котельникова как для сигнала, ТАК И ДЛЯ ШУМОВ.
То есть для эффективной фильтрации в МК необходимо обеспечить обрезание спектра входных шумов до уровня динамического диапазона АЦП (для 10 разрядного - это -60дБ, для 12-разрядного - -72 дБ) выше половины частоты семплирования. Этот фильтр называется антиалиасинговым...
Иначе применение ЛЮБЫХ цифровых фильтров будет неэффективно.

Re: АЦП в условиях значительных шумов

Добавлено: Вт дек 30, 2014 12:45:16
kolobokus
Спасибо, КРАМ, за напоминание. Но я по входу поставил мощный аналоговый фильтр. Он-то и берет на себя основную функцию шумодава. Остаток буду убирать цифрой.

Re: АЦП в условиях значительных шумов

Добавлено: Ср дек 31, 2014 23:25:52
kolobokus
В одной статье по АЦП я натолкнулся на совет делать период преобразования кратным 20ms, для борьбы с сетевыми наводками.
Мне показался этот совет некорректным. Ведь если абсолютно точно синхронизировать периоды (а это проблематично, ИМХО), то появиться смещение в результате, а если приблизительно - то медленные биения, с которыми бороться сложнее.
Так есть ли смысл приближать кратность периода АЦП к периоду сети для уменьшения влияния сетевых наводок?

Re: АЦП в условиях значительных шумов

Добавлено: Ср дек 31, 2014 23:35:22
КРАМ
Частота сети очень стабильна в смысле ее подавления нулем АЧХ КИХ ФНЧ.
Поэтому подобный способ фильтрации 50 Гц и всех кратных ей высших гармоник очень эффективен.
Даже невысокий порядок фильтра дает очень неплохое подавление.
Расстройка частоты сети относительно частоты нуля у фильтра даст несколько худшее подавление и только...
Проверено неоднократно.
Совсем недавно я таким образом подавил до величины младшего разряда 12-разрядного АЦП наводку на измеряемую емкость сетевого провода (система охраны бытовой техники в магазине через шнур питания)...
:)

Re: АЦП в условиях значительных шумов

Добавлено: Чт янв 01, 2015 19:36:55
kolobokus
Пока мне не удалось сколь заметно улучшить ситуацию, задав период преобразований равным 20 ms. Возможно, дело в неудачной разводке.
А есть ли в несложных методах борьбы с шумами нечто, подобное гистерезису триггера Шмидта? Или это и есть - усекание младших разрядов?

Re: АЦП в условиях значительных шумов

Добавлено: Чт янв 01, 2015 19:49:07
Kotofil
сделай синхронизацию выборки по сетевому 50гц стробу от сети питающёй БП,
получишь ту же самую 20мс синхронизацию но без биений (которые и дают основной шум)

Re: АЦП в условиях значительных шумов

Добавлено: Чт янв 01, 2015 20:43:04
КРАМ
Сорри, я невнимательно прочел исходный вопрос...
Не выборки должны быть кратны, а ДЛИНА БУФЕРА скользящего окна.
То есть частота выборок должна быть более чем вдвое выше частоты сети и кратна ей. С учетом реально существующих в сети гармоник вполне достаточно семплировать сигнал частотой 800 Гц (16 выборок за 20 мс).
Синхронизация с сетью с точностью до фазы не требуется.
Попытка решить проблему биений путем синхронизации лишь уберет сами биения, но не уберет ОШИБКУ, связанную с наводкой сети. Наводка превратится в постоянную составляющую...

Re: АЦП в условиях значительных шумов

Добавлено: Чт янв 01, 2015 21:01:32
kolobokus
Kotofil писал(а):сделай синхронизацию выборки по сетевому 50гц стробу от сети питающёй БП,
получишь ту же самую 20мс синхронизацию но без биений (которые и дают основной шум)
Думаю, с предположением об основном вкладе в "дребезг" младших разрядов АЦП сетевой наводки в моем случае, я поспешил.
Дело в том, что сейчас устройство еще не встроено, а работает у меня на столе. И питается от качественного преобразователя с
последующим линейным стабилизатором. Провода короткие. Скорее - причина в разводке платы (дешевая китайская ардуина Mini USB Nano).
В ней питание VCC и AVCC объединено, даже без дросселя.

Re: АЦП в условиях значительных шумов

Добавлено: Чт янв 01, 2015 22:31:34
a5021
А что сама ардуина еще делает? Просто я раз наблюдал, как динамическая индикация такой "дребезг" в питающее напряжение вносит, что качественные показатели с АЦП получить становится проблематично.