Вы когда-нибудь задумывались, почему в рекламе смартфонов графики активности выглядят как идеально гладкие линии, а когда вы подключаете свой первый акселерометр к Arduino, данные на экране напоминают кардиограмму испуганного зайца? Причастны ли к этому шумы датчиков ?
Добро пожаловать в реальный мир. Мир, где идеальных прямых не существует, а каждый электрон — это хаотичный участник бесконечной тепловой пляски. Для начинающего инженера шум датчика — это досадная помеха. Для профессионала — это фундаментальное ограничение, с которым нужно уметь работать.
Сегодня мы препарируем «шум»: узнаем, откуда он берется, почему его нельзя просто «удалить» и какие аппаратные и программные магические пассы помогут вам превратить хаос в прецизионные данные.
1. Великое разочарование: Ожидание vs Реальность
Ожидание: Вы покупаете датчик давления или акселерометр. В даташите написано: «Разрешение 16 бит». Вы ожидаете увидеть на выходе четкое число, которое меняется только тогда, когда меняется физическая величина.
Реальность: Ваше устройство неподвижно лежит на бетонном основании, но последние 4–5 бит в данных постоянно «прыгают». Вместо стабильного значения 100.00 вы видите 99.85, 100.12, 100.05… Это и есть шум.
Шум — это случайное изменение сигнала, которое не несет полезной информации о физическом процессе. Он накладывается на ваш «чистый» сигнал, и ваша задача — понять, где заканчивается реальность и начинается статистическая погрешность кремниевого кристалла.
2. Природа хаоса: Почему они вообще шумят?
Многие начинающие разработчики полагают, что шум — это следствие «плохих китайских компонентов» или некачественной пайки. Но правда гораздо циничнее: даже если вы создадите датчик из сверхчистых материалов, поместите его в криогенную камеру и экранируете свинцовым панцирем толщиной в метр, он всё равно будет шуметь.
Шум — это не дефект производства, это голос термодинамики и квантовой механики. Давайте разберем четыре фундаментальных источника этого хаоса.

А. Тепловой шум (Шум Джонсона — Найквиста)
Это самый «демократичный» вид шума: он есть везде, где есть электрическое сопротивление и температура выше абсолютного нуля.
- Физика процесса: Электроны в проводнике — это не застывшие солдаты, а хаотично мечущиеся частицы. Температура — это, по сути, мера их кинетической энергии. При столкновениях с атомами кристаллической решетки электроны постоянно меняют направление. В каждый конкретный микромомент времени на одном конце резистора электронов может оказаться чуть больше, чем на другом. Это создает случайную разность потенциалов.
- Математика боли: Напряжение шума прямо пропорционально корню из температуры (T) и сопротивления (R).
- Формула:
- Инженерный вывод: Если ваш датчик имеет высокое внутреннее сопротивление (например, пьезокерамика или некоторые химические сенсоры), он будет «шипеть» сам по себе просто от того, что он теплый.
- Что делать: Уменьшать сопротивление цепей или (в экстремальных случаях, как в телескопах) охлаждать сенсор жидким азотом.

Б. Дробовой шум (Shot Noise)
Шоттов шум (в отечественной литературе чаще называемый дробовым шумом) — это фундаментальный вид шума, который возникает из-за того, что электрический ток — это не плавная непрерывная субстанция (как вода в шланге), а поток отдельных дискретных частиц (электронов).
Если тепловой шум (Джонсона) — это «дрожь» стоячих на месте частиц от жары, то шоттов шум — это «стук» летящих частиц о преграду.
Разберем его подробно для нашей статьи на nk9.ru.
Шоттов шум (Shot Noise): Град из электронов
Этот тип шума был впервые описан Вальтером Шоттки в 1918 году при изучении вакуумных ламп, но в современной полупроводниковой электронике он играет еще более коварную роль.
1. Физическая аналогия
Представьте, что вы сыплете сухой песок на тонкий металлический лист. Даже если вы стараетесь сыпать его максимально равномерно, вы не услышите ровного гула. Вы услышите отчетливую «дробь» — это звуки ударов каждой отдельной песчинки.
То же самое происходит в электронных компонентах (особенно в диодах, транзисторах и фотосенсорах). Ток — это поток электронов. Поскольку каждый электрон обладает зарядом и преодолевает потенциальный барьер (например, p-n переход) в случайный момент времени, поток тока всегда слегка «пульсирует». Эти микроскопические флуктуации и есть шоттов шум.
2. Ключевые особенности
- Связь с током: В отличие от теплового шума, шоттов шум зависит от величины тока. Чем больше средний ток через датчик, тем выше амплитуда шума. Но (и это важно!) полезный сигнал растет быстрее, чем этот шум, поэтому при больших токах он менее заметен.
- Независимость от температуры: Шоттов шум не утихнет, даже если вы охладите датчик до космических температур. Это квантовое свойство самой природы электричества.
- Белый спектр: Как и тепловой шум, шоттов шум распределен равномерно по всем частотам. Он «шипит» одинаково и на 100 Гц, и на 100 МГц.
3. Где это становится «адом» для инженера?
Шоттов шум проявляется там, где мы работаем с очень слабыми сигналами:
- Оптические датчики и камеры: Это главная боль. В фотодиоде ток возникает при падении фотонов света. При слабом освещении фотонов прилетает мало. Каждый «стук» фотона-электрона создает дробовой шум. На снимке это выглядит как «цифровое зерно» в тенях. Мы буквально видим дискретность света.
- Датчики на p-n переходах: В любом полупроводниковом датчике (например, температурном диоде) ток проходит через барьер. Этот процесс всегда сопровождается дробовым шумом.
- Химические и газовые сенсоры: Где токи измеряются пикоамперами. На таком уровне «дробь» электронов может полностью забить полезный сигнал.
4. Математика (коротко)
Среднеквадратичный ток дробового шума вычисляется по формуле:
Где:
- — заряд электрона (константа),
- — постоянный ток через переход,
- — полоса пропускания (частота, на которой мы слушаем датчик).
5. Что делать? (Наставление АРК)
Бороться с шоттовым шумом сложнее всего, так как он зашит в саму структуру тока.
- Сужайте полосу (): Если ваш процесс медленный — режьте частоту фильтрами беспощадно. Чем меньше «окно», в которое вы смотрите, тем меньше дроби вы услышите.
- Увеличивайте полезный сигнал: В оптике — используйте линзы большего диаметра, чтобы собрать больше фотонов. Больше «песка» — ровнее поток.
- Осторожно с усилением: Если сигнал уже забит шоттовым шумом, никакой сверхдорогой усилитель не поможет. Он просто усилит «дробь» вместе с сигналом. Очистка должна происходить на этапе физического захвата (сенсора).

