Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: цифровой измеритель среднего значения сигнала.
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
sergeantryan
здраствуйте, товарищи

попросили помочь с заданием, но я попал в тупик.

вот задание:
Разработать цифровой измеритель среднего значения сигнала.
Пределы измерения ±2 В. Погрешность – 0.1 %.
Диапазон рабочих частот: 50 Гц – 1 кГц.
Частота дискретизации – не более 48 кГц.

собственно, у меня идея такая: пропустить через выпрямитель этот сигнал, пропустить через фильтр и подать на вход АЦП. вопрос: будет ли это верно? и зачем такая большая частота дискретизации?
к сожалению мои познания в программирование не очень.возможно ли с помощью непосредсвенно самим АЦП снять среднее значение. буду рад любым советам. может поделитесь хорошей литературой.
serjj
Цитата
собственно, у меня идея такая: пропустить через выпрямитель этот сигнал, пропустить через фильтр и подать на вход АЦП

А вы точно знаете коэффициент передачи аналоговой части вашей схемы и он не "уйдет" за время работы? Иначе вы получите смещенную неверную оценку.
Цитата
и зачем такая большая частота дискретизации?

Это одна из стандартных частот сэмплирования звука. 44,1 48 и 96, если мне не изменяет память. Может еще какие-то есть. Вам предлагают не смотреть в сторону АЦП, работающих на повышенных частотах сэмплирования. Берите 44,1 - она самая распространённая. Можно стандартный аудио-вход от микрофона с такой АЦП-кой. Для готовых железок передаточные характеристики трактов перед АЦП наверняка документированы, так что их можно скомпенсировать при рассчёте.
Потом, вам нужно среднее значение амплитуды или именно сигнала? Если сигнала, то вы будете мерить уровень постоянки. Если амплитуды - вам нужно сначала взять модуль сигнала, а потом измерять среднее. Если нужна мощность, то после модуля нужно возвести в квадрат, а потом считать среднее. Самый простой способ усреднения - экспоненциальное взвешивание:
mean(k) = s(k)/N + mean(k-1) - mean(k-1)/N,
где N - порядок фильтра. Такое решение не потребует большого количества памяти для накопления N отсчётов, как в случае с обычным скользящим средним. За N отсчётов сходится к результату скользящего среднего. В итоге на выходе фильтра будете постоянно иметь среднее по сигналу/амплитуде/мощности (в зависимости от того, что подадите на вход). Измерение будет иметь задержку, вносимую фильтром в пределах до (N/44.1кГц) мс. N определяет также и точность, возьмите например 1024. Если сигнал сильно шумит, можно увеличить до 16384 или 32768. Степень двойки позволит заменить деление на битовую операцию смещения.

ЗЫ: а, ну и коэффициент передачи аналоговой части. Допустим есть коэффициент передачи по напряжению, К. Если считаете уровент постоянки, то (скорее всего вы её не вносите аналоговой частью) можно ничего не изменять, а просто отдать на выход алгоритма. Если измеряете среднюю амплитуду, то нужно выход алгоритма поделить на К, если мощность - на квадрат К.
sergeantryan
Цитата(serjj @ Jun 1 2015, 16:57) *
Это одна из стандартных частот сэмплирования звука. 44,1 48 и 96, если мне не изменяет память. Может еще какие-то есть. Вам предлагают не смотреть в сторону АЦП, работающих на повышенных частотах сэмплирования. Берите 44,1 - она самая распространённая. Можно стандартный аудио-вход от микрофона с такой АЦП-кой. Для готовых железок передаточные характеристики трактов перед АЦП наверняка документированы, так что их можно скомпенсировать при рассчёте.


какой АЦП можете посоветовать?
Цитата(serjj @ Jun 1 2015, 16:57) *
Потом, вам нужно среднее значение амплитуды или именно сигнала? Если сигнала, то вы будете мерить уровень постоянки. Если амплитуды - вам нужно сначала взять модуль сигнала, а потом измерять среднее. Если нужна мощность, то после модуля нужно возвести в квадрат, а потом считать среднее. Самый простой способ усреднения - экспоненциальное взвешивание:
mean(k) = s(k)/N + mean(k-1) - mean(k-1)/N,

в задании не оговоренно.думаю самого сигнала. экспоненциальное взвешивание реализуется аналоговой частьюили непосредственно коом АЦП?
_pv
вот не надо советовать аудио АЦП для измерительных целей. они для этого не очень подходят.
особенно по стабильностям коэффициента передачи и смещений. в большинстве даташитов на аудиоАЦП таких параметров просто не найдёте.

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

высокая частота может быть нужна если необходим анализ высоких гарник сигнала, с другой стороны в задании стоит не более 48кГц, например цифра в 5кГц вполне данному удовлетрворяет.

если нужно только среднее значение то можно вообще взять любой медленный сигма-дельта АЦП, с частотой выдачи данных даже гораздо меньше собственно частоты сигнала, он своим фильтром от сигнала сам по себе только среднее значение оставит задавив собственно сам сигнал.
sergeantryan
Цитата(_pv @ Jun 1 2015, 18:18) *
вот не надо советовать аудио АЦП для измерительных целей. они для этого не очень подходят.
особенно по стабильностям коэффициента передачи и смещений. в большинстве даташитов на аудиоАЦП таких параметров просто не найдёте.

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

высокая частота может быть нужна если необходим анализ высоких гарник сигнала, с другой стороны в задании стоит не более 48кГц, например цифра в 5кГц вполне данному удовлетрворяет.

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

