Перейти к содержанию
    

Как убрать постоянную составляющую из сигнала.

Сигнал 50 Гц сдвинут относительно нуля.

Измерение производим АЦП с частотой выборки 5000Гц.

Надо получить его же только относительно нуля.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вам нужно до АЦП сдвинуть или уже из отсчетов убрать ПС?

 

Если до, то можно начать с конденсатора.

Если после, то вычисляем среднее арифметическое из какого-то кол-ва отсчетов, например за период. Полученное значение и будет равно постоянному напряжению. Ну а затем просто из каждого отсчета и вычитаем среднее значение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сигнал 50 Гц сдвинут относительно нуля.

Измерение производим АЦП с частотой выборки 5000Гц.

Надо получить его же только относительно нуля.

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вам нужно до АЦП сдвинуть или уже из отсчетов убрать ПС?

Мне надо из отсчетов убрать.

АЦП не умеет измерять отрицательные значения.

Если после, то вычисляем среднее арифметическое из какого-то кол-ва отсчетов, например за период. Полученное значение и будет равно постоянному напряжению. Ну а затем просто из каждого отсчета и вычитаем среднее значение.

Дело в том, что памяти маловато и все отсчеты хранить не получается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно не накапливать а вычитать на каждый отсчет, если уровень постоянной заранее известен, а я так понял Вам он известен и вы его сами вводите вгоняя сигнал в диапазон АЦП? Или это не так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно не накапливать а вычитать на каждый отсчет, если уровень постоянной заранее известен, а я так понял Вам он известен и вы его сами вводите вгоняя сигнал в диапазон АЦП? Или это не так?

Да это так.

Уровень то известен, но он тоже не совершенен. Я ему проводил мониторинг, плавает он. Опорник на него делать не очень хочется, поэтому сдвиг формируется обычным резистивным делителем от источника питания.

Само устройство питается от бестрансформаторно блока питания с гасящим конденсатором.

 

Можно конечно найти среднее за предыдущий период, и его потом прикладывать к текущему.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уровень то известен, но он тоже не совершенен. Я ему проводил мониторинг, плавает он. Опорник на него делать не очень хочется, поэтому сдвиг формируется обычным резистивным делителем от источника питания.

Ну измеряйте еще и сдвиг, и вычитайте его.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В алгоритмах ничего лучше вычисления среднего и не найдете. Известно же, вроде, :blush: что вычисление нулевой гармоники спектра Фурье (пусть по быстрым алгоритмам ДПФ) фактически сводится к вычислению среднего значения за период.

Может быть применим еще какой-нибудь алгоритм коррекции ("плавания") ухода постоянного значения уровня (например по max или min значению сигнала).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поcмотри:

простейший HP фильтр

dc_bias - 32 bit integer

clean_sample - 16 bit integer

 

dc_bias += ((((int32_t) sample << 15) - dc_bias) >> 14);

clean_sample = sample - (dc_bias >> 15);

 

думаю поможет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

To bmf

А поподробнее для всех и автора темы можно? :)

НР фильтр - расшифровка, чья формула, начальные условия (сколько нибудь первых отсчетов пропускаем), литературный источник.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

    dc_bias += ((((int32_t) sample << 15) - dc_bias) >> 14);

    clean_sample = sample - (dc_bias >> 15);

примерно так

 

HP - high pass filter

 

формула для 1-го порядка:

y(n) = x(n) - x(n-1) + R * y(n-1)

 

"R" 0.9 .. 1

для -3dB: R = 1 - (pi*2 * frequency /samplerate)

 

ну а то что в выше - просто реализация что бы небыло дробного умножения

 

немного теории:

http://ccrma.stanford.edu/~jos/filters/

http://ccrma.stanford.edu/~jos/filters/DC_Blocker.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

y(n) = x(n) - x(n-1) + R * y(n-1)

может более привычный вид

1-st Order Filter of the Form:

y(n)=b0*x(n)+b1*x(n-1)+a1*y(n-1)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно не накапливать а вычитать на каждый отсчет, если уровень постоянной заранее известен, а я так понял Вам он известен и вы его сами вводите вгоняя сигнал в диапазон АЦП? Или это не так?

Да это так.

Уровень то известен, но он тоже не совершенен. Я ему проводил мониторинг, плавает он. Опорник на него делать не очень хочется, поэтому сдвиг формируется обычным резистивным делителем от источника питания.

Само устройство питается от бестрансформаторно блока питания с гасящим конденсатором.

 

Можно конечно найти среднее за предыдущий период, и его потом прикладывать к текущему.

 

Лучше всего использовать для сдвига половину опорного напряжения самого АЦП.

В Вашем случае это невозможно в принципе?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Лучше всего использовать для сдвига половину опорного напряжения самого АЦП.

В Вашем случае это невозможно в принципе?

Не особо хочется, там 220В через делители, без какой либо развязки.

Я думал над этим, но как то стремно питать сдвиг нуля от опроника. Источник питания более мощная вещь.

 

Спасибо всем сейчас пробую варианты, отчет о проделанноей работе напишу завтра

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А какой у Вас АЦП?

Есть АЦП с внутренним сдвигом,

питание однополярное а вход двуполярный.

Референс внешний?

Если да, сдвигайте от него вход,

у него должен быть низкий импеданс.

Если будете использовать цифровой фильтр

по старту загружайте в сумматор

значение смещения, чтоб сократить время

выхода правильного результата.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...