Частота дискретизации АЦП — фильтрация шума

Мне нужно снять показания двух аналоговых датчиков температуры и уровня топлива. Оба они являются аналоговым сигналом, и мне нужно удалить шум из этого показания. И я хочу использовать цифровой фильтр для них. Мой MCU работает на частоте 32 МГц, также я считываю показания АЦП для обоих датчиков каждые 5 мс.

Теперь я хочу уменьшить шум в моем образце, используя внешний аналоговый фильтр и программный цифровой фильтр (IIR и FIR).

Эта ссылка говорит, что мы должны следовать критериям Найквиста для выборки, чтобы избежать возникновения проблемы. https://en.wikipedia.org/wiki/Аналогово-цифровой_преобразователь

Теперь, чтобы разработать цифровой БИХ-фильтр, используйте эту ссылку, чтобы указать об использовании частоты среза. https://stratifylabs.co/embedded%20design%20tips/2013/10/04/Tips-An-Easy-to-Use-Digital-Filter/

Теперь, если я прав, то критерий Найквиста, алиасинг и настройка частоты дискретизации важны для записи аналоговых сигналов, где мы знаем, что человеческий голос <20 000 Гц.

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

Пожалуйста, предложите.

Если вы проводите измерение каждые 5 мс, у вас есть частота дискретизации 200 Гц. Это частота, которую вы должны использовать для определения частоты среза аналогового фильтра.
Вы знаете частоту этих сигналов - температура и уровень топлива (должны) изменяться очень медленно. Я беру фильтры с частотой среза 20 Гц в качестве эмпирического правила для таких сигналов. При желании вы можете измерить полосу пропускания сигнала, используя аналоговый фильтр с более высокой частотой отсечки и БПФ.
@Arsenal Ваш расчет частоты составляет 1 / time_5 мс, но точное время должно быть 5 мс + время преобразования АЦП + задержка обработки программного обеспечения, верно?
Точно так же отсечка вашего цифрового фильтра зависит от того, сколько семплов вы выбрали для фильтрации. На самом деле, вы начали не с того конца. Какова скорость передачи данных , которая представляет интерес, и насколько вам нужно передискретизировать ее, чтобы достичь желаемого отношения сигнал-шум?
@Sean Предположим, для каждого датчика я выбираю 20 образцов для фильтрации, и каждый образец берется каждые 50 мс. Тогда какой должна быть частота среза цифрового БИХ-фильтра?
@user6363 user6363 нет, если вы сэмплируете 5 мс, вы сэмплируете 5 мс. Время преобразования — это просто смещение точного времени, когда берется семпл, но оно не влияет на частоту. Если ваше программное обеспечение настолько медленное и не может обработать семплы за 5 мс, вы, вероятно, не сэмплируете за 5 мс.
Если ваш цифровой фильтр использует 20 выборок, частота среза определяется профилем фильтра и частотой выборки. Цифровые фильтры определяются в выборках, а не в Гц.
Вы должны получить хорошую выборку сигнала, чтобы определить, где находится шум, прежде чем разрабатывать фильтр. Кроме того, какой язык вы используете? Скорее всего, вы найдете библиотеку для простой фильтрации. Проверьте стек DSP.

Ответы (2)

У вас есть частота дискретизации 200 Гц (1/5 мс). Но вы не указали необходимое время отклика для вывода из фильтра. Чтобы найти ответ на этот вопрос, вы должны спросить себя, насколько медленным может быть ответ, прежде чем он вызовет у вас проблему. Т.е. если это уровень топлива и температура автомобиля, то одной минуты достаточно для хорошего времени отклика. Но если это какое-то внутреннее измерение топливной камеры для минитурбинного двигателя, то даже секундная задержка может доставить вам неприятности. У меня не получается определить. (Хорошо, турбина - надуманный и почти бесполезный пример, я не мог придумать лучших примеров, где время задержки в районе одной секунды могло вызвать проблемы).

Вы должны отфильтровать аналоговый сигнал с помощью фильтра нижних частот с частотой среза (частота -3 дБ) меньше, чем частота Найквиста. То же самое с частотой среза в цифровом фильтре. Я бы оставил частоту среза аналоговой фильтрации как можно ближе к частоте Найквиста. Таким образом, вы можете свободно изменять характеристики фильтра по своему усмотрению, изменяя только цифровой фильтр.

Другим критерием проектирования аналогового фильтра является глубина дискретизации (в битах) АЦП. Затухание сигналов выше частоты Найквиста должно быть больше, чем отношение сигнал/шум АЦП. Т.е. 8-битный АЦП, примерно 7-битный сигнал/шум -> демпфирование более 42 дБ на частоте Найквиста, чтобы избежать наложения.

Частота дискретизации 200 Гц -> частота Найквиста = 100 Гц. Частота среза аналоговых нижних частот < 100 Гц. Предполагая, что 8 бит, как в моем примере выше: демпфирование при 100 Гц> 42 дБ

Рекомендуемый аналоговый фильтр: 2. Фильтр порядка (40 дБ/декада). Частота фильтра < 8,8 Гц.

Что касается цифрового фильтра, вы можете фильтровать столько, сколько хотите, если не забываете о необходимом времени отклика.

спасибо .. Пожалуйста, уточните этот момент, что вы имеете в виду здесь «А для цифрового фильтра вы можете фильтровать столько, сколько хотите, если вы помните о необходимом времени отклика». Вы хотите сказать, что вы можете уменьшить частоту среза в цифровом фильтре, верно? Что вы подразумеваете под «учитыванием необходимого времени отклика»? пожалуйста, предложите.
Как я уже писал, вам, вероятно, нужно учитывать время отклика. Если нет, я бы просто установил частоту среза цифрового фильтра на 1 Гц. Я понятия не имею о том, что вы делаете, и поэтому я не знаю, действительно ли мое предложение действительно. Если вы расскажете нам немного больше, мы, скорее всего, сможем дать более точные ответы.
Ваш аналоговый фильтр должен иметь значительно более низкую частоту, чем 3 дБ на частоте Найквиста, если вы хотите избежать наложения спектров.
@Andyaka Да, и чтобы уточнить, что я включил пример с фильтром порядка 2. и 8-битным АЦП. Я надеюсь, что пример поможет понять взаимосвязь между частотой среза, отношением сигнал/шум, частотой Найквиста и проблемами наложения спектров.
@ Берни, у меня нет особых требований от какого-то клиента. Но я прочитал теорию БИХ-фильтров о том, что мы можем уменьшить шум с помощью БИХ-фильтра, и просто хочу реализовать это с помощью прошивки и АЦП Mcu. Так что я немного запутался с тем, что именно нужно обрезать частоту для IIR-фильтра в прошивке.. поэтому поднял этот вопрос.
@Bernie Итак, согласно вашему последнему сообщению, если у нас нет времени отклика, то в идеале возьмите 1 Гц. И предположим, что время отклика от датчика составляет около 10 мс (это означает, что мне нужно считывать данные датчика каждые 10 мс), тогда частота среза цифрового фильтра должна быть> 1/T, где T = 10 мс. Я правильно понял?
@user6363 user6363 Да, 1 Гц был взят из воздуха, но я думаю, что он удовлетворит ваши потребности. Делайте выборку с интервалом 5 мс, как вы указали в исходном вопросе. И остальную часть моего примера решения можно использовать. Также прочитайте техническое описание АЦП, чтобы увидеть, есть ли какие-либо примеры фильтров сглаживания (кроме моего предложения для фильтра 2. порядка). Некоторые АЦП имеют встроенные фильтры (например, преобразователи сигма-дельта). Им может не понадобиться много фильтрации аналогового сигнала, чтобы избежать наложения. Упрощает аналоговый дизайн.
Может ли кто-нибудь помочь мне понять заявление @BernieNor «Затухание сигналов выше частоты Найквиста должно быть больше, чем отношение сигнал/шум АЦП. То есть 8-битный АЦП, примерно 7-битный сигнал/шум -> более 42 Демпфирование дБ на частоте Найквиста, чтобы избежать алиасинга». Где я могу прочитать больше об этом?

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

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

РЕДАКТИРОВАТЬ:
Если у вас есть или вы думаете, что у вас будет неслучайный электрический шум, намного превышающий разрешение, более чем в 5 раз превышающее разрешение, которое вам действительно нужно (а не то, что можно рассчитать), вы можете получить преимущество, добавив аналоговую фильтрацию. Частота среза должна быть около половины вашей частоты дискретизации.

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

Если я беру 20 выборок в секунду, это означает, что я беру выборку каждые 50 мс. То есть сохранить 20 выборок в циклическом массиве из 20 целых чисел, а затем усреднить их каждые 50 мс, чтобы получить точное значение, верно?
Но это усреднение аналогично использованию КИХ-ФИЛЬТРА. Предположим, мне нужно считать 40 аналоговых значений (скажем, с датчика или с выхода операционного усилителя или делителя потенциала), и если я использую 20 выборок каждого датчика, то для выполнения этого потребуется 40*20*sizeof(int) памяти. операции, потери памяти. Я хочу использовать IIR-фильтр, чтобы избежать потери памяти. Теперь, как установить значение параметра частоты среза ALPHA по этой ссылке stratifylabs.co/embedded%20design%20tips/2013/10/04/… ????
Опять же, у меня тот же вопрос, каким должен быть набор параметров частоты среза этих аналоговых сигналов (исходящих от датчика или выхода операционного усилителя или делителя потенциала), чтобы БИХ-фильтр работал точно? пожалуйста, предложите