В. Розовый шум (Шум 1/f или Мерцательный шум)
Самый загадочный и неприятный вид шума. Если белый шум (тепловой) можно сравнить с равномерным шипением ненастроенного радио, то розовый шум — это низкий гул, рокот или, что чаще в электронике, — медленное и непредсказуемое «плавание» сигнала.
Свое название он получил из-за спектральной аналогии: в видимом свете преобладание низких частот (длинных волн) дает розовый/красный оттенок. В электронике это означает, что мощность шума обратно пропорциональна частоте. Чем ниже частота, тем выше амплитуда шума.
- Почему это бесит: Если от белого шума (теплового) можно избавиться простым усреднением, то розовый шум «плывет» очень медленно. Он выглядит как медленный дрейф показаний. Вы смотрите на датчик давления, и его значения медленно «гуляют» вверх-вниз в течение часа.
1. Физика процесса: Ловушки и несовершенства
Почему природа так несправедлива, что шум растет именно там, где мы хотим измерять (ближе к постоянному току)? Ученые спорят об этом уже сто лет, но основными считаются две модели:
- Модель МакУортера (Ловушки в кристалле): Представьте себе «автобан», по которому летят электроны (канал транзистора). На границе кремния и диэлектрика всегда есть дефекты — «ямы» или «ловушки». Электрон может случайно влететь в такую ловушку и застрять там на случайное время (от микросекунд до минут). Пока он там сидит, он своим зарядом мешает пролетать другим электронам. Сумма миллионов таких случайных «захватов» с разными временами задержки и дает тот самый спектр .
- Модель Хуге (Флуктуации подвижности): Шум возникает не только на поверхности, но и в самом объеме проводника из-за рассеяния носителей заряда на колебаниях кристаллической решетки.
2. Главная подлость: Он не усредняется
Это то, на чем «срезаются» новички.
- Белый шум случаен. Если вы сложите 100 замеров, шум взаимно уничтожится (усреднится), и точность вырастет.
- Розовый шум имеет «память». Если сигнал пошел вверх из-за фликкер-шума, он может оставаться там долго. Вы можете усреднять данные хоть час, но среднее значение будет медленно «гулять» вместе с шумом. Математически: дисперсия розового шума не уменьшается при увеличении времени наблюдения.
3. Угловая частота (Corner Frequency — )
В любом реальном компоненте (ОУ, транзисторе, датчике) есть оба шума: розовый и белый.
- На высоких частотах правит бал белый шум (линия горизонтальна).
- На низких частотах начинает доминировать розовый шум (линия идет круто вверх).
- Точка, где они встречаются, называется Corner Frequency ().
Наставление АРК: Когда выбираешь операционный усилитель для датчика веса или температуры, первым делом смотри на . Если ты измеряешь процесс с частотой 1 Гц, а у твоего усилителя Гц, ты будешь измерять не сигнал, а «дыхание» своего усилителя. Для прецизионных задач ищи компоненты с в районе 1–10 Гц и ниже.
4. Как с этим бороться? (Аппаратный экзорцизм)
Поскольку розовый шум нельзя «переждать» (усреднить), инженеры используют хитрость: уходят в область высоких частот, где розового шума нет.
- Модуляция (Chopping / Чопперы): Мы берем постоянный сигнал с датчика и «рубим» его на высокой частоте (например, 100 кГц). Теперь наш полезный сигнал живет на частоте 100 кГц, где розовый шум микросхемы практически равен нулю. После усиления мы детектируем сигнал обратно в DC. Так работают усилители типа Zero-Drift.
- Auto-Zeroing: Микросхема периодически отключается от датчика, «смотрит», насколько уплыл её собственный ноль, запоминает эту ошибку и вычитает её из реального измерения.
- Выбор материалов:
- Углеродные резисторы — короли розового шума (из-за зернистой структуры контактов). Никогда не ставь их в измерительные цепи.
- Металлопленочные резисторы — шумят в разы меньше.
- Проволочные резисторы — практически лишены розового шума (но обладают индуктивностью).
5. Розовый шум в жизни
Это тот самый «дрейф нуля». Вы включили весы, они показывают «0.00». Через 10 минут, хотя на них ничего не клали, они показывают «0.05». Частично это температурный дрейф, но фундаментальная его часть — это розовый шум кристаллов кремния внутри АЦП.
В Ассоциации АРК говорят: «Если твой график медленно плывет, как облака в июне — не ищи ошибку в коде, ищи фликкер-шум в железе».

