spirit_1 5 12 марта, 2019 Опубликовано 12 марта, 2019 · Жалоба Добрый день АЦП 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 , Та же ерунда Подскажите что делаю не так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 52 12 марта, 2019 Опубликовано 12 марта, 2019 · Жалоба ничего не понятно, где какие шумы/ступеньки, но попробуйте сделать ФНЧ так: LPF += ((float)ADC-LPF)*0.0001; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 13 марта, 2019 Опубликовано 13 марта, 2019 · Жалоба Вы учитываете что это рекурсивный фильтр и он требует расширения разрядности обработки? Т.е. вам нужно добавить в рассчеты фиксированную точку, отмасштабировать ваши входные данные, затем правильно взять данные, нужной вам разрядности на выходе, с округлением. Но даже в этом случае, у вас все равно будет шум в области младшего разряда И учтите что это у вас CIC фильтр первого порядка, с довольно большим временем установления сигнала, а выборки у вас ограничены по времени. Следовательно, может получится так, что переходный процесс будет дольше чем время выборки) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 52 13 марта, 2019 Опубликовано 13 марта, 2019 · Жалоба да там fpu вроде есть, зачем ему фиксированная точка? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 13 марта, 2019 Опубликовано 13 марта, 2019 · Жалоба 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) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spirit_1 5 13 марта, 2019 Опубликовано 13 марта, 2019 · Жалоба Спасибо, грешил уже на что угодно а баг был софтовый. при превышении небольшого значения срабатывала обработка аларма , на это время менялся период выборок и получался скачок PV_ спасибо что напомнили про этот фильтр, у меня даже функция с ним осталась в коде, но чтото забыл про него сделал его на целых числах, он немного попроще и пошустрее того варианта что я написал Переходный процесс очень небольшой , вполне устраивает По поводу процесса есть другой вопрос У меня после фНЧ стоит ФВЧ HPF_out = K_hpf * (HPF_out + (in_filter * 100 - out_old)); out_old = in_filter * 100; так как мне надо ловить изменения сигнала и отфильтровать постоянную в целом работает но гад долго приходит в себя при включении и длинноватый спад импульса, есть какието варианты как это улучшить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 13 марта, 2019 Опубликовано 13 марта, 2019 · Жалоба А если постоянку измерить и вычесть? Ну или comb фильтром пройти по сигналу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spirit_1 5 14 марта, 2019 Опубликовано 14 марта, 2019 · Жалоба Чуть подробнее распишу Принимаем сигнал с антенны, подаем на синхронный детектор(фаза и частота известны), далее фнч - получаем короткий импульс спадающий по экспонентьте и АЦП в течении максимума импульса получаеться взять 4 отсчета с нормальным уровнем, уманожаем их на константу Подаем эти отсчеты поочередно на цифровой ФНЧ тот что писал выше, ждем следующий пульс и опять то же ФНЧ накапливает импульсы и фильтрует шумы, за счеи накопления повышаем разрядность Регестрирую сигнал сейчас гдето 0.1 от разряда АЦП Соотвественно средний уровень постоянно двигаеться и его надо отслеживать с точностью меньше разряда ацп Как вариант делал еще один ФНЧ с большой постоянной или скользящее среднее и вычислял разность Ну или просто ФВЧ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться