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

Пробтема промежуточных выборок АЦП

Добрый день

АЦП STM32F429 (12бит) переодически делает выборки сигнала

сигнал имеет небольшой шум в районе +_30 бит

далее подаеться на ФНЧ


LPF_out_B = 0.9999 * LPF_out_B_old + 0.0001 * in_filter * 1000000;
        LPF_out_B_old = LPF_out_B;

Необходимо фиксировать  превышение сигнала за некоторый промежуток времени

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

при изменение сигнала на входе я не могу получить промежуточные значения. Т.е выход ФНЧ имеет четкие ступеньки с шагом 1 бит 

хотя как я понимаю при таких условиях (постояннвя ФНЧ, сигнал плюс шум ) должен быть достаточно плавный рост между уровнями квантования

увеличивал размах сигнала путем умножения на 1000000 ,    Та же ерунда

Подскажите что делаю не так?

 

 

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


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

ничего не понятно, где какие шумы/ступеньки, но попробуйте сделать ФНЧ так:

LPF += ((float)ADC-LPF)*0.0001;

 

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


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

Вы учитываете что это рекурсивный фильтр и он требует расширения разрядности обработки? Т.е. вам нужно добавить в рассчеты фиксированную точку, отмасштабировать ваши входные данные, затем правильно взять данные, нужной вам разрядности на выходе, с округлением. Но даже в этом случае, у вас все равно будет шум в области младшего разряда

И учтите что это у вас CIC фильтр первого порядка, с довольно большим временем установления сигнала, а выборки у вас ограничены по времени. Следовательно, может получится так, что переходный процесс будет дольше чем время выборки)

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


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

34 minutes ago, _pv said:

да там fpu вроде есть, зачем ему фиксированная точка?

она проще. если ТС уйдет на коэффициенты фильтра вида y(n+1) = y(n)*(1-2^-g) + x(n)*1/2^g, то фильтр сведется к суматорам и сдвигам y(n+1) = y(n) - (y(n) >> g) + (x(n)>> g), а если сделать правильное масштабирование и взятие результата, то фильтр выродится вот в такой вид y(n+1) = y(n) - (y(n) >> g) + x(n)

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


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

Спасибо, 

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

PV_ спасибо что напомнили про этот фильтр, у меня даже функция с ним осталась в коде, но чтото забыл про него

сделал его на целых числах, он немного попроще и пошустрее того варианта что я написал

Переходный процесс очень небольшой , вполне устраивает

По поводу процесса есть другой вопрос

У меня после фНЧ стоит ФВЧ 

HPF_out = K_hpf * (HPF_out + (in_filter * 100 - out_old));
    out_old = in_filter * 100;

так как мне надо ловить изменения  сигнала и отфильтровать постоянную

в целом работает но гад долго приходит в себя при включении и длинноватый спад импульса, 

есть какието варианты как это улучшить?

 

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


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

А если постоянку измерить и вычесть? Ну или comb фильтром пройти по сигналу. 

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


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

Чуть подробнее распишу

Принимаем  сигнал с антенны, подаем на синхронный детектор(фаза и частота известны), далее фнч - получаем короткий импульс спадающий по экспонентьте и АЦП

в течении максимума импульса получаеться взять  4 отсчета с нормальным уровнем, уманожаем их на константу

Подаем эти отсчеты поочередно на цифровой ФНЧ тот что писал выше, ждем следующий пульс и опять то же

ФНЧ накапливает импульсы и фильтрует шумы, за счеи накопления повышаем разрядность

Регестрирую сигнал сейчас гдето 0.1  от разряда АЦП

Соотвественно средний уровень постоянно двигаеться и его надо отслеживать с точностью меньше разряда ацп

Как вариант делал еще один ФНЧ с большой постоянной или скользящее среднее и вычислял разность

Ну или просто ФВЧ

 

 

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


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

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

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

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

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

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

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

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

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

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