Г. Шум квантования (Ошибка АЦП)
Это шум, который мы создаем сами в тот момент, когда превращаем аналоговое напряжение в цифровой код.
Инженерный вывод: Соотношение сигнал/шум для идеального АЦП ограничено формулой дБ, где N — число бит. Для 12 бит это около 74 дБ. Но это в идеале. В реальности шум схемы всегда «съедает» 2–3 бита разрешения.
Физика процесса: Аналоговый мир бесконечен, а память контроллера — нет. Когда 12-битный АЦП преобразует сигнал, он «округляет» его до ближайшего целого числа (ступени). Эта разница между реальным напряжением и его цифровым представлением называется ошибкой квантования.
Ожидание vs Реальность: Вы думаете, что у вас идеальный 12-битный замер. Но на деле младшие 1.5–2 бита — это всегда шум. Если полезный сигнал очень слаб, он может «застрять» внутри одной ступени АЦП, и вы вообще не увидите изменений, пока сигнал не перешагнет порог.

3. Схемотехнический ад: Как мы сами портим сигнал
Даже если вы купили прецизионный датчик с минимальным собственным шумом, ваша печатная плата может превратить его в генератор случайных чисел. В Ассоциации АРК говорят: «Плохая разводка — это налог на глупость, который вы платите точностью измерений».
Разберем три главных всадника «схемотехнического апокалипсиса», которые убивают ваш полезный сигнал.
А. Питание: «Грязная кровь» системы
Современные устройства стремятся к энергоэффективности, поэтому инженеры повсеместно используют импульсные преобразователи (Buck, Boost, SEPIC). Они эффективны, но они — главные источники ВЧ-шума.
- Механизм порчи: Импульсный стабилизатор работает на частотах от 100 кГц до 3 МГц. В моменты переключения транзисторов возникают мощные всплески тока. Если ваш датчик питается от той же линии, эти «иголки» напряжения (Ripple) проходят через внутренние цепи сенсора и подмешиваются к результату измерения.
- Ошибка: Питать аналоговый АЦП или датчик напрямую от выхода DC/DC без дополнительной фильтрации.
- Последствия: На графике вы увидите периодические колебания, частота которых совпадает с частотой работы вашего блока питания. Обычное усреднение здесь помогает плохо, так как шум имеет не случайный, а системный характер.
Б. Земляные петли и возвратные токи (The Ground Trap)
Это самая сложная для понимания тема. Новичок думает, что «земля» — это магический резервуар с потенциалом 0 вольт. Но для инженера земля — это такой же проводник, имеющий сопротивление и индуктивность.
- Механизм порчи: Представьте, что через один и тот же полигон земли течет микроскопический ток от датчика (наноамперы) и импульсный ток от мощного светодиода или мотора (сотни миллиампер). По закону Ома () большой ток создает на сопротивлении дорожки земли падение напряжения.
- Результат: «Ноль» вашего датчика начинает прыгать в такт с миганием светодиода. Процессор видит это как изменение физической величины на датчике.
- Ошибка: Смешивать цифровую и аналоговую землю «где придется» или делать тонкие дорожки земли, которые работают как резисторы.
В. Наводки и кросс-токи (Crosstalk)
Ваша печатная плата — это лес из антенн. Любая дорожка, по которой течет быстро меняющийся ток, создает электромагнитное поле.
- Механизм порчи:
- Емкостная наводка: Если рядом (параллельно) идут дорожка скоростной шины (например, SPI или I2C) и чувствительная линия аналогового сигнала, они образуют паразитный конденсатор. Каждое переключение бита в цифровой линии «пробрасывает» импульс тока в аналоговую линию.
- Индуктивная наводка: Силовые линии создают магнитные поля, которые наводят ЭДС в петлях сигнальных дорожек.
- Ошибка: Прокладывать аналоговые сигналы под (или над) импульсными источниками питания или скоростными цифровыми магистралями без экранирования полигонами земли.
Г. Проблема высокого входного импеданса
Многие современные датчики (особенно химические, газовые или pH-метры) обладают очень высоким выходным сопротивлением.
- Механизм порчи: Линия с высоким импедансом — это идеальный приемник для всех электромагнитных шумов в эфире. Она «собирает» на себя наводки от Wi-Fi, сотовых телефонов и гул электросети 50 Гц.
- Ошибка: Делать длинные дорожки от высокоомного датчика до усилителя.
- Результат: Даже если вы просто поднесете руку к прибору, показания изменятся из-за наведенного статического потенциала.

4. Что делать? Аппаратные методы борьбы
В Ассоциации АРК существует негласное правило: «Программный фильтр — это признак капитуляции перед плохим железом». Если вы не вычистили сигнал на плате, вы будете тратить драгоценные такты процессора на борьбу с тем, что можно было решить одним резистором и конденсатором за пару копеек.
Рассмотрим арсенал аппаратных методов борьбы с шумами, от простых фильтров до продвинутых схемотехнических решений.
А. Гигиена питания: LDO и каскадная фильтрация
Как мы уже выяснили, импульсные блоки питания (SMPS) — это «грязные» источники. Чтобы датчик получал «чистую кровь», используйте многоуровневую очистку:
- LDO (Линейный стабилизатор) как фильтр: Ставьте малошумящий LDO после импульсного преобразователя. Главная характеристика здесь — PSRR (Power Supply Rejection Ratio). Хороший LDO (например, серии Ultra-Low Noise) может подавить пульсации на частотах до 100 кГц на 60–80 дБ.
- Ферритовые бусины (Ferrite Beads): Это «высокочастотные резисторы». На постоянном токе у них нулевое сопротивление, но для ВЧ-помех они представляют собой стену. Установка феррита на входе питания датчика — обязательный стандарт для борьбы с радиочастотными наводками.
- Локальное развязывание (Decoupling): Возле каждой ножки питания должна стоять пара конденсаторов: 0.1 мкФ (керамика для ВЧ-шумов) и 10 мкФ (тантал или полимер для НЧ-колебаний).
- Важно: Конденсаторы должны иметь минимальный ESR (эквивалентное последовательное сопротивление).
Б. Аналоговая фильтрация: RC-цепочки
Самый простой и эффективный метод — ФНЧ (Фильтр нижних частот). Большинство физических величин (температура, давление, вес) меняются медленно, а шумы имеют высокую частоту.
- RC-фильтр: Резистор и конденсатор на входе АЦП.
- Формула среза: .
- Если ваш датчик меняет значения 10 раз в секунду, настройте фильтр на 50–100 Гц. Всё, что выше (шум сети 50 Гц, наводки моторов), будет физически отрезано и не попадет в цифровой мир.
- Активные фильтры: Если сигнал очень слабый и его нужно усилить, используйте операционные усилители (ОУ) в топологии Саллена-Ки. Это позволит не только усилить полезный сигнал, но и круто «срезать» все помехи выше нужной частоты.
В. Дифференциальное считывание (Common Mode Rejection)
Если ваш сигнал должен пройти по длинному проводу через «шумный» цех, обычный провод — это антенна. Используйте дифференциальный сигнал (две линии с противофазным сигналом).
- Инструментальный усилитель (In-Amp): На приеме ставится специальная микросхема, которая вычитает один сигнал из другого.
- Магия: Помеха наводится на оба провода одинаково (синфазно). При вычитании помеха уничтожается, а полезный сигнал (разностный) удваивается. Это называется высоким CMRR (коэффициентом подавления синфазного сигнала).
Г. Изоляция и экранирование
Иногда электромагнитный фон настолько силен, что фильтры не справляются.
- Экранированные кабели: Оплетка кабеля должна быть заземлена только с одной стороны (обычно со стороны приемника), чтобы не создать земляную петлю.
- Гвардейские кольца (Guard Rings): На печатной плате вокруг высокоомных дорожек датчика прокладывается кольцо земли. Оно «перехватывает» токи утечки и наводки с соседних цифровых линий, отправляя их в землю раньше, чем они коснутся чувствительной линии.
- Металлические экраны (Shielding cans): Если на плате рядом стоит мощный Wi-Fi модуль, накройте аналоговую часть датчика припаянным металлическим коробом. Это клетка Фарадея, которая отрежет радиочастотное излучение.
Д. Дифференциальная разводка (Layout)
На самой плате дорожки аналогового сигнала должны идти парой, максимально близко друг к другу. Это гарантирует, что любая наводка «ударит» по обеим дорожкам одинаково, что позволит дифференциальному усилителю её подавить.
Практический совет от nk9.ru:
Если вы проектируете устройство для измерения, например, веса на тензодатчиках:
- Питайте тензомост от отдельного прецизионного ИОН (источника опорного напряжения).
- Поставьте RC-фильтр на каждый вход.
- Используйте 24-битный АЦП со встроенным программируемым усилителем (PGA) и цифровым фильтром (например, ADS1232).
Аппаратная защита — это фундамент. Только когда вы сделали всё возможное в меди и кремнии, можно открывать среду разработки и писать первую строчку программного фильтра. В следующей части мы разберем, как «дочистить» то, что не смогли убрать конденсаторы.
5. Программная магия: Фильтрация данных

А. Скользящее среднее (Simple Moving Average, SMA)
Самый интуитивный и популярный метод среди новичков. Мы берем «окно» из последних N измерений, складываем их и делим на N.
- Как это работает: При поступлении нового значения самое старое выбрасывается из очереди, а новое добавляется.
- Плюсы: Отлично подавляет белый шум (случайные флуктуации). Чем больше окно, тем ровнее линия.
- Минусы (Главный враг — Лаг): SMA вносит огромную фазовую задержку. Если значение датчика резко изменилось, фильтр будет «догонять» его в течение всего размера окна. В системах управления (например, балансировка дрона) такая задержка приведет к автоколебаниям и аварии.
- Совет АРК: Используйте SMA только для медленных процессов — мониторинг температуры или уровня воды в баке.

Б. Медианный фильтр (Median Filter) — «Убийца выбросов»
Если обычное скользящее среднее (SMA) — это «миротворец», который пытается всех примирить и усреднить, то Медианный фильтр — это «суровый судья». Он не идет на компромиссы с аномалиями; он просто вычеркивает их из истории, как будто их никогда не было.
1. Проблема: Когда среднее значение — это ложь
Представьте, что вы измеряете температуру в комнате. Ваши значения: 22, 22, 23, 22, 22. Среднее — 22.2°C. Всё логично. Но вдруг рядом включается мощный компрессор, и из-за наводки датчик выдает один ложный замер: 150. Ваш массив теперь: 22, 22, 150, 22, 22.
- Скользящее среднее выдаст: . Это катастрофа. В комнате не стало жарче, но ваша система управления (например, кондиционер) в панике включится на полную мощность из-за одной единственной искры. Среднее значение «размазало» ошибку по полезным данным, превратив их в мусор.
2. Механика: Как работает «Судья»
Медианный фильтр — это нелинейный алгоритм. Он работает в три этапа:
- Окно (Window): Мы берем последние N отсчетов (важно, чтобы N было нечетным: 3, 5, 7…).
- Сортировка (Sorting): Мы выстраиваем эти значения в ряд от меньшего к большему.
- Выбор центра (Median): Мы берем значение, которое оказалось ровно посередине списка.
Вернемся к нашему примеру: 22, 22, 150, 22, 23.
- Сортируем:
22, 22, 22, 23, 150. - Выбираем центральный элемент (3-й из 5): 22.
- Итог: Выброс
150просто исчез. Он остался в списке «крайним», но не повлиял на результат.
3. Почему это «Магия» для инженера?
- Игнорирование импульсного шума: Медиана — лучший способ борьбы с «иголками» (spikes). Она способна полностью подавить шум, если он занимает менее половины ширины окна.
- Сохранение фронтов: В отличие от усреднения, медиана не «замыливает» резкие, но реальные изменения. Если температура действительно прыгнула с 20 до 30 градусов, медиана переключится на 30 быстро и четко, без долгого «подъема в гору».
4. Обратная сторона медали (Сложность и ресурсы)
За всё нужно платить. У медианы есть две главные проблемы:
- Вычислительная нагрузка: Для среднего арифметического нужно только сложение и деление. Для медианы нужна сортировка. Если ваше окно — 5 элементов, это легко. Если 51 — ваш микроконтроллер (особенно если это слабая Arduino) может «задохнуться», переставляя числа в памяти тысячи раз в секунду.
- Задержка (Latency): Как и любой фильтр на основе окна, он выдает результат с задержкой в отсчетов.
Наставление АРК по использованию Медианы
В Ассоциации Разработчиков и Конструкторов (АРК) медианный фильтр считают «хирургическим инструментом». Его не используют везде подряд, его применяют там, где среда агрессивна.
Заповеди АРК по медиане:
- Заповедь «Нечетного числа»: Всегда бери окно 3, 5 или 7. Не делай окна по 20–50 элементов — на таких масштабах медиана начинает «пожирать» полезную динамику сигнала, превращая его в ступенчатую абстракцию.
- Заповедь «Сортировки вставками»: Если ты пишешь на Си для микроконтроллера, забудь про тяжелый
qsort. Для маленьких окон (до 9 элементов) используй сортировку вставками (Insertion Sort) или фиксированные сети сортировки. Это сэкономит тебе тысячи тактов процессора. - Заповедь «Гибридного подхода»: Самый мощный метод фильтрации — это связка Медиана + EMA. Сначала прогони сигнал через медиану (окно 3 или 5), чтобы «отстрелить» дикие выбросы и иголки, а затем пусти чистый поток в экспоненциальное сглаживание (EMA). Так ты получишь идеально чистую и гладкую линию без аномалий.
- Заповедь «Осторожности с периодикой»: Помни, если частота твоей помехи совпадает с ритмом опроса датчика, медиана может «замереть» на ошибочном значении. Всегда проверяй, что период выбросов намного меньше размера твоего окна.
Пример кода (псевдо-Си) для 3-х элементов:
c
// Самая быстрая медиана для окна 3 (просто сравнения)
float fast_median_3(float a, float b, float c) {
if ((a <= b && b <= c) || (c <= b && b <= a)) return b;
if ((b <= a && a <= c) || (c <= a && a <= b)) return a;
return c;
}
Резюме: Медианный фильтр — это ваш основной щит против электротехнической реальности. Если вокруг сверкают реле, искрят щетки моторов или «фонит» китайский блок питания — ставьте медиану. Она вырежет ложь и оставит только правду.

В. Экспоненциальное сглаживание (Exponential Moving Average, EMA)
Это «король» микроконтроллерной фильтрации. Он дает результат, похожий на работу аппаратной RC-цепочки, но в коде.
- Как это работает: Мы говорим: «Новое отфильтрованное значение — это смесь 10% текущего замера и 90% предыдущего накопленного результата».
- Формула:
- — коэффициент сглаживания (от 0 до 1). Чем меньше , тем сильнее фильтрация и больше задержка.
- Плюсы: Требует хранения всего одной переменной в памяти. Никаких массивов и циклов. Работает невероятно быстро.
- Минусы: Так же, как и SMA, вносит задержку при резких изменениях.

Г. Комплементарный фильтр (Complementary Filter)
Применяется, когда у нас есть два датчика, дополняющие друг друга (классика: акселерометр + гироскоп).
- Суть: Мы берем «медленные», но точные в долгосроке данные от одного датчика и «быстрые», но дрейфующие данные от другого.
- Пример: Угол = 0.98 * (Угол + Гироскоп * dt) + 0.02 * (Акселерометр).
- Результат: Чистый, быстрый сигнал без дрейфа и лишних шумов.

Д. Фильтр Винера: Статистический микроскоп
Если фильтр Калмана — это «король» динамических систем, то фильтр Винера — это «золотой стандарт» для восстановления стационарных сигналов, погребенных под слоем шума.
- Как это работает: В отличие от простых фильтров, которые просто «срезают» высокие частоты, фильтр Винера работает на основе статистического анализа. Он требует предварительных знаний о спектральной плотности мощности полезного сигнала и шума. Фильтр вычисляет такую передаточную функцию, которая минимизирует среднеквадратичную ошибку между чистым и зашумленным сигналом.
- Проще говоря: Он знает «почерк» вашего шума и «голос» вашего сигнала. Он подавляет те частоты, где шум доминирует, и оставляет те, где живет полезная информация.
- Плюсы: Это оптимальный линейный фильтр. Он дает наилучшее теоретически возможное восстановление сигнала, если характеристики шума не меняются во времени (стационарность).
- Минусы: Требует серьезных вычислительных мощностей (часто реализуется через быстрое преобразование Фурье — FFT). Если характер шума резко изменился (например, вы включили рядом мощный мотор), фильтр Винера перестанет быть эффективным, пока вы не пересчитаете его коэффициенты.
- Применение: Очистка аудиосигналов от постоянного фона, восстановление изображений, прецизионные измерения в геофизике и медицине.

Е. Фильтр Калмана (Kalman Filter) — Ультимативное оружие
Если медианный фильтр — это «судья», а скользящее среднее — «миротворец», то фильтр Калмана — это «пророк». Это не просто способ сглаживания данных; это математический алгоритм, который объединяет физику процесса и теорию вероятности, чтобы вычислить наиболее вероятное состояние системы в условиях хаоса.
Именно благодаря Калману стали возможны полеты «Аполлонов» на Луну, работа современных GPS-навигаторов и стабильность квадрокоптеров.
1. Философия Калмана: Предсказание vs Измерение
Суть фильтра Калмана заключается в бесконечном цикле из двух шагов: Предсказание и Коррекция.
- Шаг предсказания (A priori): Основываясь на законах физики (например, зная предыдущую скорость и время), алгоритм рассчитывает: «Где я должен находиться сейчас?».
- Шаг измерения (A posteriori): В этот момент поступают данные с «грязного» и шумного датчика.
- Слияние: Алгоритм сравнивает предсказание и измерение. Он знает, насколько точна его физическая модель и насколько шумен его датчик. На основе этого он вычисляет Коэффициент Калмана (K) — степень доверия.
Если датчик сильно шумит, Калман больше верит своей физической модели. Если система ведет себя непредсказуемо, он больше доверяет датчику.
2. Почему это лучше всего остального?
- Минимальная задержка: В отличие от скользящего среднего, Калману не нужно ждать накопления массива данных. Он работает рекурсивно, используя только результат предыдущего шага.
- Работа с косвенными данными: Калман может вычислить скорость, имея только шумные данные о координатах.
- Оптимальность: Математически доказано, что для систем с белым шумом фильтр Калмана дает наилучшую возможную оценку состояния.
3. Параметры настройки (Те самые «ручки», которые крутит инженер)
Чтобы Калман заработал на nk9.ru, вам нужно настроить два ключевых параметра:
- Q (Process Noise Covariance): Насколько мы не доверяем нашей математической модели. Если Q большой, фильтр считает, что система может совершать резкие, непредсказуемые маневры.
- (Measurement Noise Covariance): Насколько сильно шумит наш датчик. Чем выше шум датчика, тем больше Калман будет его «игнорировать», полагаясь на предсказание.
4. Пример из жизни: Дрон в полете
Представьте дрон. Его акселерометр бешено трясется от вибрации моторов (огромный шум).
- Обычный фильтр: Сгладит данные так сильно, что дрон станет «ватным» и упадет при резком порыве ветра.
- Калман: Он знает массу дрона, тягу моторов и текущую скорость. Он понимает: «Дрон не может мгновенно прыгнуть на метр вверх, это шум датчика. Но он может плавно наклониться, это я учту». Результат — идеально стабильный полет.
Наставление АРК по использованию Калмана
В Ассоциации Разработчиков и Конструкторов (АРК) к Калману относятся с глубоким уважением. Это тяжелая артиллерия, и использовать её нужно с умом.
Заповеди АРК по Калману:
- Заповедь «Пушки по воробьям»: Не используй Калмана для фильтрации температуры или уровня заряда батареи. Это избыточно. Для медленных процессов достаточно экспоненциального сглаживания (EMA). Калман нужен там, где есть динамика и инерция (движение, давление, поток).
- Заповедь «Матричного проклятия»: Если ты работаешь на простом 8-битном контроллере (типа ATMega), полноценный многомерный Калман (с матрицами) «съест» всё процессорное время. Для таких случаев используй одномерный фильтр Калмана (Scalar Kalman). Он помещается в три строки кода и дает отличный результат.
- Заповедь «Честного R»: Не подбирай параметр шума датчика (R) «на глаз». Положи датчик неподвижно, сними 1000 показаний и вычисли их дисперсию. Это и будет твой реальный R. Честность в цифрах — залог чистого сигнала.
- Заповедь «Моделирования»: Калман силен настолько, насколько хороша твоя физическая модель. Если ты не учел в модели ускорение, а оно есть — фильтр будет постоянно «отставать» от реальности.
Простейший одномерный Калман на Си:
c
float kalman_filter(float measurement) {
static float x = 0; // Оценка состояния
static float p = 1; // Ошибка оценки
static float q = 0.125; // Шум процесса
static float r = 4; // Шум измерения
static float k; // Коэффициент Калмана
// Предсказание
p = p + q;
// Коррекция
k = p / (p + r);
x = x + k * (measurement - x);
p = (1 - k) * p;
return x;
}
E.2. Профессиональная реализация: Структурный подход
Этот код позволяет создать столько независимых фильтров, сколько нужно, просто объявив новую структуру.
c
#include <stdio.h>
// Структура для хранения состояния фильтра
typedef struct {
float q; // Шум процесса (Process Noise Covariance)
float r; // Шум измерения (Measurement Noise Covariance)
float x; // Оцененное значение (Value)
float p; // Ошибка оценки (Estimation Error Covariance)
float k; // Коэффициент Калмана (Kalman Gain)
} Kalman_t;
/**
* Инициализация фильтра
* @param kf - указатель на структуру
* @param q - шум процесса (подбирается экспериментально, обычно 0.001 - 0.1)
* @param r - шум измерения (дисперсия датчика)
* @param initial_value - первое значение с датчика
*/
void kalman_init(Kalman_t *kf, float q, float r, float initial_value) {
kf->q = q;
kf->r = r;
kf->x = initial_value;
kf->p = 1.0f; // Начальная ошибка (можно поставить 1.0)
}
/**
* Обновление фильтра
* @param kf - указатель на структуру
* @param measurement - новое "грязное" значение с датчика
* @return float - очищенное значение
*/
float kalman_update(Kalman_t *kf, float measurement) {
// 1. Предсказание (Prediction)
// В одномерном случае x остается прежним, растет только ошибка
kf->p = kf->p + kf->q;
// 2. Коррекция (Measurement Update)
kf->k = kf->p / (kf->p + kf->r);
kf->x = kf->x + kf->k * (measurement - kf->x);
kf->p = (1.0f - kf->k) * kf->p;
return kf->x;
}
// Пример использования на nk9.ru:
int main() {
Kalman_t sensor_accel_x;
kalman_init(&sensor_accel_x, 0.01, 0.5, 0.0);
float raw_data[] = {1.1, 0.9, 1.2, 0.8, 1.0, 3.5, 1.0}; // 3.5 - это выброс
for(int i = 0; i < 7; i++) {
float clean = kalman_update(&sensor_accel_x, raw_data[i]);
printf("Raw: %.2f | Clean: %.2f\n", raw_data[i], clean);
}
return 0;
}
E.3. Целочисленная оптимизация (Fixed-Point)
Если вы работаете на «голом» STM32F0, AVR или другом МК без математического сопроцессора (FPU), операции с float могут быть слишком медленными. В Ассоциации АРК для таких случаев мы используем целочисленную арифметику с фиксированной запятой.
Здесь значения умножаются на 1024 (сдвиг на 10 бит), чтобы сохранить точность.
c
#include <stdint.h>
typedef struct {
int32_t q; // Шум процесса (масштабирован)
int32_t r; // Шум измерения (масштабирован)
int32_t x; // Значение
int32_t p; // Ошибка
} KalmanInt_t;
/**
* Обновление целочисленного фильтра
* Все входные данные должны быть умножены на 1024 (или << 10)
*/
int32_t kalman_update_int(KalmanInt_t *kf, int32_t measurement) {
// Предсказание
kf->p = kf->p + kf->q;
// Вычисление коэффициента K (масштабирование, чтобы избежать float)
// k = p / (p + r)
int32_t k = (kf->p << 10) / (kf->p + kf->r);
// Коррекция
// x = x + k * (measurement - x)
kf->x = kf->x + ((k * (measurement - kf->x)) >> 10);
// p = (1 - k) * p
kf->p = ((1024 - k) * kf->p) >> 10;
return kf->x;
}
Наставление АРК по коду:
- Проблема переполнения: В целочисленной версии (Fixed-Point) внимательно следите за тем, чтобы
k * (measurement - x)не вылезло за пределыint32_t. Если датчик 16-битный, а множитель 1024 (10 бит), то запас есть. - Частота вызова: Калман очень чувствителен к стабильности времени. Вызывайте функцию
updateстрого через равные промежутки времени (например, по прерыванию таймера). Если время между вызовами «гуляет», физическая модель предсказания ломается. - Авто-настройка R: Вы можете сделать фильтр адаптивным. Если система долго находится в покое, вы можете программно вычислить дисперсию шума и обновить значение
kf->r.
Код — это всего лишь инструмент. Магия Калмана — в правильном подборе коэффициентов Q и R под вашу физическую реальность.
Резюме: Фильтр Калмана — это интеллектуальный мост между шумной реальностью и чистой математикой. Он сложнее в настройке, чем медиана, но в задачах навигации и управления движением ему нет равных. Овладев этим инструментом, вы переходите из лиги «ардуинщиков» в высшую лигу системных инженеров.
Практическое наставление от АРК по софту:
- Соблюдайте частоту Найквиста: Частота дискретизации (опроса датчика) должна быть как минимум в 2 раза выше, чем самая высокая частота шума, который вы хотите отфильтровать. В реальности — лучше в 10 раз выше.
- Не фильтруйте всё подряд: Если шум не мешает работе логики — оставьте его. Излишняя фильтрация делает систему «ватной» и неотзывчивой. Любой фильтр — это задержка (Phase Shift), помните об этом.
- Используйте целочисленную арифметику: Если ваш контроллер слаб, пересчитайте фильтры на целые числа (фиксированная запятая). Это ускорит работу в десятки раз.
- Сначала Винер, потом Калман? В сверхсложных системах часто используют каскады: сначала статистическая очистка сигнала (Винер), а затем его использование в модели предсказания (Калман). Но для 99% задач достаточно одного грамотно настроенного EMA-фильтра или медианы.
Цифровой фильтр — это мощный инструмент, но он не может создать информацию там, где её нет. Если полезный сигнал полностью утонул в шумах из-за плохой разводки платы, математика лишь выдаст вам «гладкую ложь». Поэтому сначала — чистое железо, и только потом — чистый код.

6. Характеристики шума, о которых не говорят (Тайны даташитов)
Когда инженер открывает раздел «Noise Characteristics» в документации на датчик, он обычно видит одну-две цифры (например, среднеквадратичное значение шума RMS). Но это лишь верхушка айсберга. Существуют параметры, которые производители не любят выносить на первую страницу, потому что именно там скрыта истинная цена компонента.
А. Плотность спектрального шума (Noise Density)
Часто в даташитах вы видите странную единицу измерения: (для акселерометров) или (для операционных усилителей). Что это за «корень из Герца»?
- Суть: Шум распределен по частоте. Чем шире полоса пропускания (Bandwidth), которую вы используете, тем больше шума «залетает» в вашу систему.
- Скрытая ловушка: Если вы увеличиваете частоту опроса датчика (ODR), вы автоматически увеличиваете и общее количество шума.
- Инженерный расчет: Чтобы понять реальный размах «тряски» (Peak-to-Peak), вам нужно умножить Noise Density на корень из вашей полосы пропускания и еще на коэффициент 6.6 (для охвата 99.9% вероятности).
- Наставление АРК: Никогда не смотри на «типовое значение». Всегда считай шум под свою конкретную частоту фильтрации.
Б. ENOB (Effective Number of Bits) — Горькая правда о разрядности
Производитель пишет: «АЦП 24 бита». Новичок радуется. Профессионал ищет параметр ENOB.
- Суть: Из-за внутренних шумов микросхемы младшие биты всегда будут хаотично меняться. ENOB — это реальное количество бит, в которых содержится полезная информация, а не мусор.
- Реальность: У «24-битного» АЦП эффективная разрядность может составлять всего 18–19 бит. Остальные 5 бит — это просто «цифровой шум», который вы купили за свои деньги.
- Инженерный вывод: Если ваш ENOB равен 12 битам, то использование 16-битного формата данных в коде — это просто трата памяти на хранение хаоса.
В. Дрейф нуля и температурный гистерезис (The Ghost in the Machine)
Шум — это быстрая «тряска». Но есть «медленный шум», который гораздо опаснее. Это дрейф.
- Bias Instability (Нестабильность смещения): Вы откалибровали датчик в 12:00. В 13:00 его «ноль» уплыл. Это результат розового шума (1/f). Он не усредняется!
- Температурный гистерезис: Это «память» датчика. Если вы нагрели датчик до 50°C, а потом охладили обратно до 20°C, его показания могут не вернуться в исходную точку. Кристалл кремния испытал механическое напряжение и «запомнил» его.
- Наставление АРК: В прецизионных системах калибровка — это не разовое действие, а постоянный процесс. Если твой алгоритм не учитывает текущую температуру кристалла, грош цена твоим фильтрам.
Г. Когерентные и коррелированные шумы
Большинство фильтров (включая скользящее среднее) исходят из того, что шум случаен (белый шум). Но на плате часто живет коррелированный шум.
- Пример: Рядом с датчиком работает микроконтроллер. Каждый раз, когда он обращается к памяти, по цепям питания проходит импульс. Этот импульс повторяется с определенной частотой.
- Проблема: Такой шум «бьет» синхронно с вашим измерением. Усреднение его не уберет, оно лишь превратит его в постоянную ошибку.
- Что делать: Использовать технику «дизеринга» (рандомизации моментов замера) или аппаратную синхронизацию АЦП с периодами «тишины» процессора.
Д. Эффект алиасинга (Aliasing)
Это когда высокочастотный шум «притворяется» низкочастотным полезным сигналом.
- Суть: Если ваш датчик вибрирует на частоте 1000 Гц, а вы опрашиваете его на частоте 100 Гц, вы не просто потеряете информацию — вы получите в данных ложные колебания, которых нет в реальности.
- Инженерный вывод: На входе любого АЦП обязан стоять аналоговый антиалайзинговый фильтр (простая RC-цепочка), который «задушит» все частоты выше половины частоты дискретизации.
Резюме для инженера:
Характеристики шума — это не скучные цифры в конце PDF-файла. Это физические границы вашего проекта.
- ENOB скажет вам, насколько точным будет ваш прибор на самом деле.
- Noise Density позволит рассчитать необходимую глубину фильтрации.
- Bias Instability определит, как часто вам придется мучить пользователя кнопкой «Калибровка».
Помните: Маркетинг продает биты, а физика выдает шумы. Чтобы стать мастером, вы должны научиться видеть за разрядностью реальный шумовой порог.
В заключительной части мы соберем всё воедино и дадим финальные рекомендации по выживанию в мире, где энтропия всегда стремится испортить ваши данные.
7. Наставление от АРК: Инженерный кодекс борьбы с энтропией
В Ассоциации Разработчиков и Конструкторов (АРК) к шуму относятся не как к «багу», а как к проверке профпригодности инженера. Если ваша система шумит — значит, вы где-то проявили небрежность или высокомерие.
Заповеди АРК по работе с сигналом:
- Заповедь «Чистого истока»: Никогда не питай аналоговый фронтенд напрямую от цифровой шины. Если ты пожалел 30 центов на отдельный LDO с высоким PSRR для датчика — ты не инженер, ты «оптимизатор», и расплатишься за это неделями отладки софта. Чистое питание — это не роскошь, а право каждого наноампера.
- Заповедь «Осциллографа»: Если ты пытаешься бороться с шумом, не глядя на сигнал осциллографом — ты гадаешь на кофейной гуще. Ты обязан знать спектр своего шума. Это «белая» тепловая рябь или «грязные» 50 Гц от сети? Или, может, это звон твоего собственного ШИМ-контроллера? Не зная врага в лицо, ты будешь фильтровать воздух.
- Заповедь «Лишних бит»: Не будь жертвой маркетинга. 24-битный АЦП в руках дилетанта превращается в очень дорогой 8-битный. Если твой шум по амплитуде перекрывает 10 младших бит, то эти биты — ложь. Твоя задача — не увеличить разрешение, а снизить шумовой порог (Noise Floor).
- Заповедь «Железного фильтра»: Любая программная фильтрация — это костыль. Сначала сделай всё возможное в железе: RC-цепочки, экранирование, дифференциальные пары. Программный фильтр должен лишь «подметать» остатки, а не выгребать авгиевы конюшни плохой разводки.
- Заповедь «Синхронности»: Помни, что АЦП — это не мгновенное око. Если в момент замера под боком «пыхтит» радиомодуль или щелкает реле — твой замер мусор. Синхронизируй моменты измерения с периодами «тишины» системы.
- Заповедь «Термостабильности»: Кремний — это живой организм, он «дышит» и «плывет» вместе с температурой. Если твой датчик выдает стабильные, но неверные данные при нагреве — это не шум, это дрейф нуля. Если датчик плывет от нагрева — делайте калибровку. Измерьте показания при 20°C и 60°C и введите в код поправочный коэффициент.
Заключение
Шум — это не враг, которого нужно уничтожить (это невозможно). Шум — это партнер, чей характер нужно изучить. Хороший инженер всегда знает уровень шума своей системы и проектирует устройство так, чтобы полезный сигнал был как минимум в 3–5 раз выше этого уровня (соотношение SNR — Signal-to-Noise Ratio).
Не бойтесь «грязных» данных на осциллографе. Бойтесь непонимания того, как превратить их в чистые цифры. В конечном итоге, инженерия — это искусство находить истину в океане случайных помех.
А какой фильтр ваш любимый? Доверяете ли вы Калману или предпочитаете старое доброе среднее арифметическое? Пишете ли вы сложные фильтры или верите в силу экранированного кабеля? Обсуждаем в комментариях!