можно про сигма-дельта АЦП по подробней.мне не со всем понятно как его программировать, и как добиться нужного диапазона частот?
Alex11
Во-первых, уточните у заказчика, что он подразумевает под средним значением сигнала, ибо математически среднее значение синуса за период равно нулю, а если не за период, то чему угодно. Поэтому нужно понять что требуется - среднеквадратичное, средневыпрямленное или что еще. Остальное Вам уже тут правильно насоветовали - сигнал оцифровываете как есть, далее считаете. АЦП дельта-сигма есть отличные у TI ADS1271 или ADS1274 - с них Вы получите требуемую точность с запасом. Заводите его с частотой порядка 20 кГц - для полосы 1 кГц будет достаточно.
Aleksandr Baranov
Цитата(_pv @ Jun 1 2015, 11:18) *
тем более что пропустив через выпрямитель и усреднив получится не среднее, а среднеквадратичное значение.

Каким это образом выпрямитель дает среднеквадратичное значение? Зачем тогда существуют "True RMS" измерители?
Signal
Цитата(sergeantryan @ Jun 1 2015, 16:25) *
вот задание:
Разработать цифровой измеритель среднего значения сигнала.
...
к сожалению мои познания в программирование не очень.

Ключевое слово в задании - "цифровой". Подразумевается, что обработка будет вестись именно в этой области. Если ваши познания "не очень", то вы не помощник вашему другу.
Конечно, можно сделать так, как вы предположили: аналоговый выпрямитель с последующим аналоговым фильтром и даже закончить это аналоговым же измерителем. И все будет работать. Вообще без дискретизации. Стрелочный измеритель, это, конечно, прикол в данном случае - он не обеспечит требуемую точность, что гармонично отражено словом "цифровой" в задании. Однако, ведь можно и не стрелочный прибор применить, а магазин сопротивлений wink.gif Шутю. Чисто цифровое решение задачи потребует на входе АЦП, частоту которого вам ограничили в разумных пределах.

Как мне видится, задание учебное и в первую очередь требует расчета необходимых частоты дискретизации, разрядности входных данных и разрядности вычислений, нахождения правильного алгоритма/математики и уж затем (если требуется) - выбор элементной базы с учетом всех влияющих на точность факторов и программирование (которое будет трудно проверит без изготовления опытного экземпляра).


Цитата(_pv @ Jun 1 2015, 18:18) *
тем более что пропустив через выпрямитель и усреднив получится не среднее, а среднеквадратичное значение.

Неосторожное, вводящее в заблуждение высказывание.

Цитата(serjj @ Jun 1 2015, 16:57) *
А вы точно знаете коэффициент передачи аналоговой части вашей схемы и он не "уйдет" за время работы? Иначе вы получите смещенную неверную оценку.

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

Цитата(Alex11 @ Jun 3 2015, 21:30) *
Во-первых, уточните у заказчика, что он подразумевает под средним значением сигнала, ибо математически среднее значение синуса за период равно нулю, а если не за период, то чему угодно. Поэтому нужно понять что требуется - среднеквадратичное, средневыпрямленное или что еще.

Для меня термин "среднее значение" хоть и не до конца точный, но вполне достаточный. При необходимости, квадратичность была бы указано явно.
Полоса входного сигнала начинается с 50 Гц. Ни о какой постоянке речь идти не может. Можно принять по умолчанию, что погрешность задана от шкалы.

Если бы делал я, то единственное, что я бы уточнил, это период усреднения. Или, с другой стороны, частота обновления показаний измерителя. Но, думаю, любое разумное, хоть как-то обоснованное значение может быть произволом студента. Возможно даже, это часть задания - определиться с недостающими требованиями.
Lerk
Цитата(Signal @ Jun 11 2015, 17:22) *
Если бы делал я, то единственное, что я бы уточнил, это период усреднения. Или, с другой стороны, частота обновления показаний измерителя. Но, думаю, любое разумное, хоть как-то обоснованное значение может быть произволом студента. Возможно даже, это часть задания - определиться с недостающими требованиями.


Можно банально сделать среднее с накоплением: сколько семплов получил, столько и усреднил. Чем дольше измеряем, тем точнее среднее. Дешево и сердито.
PS. avg(x)[i] = ((i-1)*avg(x)[i-1] + x[i])/i;
serjj
Цитата
Можно банально сделать среднее с накоплением: сколько семплов получил, столько и усреднил. Чем дольше измеряем, тем точнее среднее. Дешево и сердито.
PS. avg(x)[i] = ((i-1)*avg(x)[i-1] + x[i])/i;


ИМХО не самый удачный метод усреднения, особенно для real-time, сравните, например, с экспоненциальным взвешиванием (реакция на прямоугольный сигнал некоторой длительности):
Нажмите для просмотра прикрепленного файла
Нет контроля параметра интегрирования, алгоритм необходимо сбрасывать, после определенного индекса алгоритм уже практически не меняет своего состояния.
Lerk
Цитата(serjj @ Jun 15 2015, 09:28) *
ИМХО не самый удачный метод усреднения, особенно для real-time, сравните, например, с экспоненциальным взвешиванием (реакция на прямоугольный сигнал некоторой длительности):
Нажмите для просмотра прикрепленного файла
Нет контроля параметра интегрирования, алгоритм необходимо сбрасывать, после определенного индекса алгоритм уже практически не меняет своего состояния.


Так я и не настаиваю sm.gif Задача же не описана подробно.

Вот вы, видимо, сталкивались с задачей оценки реакции на прямоугольный сигнал, и вам это нужно учитывать. Мне же не доводилось решать такую задачу, а те, что доводилось(слабо меняющийся сигнал), прекрасно решаются обычным накопительным усреднением. Тем форум и хорош: теперь автор может выбрать из кучи различных вариантов тот, который ему более всего подходит wink.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.