Pat 0 31 октября, 2005 Опубликовано 31 октября, 2005 · Жалоба Сигнал 50 Гц сдвинут относительно нуля. Измерение производим АЦП с частотой выборки 5000Гц. Надо получить его же только относительно нуля. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
moonrock 0 31 октября, 2005 Опубликовано 31 октября, 2005 · Жалоба Вам нужно до АЦП сдвинуть или уже из отсчетов убрать ПС? Если до, то можно начать с конденсатора. Если после, то вычисляем среднее арифметическое из какого-то кол-ва отсчетов, например за период. Полученное значение и будет равно постоянному напряжению. Ну а затем просто из каждого отсчета и вычитаем среднее значение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
BVU 0 31 октября, 2005 Опубликовано 31 октября, 2005 · Жалоба Сигнал 50 Гц сдвинут относительно нуля. Измерение производим АЦП с частотой выборки 5000Гц. Надо получить его же только относительно нуля. <{POST_SNAPBACK}> Все зависит от того, когда Вам и для чего необходимо убрать постоянную составляющую сигнала. В электронной схемотехнике это делается разделительными конденсаторами, либо используя операционный усилитель можно компенсировав смещение напряжения на входе или специальной предназначенной регулировкой добиться требуемого положения нуля на выходе (балансировка нуля). Для обработки сигнала в нереальном времени используется вычитание значения вычисленного среднего значения , тем самым цифровой сигнал получается относительно 'квази нуля'. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pat 0 31 октября, 2005 Опубликовано 31 октября, 2005 · Жалоба Вам нужно до АЦП сдвинуть или уже из отсчетов убрать ПС? <{POST_SNAPBACK}> Мне надо из отсчетов убрать. АЦП не умеет измерять отрицательные значения. Если после, то вычисляем среднее арифметическое из какого-то кол-ва отсчетов, например за период. Полученное значение и будет равно постоянному напряжению. Ну а затем просто из каждого отсчета и вычитаем среднее значение. <{POST_SNAPBACK}> Дело в том, что памяти маловато и все отсчеты хранить не получается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vic 0 31 октября, 2005 Опубликовано 31 октября, 2005 · Жалоба Можно не накапливать а вычитать на каждый отсчет, если уровень постоянной заранее известен, а я так понял Вам он известен и вы его сами вводите вгоняя сигнал в диапазон АЦП? Или это не так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pat 0 31 октября, 2005 Опубликовано 31 октября, 2005 · Жалоба Можно не накапливать а вычитать на каждый отсчет, если уровень постоянной заранее известен, а я так понял Вам он известен и вы его сами вводите вгоняя сигнал в диапазон АЦП? Или это не так? <{POST_SNAPBACK}> Да это так. Уровень то известен, но он тоже не совершенен. Я ему проводил мониторинг, плавает он. Опорник на него делать не очень хочется, поэтому сдвиг формируется обычным резистивным делителем от источника питания. Само устройство питается от бестрансформаторно блока питания с гасящим конденсатором. Можно конечно найти среднее за предыдущий период, и его потом прикладывать к текущему. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VAI 0 31 октября, 2005 Опубликовано 31 октября, 2005 · Жалоба Уровень то известен, но он тоже не совершенен. Я ему проводил мониторинг, плавает он. Опорник на него делать не очень хочется, поэтому сдвиг формируется обычным резистивным делителем от источника питания. Ну измеряйте еще и сдвиг, и вычитайте его. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Виктория 0 31 октября, 2005 Опубликовано 31 октября, 2005 · Жалоба В алгоритмах ничего лучше вычисления среднего и не найдете. Известно же, вроде, что вычисление нулевой гармоники спектра Фурье (пусть по быстрым алгоритмам ДПФ) фактически сводится к вычислению среднего значения за период. Может быть применим еще какой-нибудь алгоритм коррекции ("плавания") ухода постоянного значения уровня (например по max или min значению сигнала). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bmf 0 31 октября, 2005 Опубликовано 31 октября, 2005 · Жалоба По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); думаю поможет Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Виктория 0 31 октября, 2005 Опубликовано 31 октября, 2005 · Жалоба To bmf А поподробнее для всех и автора темы можно? :) НР фильтр - расшифровка, чья формула, начальные условия (сколько нибудь первых отсчетов пропускаем), литературный источник. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bmf 0 31 октября, 2005 Опубликовано 31 октября, 2005 · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bmf 0 31 октября, 2005 Опубликовано 31 октября, 2005 · Жалоба 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) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ms1 0 31 октября, 2005 Опубликовано 31 октября, 2005 · Жалоба Можно не накапливать а вычитать на каждый отсчет, если уровень постоянной заранее известен, а я так понял Вам он известен и вы его сами вводите вгоняя сигнал в диапазон АЦП? Или это не так? <{POST_SNAPBACK}> Да это так. Уровень то известен, но он тоже не совершенен. Я ему проводил мониторинг, плавает он. Опорник на него делать не очень хочется, поэтому сдвиг формируется обычным резистивным делителем от источника питания. Само устройство питается от бестрансформаторно блока питания с гасящим конденсатором. Можно конечно найти среднее за предыдущий период, и его потом прикладывать к текущему. <{POST_SNAPBACK}> Лучше всего использовать для сдвига половину опорного напряжения самого АЦП. В Вашем случае это невозможно в принципе? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pat 0 31 октября, 2005 Опубликовано 31 октября, 2005 · Жалоба Лучше всего использовать для сдвига половину опорного напряжения самого АЦП. В Вашем случае это невозможно в принципе? <{POST_SNAPBACK}> Не особо хочется, там 220В через делители, без какой либо развязки. Я думал над этим, но как то стремно питать сдвиг нуля от опроника. Источник питания более мощная вещь. Спасибо всем сейчас пробую варианты, отчет о проделанноей работе напишу завтра Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vm1 0 31 октября, 2005 Опубликовано 31 октября, 2005 · Жалоба А какой у Вас АЦП? Есть АЦП с внутренним сдвигом, питание однополярное а вход двуполярный. Референс внешний? Если да, сдвигайте от него вход, у него должен быть низкий импеданс. Если будете использовать цифровой фильтр по старту загружайте в сумматор значение смещения, чтоб сократить время выхода правильного результата. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться