Динамический notch и резонанс рамы: что резать, а что чинить
Узкий пик в спектре гироскопа можно вырезать notch-фильтром или устранить в железе. Ниже разберём, как по логу отличить шум моторов от резонанса рамы, как bbdoctor находит резонанс и почему он иногда отказывается называть частоту, и какие настройки notch реально стоят в логах Betaflight 4.2–2025.12, INAV 8 и PX4.
Notch, ФНЧ и RPM-фильтр: что убирает каждый и чем ты платишь
Все три фильтра чистят гироскоп до того, как он попадёт в PID, и все три добавляют задержку. Разница в том, что именно они режут:
- ФНЧ (
gyro_lpf1_static_hz,gyro_lpf2_static_hz) гасит всё выше частоты среза, без разбора. Задержка почти одинаковая на всех частотах управления. - RPM-фильтр ставит узкие notch на 1×, 2× и 3× оборотов каждого мотора по телеметрии bidirectional DShot. Он идёт за моторами и не трогает то, что с оборотами не связано. Подробно — в гайде про RPM-фильтр.
- Динамический notch сам ищет самые сильные пики в спектре гироскопа между
dyn_notch_min_hzиdyn_notch_max_hzи ставит на нихdyn_notch_countвырезов на каждую ось. Ему всё равно, откуда пик: от моторов или от рамы. - Статический notch (
gyro_notch1_hz,gyro_notch2_hz) стоит на одной частоте всегда. Это инструмент против одного известного резонанса.
Задержка notch зависит от того, где он стоит и насколько он широкий. Ниже — расчёт для цикла 4 кГц и биквада, устроенного как в Betaflight. Важна задержка на 20–40 Гц: на этих частотах живут движения квадрика.
| Фильтр | Задержка на 20 Гц | На 40 Гц |
|---|---|---|
| PT1 250 Гц | 0,63 мс | 0,61 мс |
| PT1 100 Гц | 1,52 мс | 1,32 мс |
| Статический notch 160 Гц, cutoff 120 (Q 1,71) | 0,60 мс | 0,68 мс |
| Статический notch 469 Гц, cutoff 328 | 0,24 мс | 0,24 мс |
| Динамический на 200 Гц, dyn_notch_q 500 | 0,16 мс | 0,18 мс |
| Динамический на 100 Гц, dyn_notch_q 500 | 0,36 мс | 0,52 мс |
| Динамический на 70 Гц, dyn_notch_q 500 | 0,58 мс | 1,29 мс |
| Динамический на 100 Гц, dyn_notch_q 120 | 1,45 мс | 1,88 мс |
Отсюда два правила. Узкий notch высоко по частоте почти бесплатный. Широкий или низкий notch стоит как хороший ФНЧ. И три notch, стоящие рядом, задерживают сигнал втрое сильнее одного.
Шум моторов или резонанс рамы: диагональ против вертикали
Лучше всего это видно на тепловой карте «газ — частота»: по горизонтали частота, по вертикали газ, яркость — уровень шума. Частота вращения моторов растёт с газом, поэтому их гармоники рисуют диагонали. Резонанс рамы — собственная частота конструкции, и от газа она не зависит. Он рисует вертикальную линию.

Обрати внимание на последнюю деталь: резонанс почти всегда ярче там, где мимо него проходит линия мотора. Мотор — это источник, рама — усилитель. Хорошо это видно на 7-дюймовом квадрике на Betaflight 4.6, где пилот уже поставил статический notch на 160 Гц.

На этом логе bbdoctor резонанс не объявил: линия выше порога лишь примерно в половине интервалов газа, а нужно 60%. И это верно: такой пик стоит на границе между рамой и моторами, и с ним справляются фильтры, которые уже стоят. Шум после фильтров здесь 0,66 °/с, так что трогать фильтры незачем. Но сырой шум 7,9 °/с, и bbdoctor правильно говорит: ищи причину в пропах, моторах и раме.
Как bbdoctor находит резонанс и почему иногда не называет частоту
Логику детектора полезно знать, чтобы читать отчёт:
- Полёт режется на окна по 256 отсчётов с перекрытием 50%. Каждое окно попадает в один из 20 интервалов газа по своему среднему газу. Интервал учитывается, если в нём хотя бы 4 окна.
- Для roll и pitch в каждом интервале считается спектр, а затем «фон» — скользящая медиана по 15 соседним частотам. Шаг сетки — частота записи, делённая на 256: около 4 Гц на логе 1 кГц, около 16 Гц на 4 кГц.
- Частота считается резонансом, если пик на ней выше фона больше чем на 6 дБ хотя бы в 60% интервалов газа. Частоты ниже 60 Гц и в верхних 5% до частоты Найквиста не смотрятся.
- Пики на roll и pitch ближе 10 Гц друг к другу объединяются в один.
Дальше главное. Blackbox в Betaflight при делителе пишет каждый N-й отсчёт без фильтра от наложения спектров. Всё, что выше половины частоты записи, складывается обратно, и пик на 827 Гц в логе 1013 Гц выглядит как 186 Гц. Обратно по логу это не распутать, поэтому bbdoctor перечисляет кандидатов: f, fs − f и fs + f.
| Лог | Запись / цикл PID | Пик в логе | Кандидаты | Вердикт |
|---|---|---|---|---|
| BF 4.5.1, 6S, полёт 1 | 1013 Гц / 4 кГц | 206 Гц roll, +8 дБ, 71% интервалов | 206, 807, 1219 | notch не предлагается |
| BF 4.5.1, 6S, полёт 2 | 1013 Гц / 4 кГц | 186 pitch, 198 roll, +6–7 дБ | 186, 827, 1199 / 198, 815, 1211 | notch не предлагается |
| BF 4.5.1, 6S, полёт 3 | 1013 Гц / 4 кГц | 190 и 226 pitch, 202 roll, +7 дБ | 190, 823, 1203 и т. д. | notch не предлагается |
| INAV 8.0.0, 6S | 995 Гц / 2 кГц | 117 Гц pitch, +12 дБ, 100% интервалов | 117, 878, 1112 | notch не предлагается |
| PX4 1.15.4, 6S | 8013 Гц | 469 Гц pitch, +6 дБ | однозначно | статический notch |
Правило однозначности в коде такое: лог пишется на частоте цикла PID, или запись не ниже 2 кГц и пик ниже половины частоты Найквиста. Для лога 2 кГц это значит «ниже 500 Гц». Три полёта 6S-квадрика — классика: стоит blackbox_sample_rate = 1/4, и настоящий резонанс может сидеть на 186 Гц в лучах или на 827 Гц в стеке. От этого зависит и notch, и то, где искать проблему.

На этих трёх логах bbdoctor пишет «Фильтры: запас есть, но ослаблять рано (задержка 2,2–2,3 мс)». После фильтров шум 0,5–0,6 °/с, но сырой 4,8–7,4 °/с, и есть резонанс. Поднимать срезы, пока механика не исправлена и частота не известна, — значит пустить этот пик в PID.
Настройки динамического notch по версиям
Имена параметров менялись дважды: в 4.2 и в 4.3. Если не уверен, что есть в твоей прошивке, набери в CLI get dyn_notch: он покажет все параметры с таким началом имени.
| Версия | Как включить | Параметры | Заметки |
|---|---|---|---|
| 4.0–4.1 | feature DYNAMIC_FILTER | dyn_notch_range (LOW/MEDIUM/HIGH/AUTO), dyn_notch_width_percent, dyn_notch_q, dyn_notch_min_hz | верхняя граница задаётся пресетом; по умолчанию AUTO, 8, 120, 150 |
| 4.2 | feature DYNAMIC_FILTER | dyn_notch_max_hz вместо range, dyn_notch_min_hz, dyn_notch_width_percent, dyn_notch_q | вики 4.2: с RPM width 0 и Q 250, без RPM — 8 и 120 |
| 4.3, 4.4, 4.5, 4.6, 2025.12 | dyn_notch_count больше 0 | dyn_notch_count (до 5, в 2025.12 до 7), dyn_notch_q, dyn_notch_min_hz, dyn_notch_max_hz | новый алгоритм (SDFT), width и feature убраны; по умолчанию 3 notch, Q 300, 150–600 Гц в 4.3 и 100–600 Гц в 2025.12 |
Что стоит в реальных логах из нашего набора (все с bidirectional DShot, кроме последнего):
| Квадрик | Прошивка | count | Q | min–max, Гц |
|---|---|---|---|---|
| 6S-квадрик, три полёта выше | 4.5.1 | 1 | 500 | 100–600 |
| MASTER5 V2 | 4.5.1 | 2 | 350 | 120–650 |
| Nazgul F5 V2 | 4.4.1 | 2 | 500 | 120–600 |
| GEPRC, F405 | 2025.12.5 | 2 | 400 | 90–400 |
| REKON 7 | 4.6.0 | 3 | 500 | 70–400, плюс статический 160 Гц |
| F745, 4.2.8, RPM не работает (dshot_bidir 0) | 4.2.8 | width 8 | 120 | 150–600 |
Сколько notch. С рабочим RPM-фильтром начинай с одного-двух. Вики 4.3 прямо пишет, что больше двух-трёх нужно редко, а часто хватает одного. Без RPM-фильтра notch работают вместо него: вики советует три-четыре notch с Q около 120–150.
Q. Вики 4.3 называет 300–450 хорошим диапазоном для фристайла. С RPM-фильтром логи держат 350–500. Низкий Q оправдан только без RPM, когда notch должен накрыть размазанный шум моторов.
min_hz и max_hz. Найди на тепловой карте самую низкую линию, которую хочешь поймать (с RPM-фильтром это обычно резонанс, без него — 1× моторов на висении). Поставь dyn_notch_min_hz примерно на 20 Гц ниже. Вики советует держать минимум как можно выше: так меньше задержка. В логах выше это 90–120 Гц на квадриках поменьше и 70 Гц на 7 дюймах, где моторы на газе 20–35% крутятся на 125–155 Гц. dyn_notch_max_hz ставь чуть выше самого высокого нужного пика: чем шире диапазон, тем грубее разрешение.
set dyn_notch_count = 1 set dyn_notch_q = 500 set dyn_notch_min_hz = 100 set dyn_notch_max_hz = 600 save
Это конфиг 6S-квадрика из таблицы, а не универсальный рецепт. Для Betaflight 4.3+ с RPM-фильтром он разумный как отправная точка.
Статический notch как временная мера
Если частота однозначна, bbdoctor даёт команду статического notch: центр — на частоту резонанса, нижний срез — 0,7 от неё. В Betaflight Q считается из центра и среза: Q = f·c / (f² − c²). При c = 0,7f выходит Q ≈ 1,37, и полоса по −3 дБ тянется от 0,7f до 1,43f. Вырез специально широкий. Частота резонанса гуляет от затяжки винтов и температуры, а по тепловой карте лога 4 кГц она известна с точностью до половины шага сетки, около 8 Гц. Если лог 1/1 подтвердит, что резонанс 6S-квадрика действительно на 186 Гц, команда будет такой:
set gyro_notch1_hz = 186 set gyro_notch1_cutoff = 130 save
Пилот 7-дюймового выбрал 160/120: это Q 1,71, вырез чуть уже. По таблице выше такой notch стоит около 0,6 мс на 20 Гц, как PT1 на 250 Гц. Это нормальная цена за один пик, но не повод ставить два «на всякий случай». Вики 4.3 предлагает разумный обмен: если статический notch взял на себя резонанс, который стоит на одной частоте везде, убавь dyn_notch_count на один.
INAV. Статического notch гироскопа в INAV нет вообще (есть только acc_notch_hz для акселерометра), поэтому bbdoctor для INAV команду не даёт. Остаётся динамический: dynamic_gyro_notch_enabled, dynamic_gyro_notch_q, dynamic_gyro_notch_min_hz. В нашем логе INAV стоят Q 250 и минимум 126 Гц. Если лог на полной частоте подтвердит резонанс на 117 Гц, динамический notch туда не дотянется, пока не опустишь минимум примерно до 100. Подробнее — в гайде по blackbox в INAV.
ArduPilot. bbdoctor включает второй гармонический notch в режиме фиксированной частоты, с полосой f/2 и ослаблением 40 дБ. После INS_HNTC2_ENABLE = 1 обнови список параметров, чтобы появились остальные INS_HNTC2_*. Подробнее — в гайде по логам ArduPilot.
PX4. С версии 1.13 это IMU_GYRO_NF0_FRQ и IMU_GYRO_NF0_BW, в 1.12 и раньше — IMU_GYRO_NF_FREQ и IMU_GYRO_NF_BW. Полоса у bbdoctor — 0,3 от частоты. Лог PX4 1.15.4 записан на 8 кГц, пик 469 Гц однозначен, и команды такие:
param set IMU_GYRO_NF0_FRQ 469 param set IMU_GYRO_NF0_BW 141
В том же логе включён FFT-notch (IMU_GYRO_FFT_EN = 1), но его диапазон 30–150 Гц, и до 469 Гц он не достаёт. А IMU_GYRO_CUTOFF = 40 даёт задержку около 5,6 мс. Notch на 469 Гц с полосой 141 Гц стоит около 0,1 мс. Но bbdoctor и здесь пишет «ослаблять рано»: сырой шум по roll 6,4 °/с, сначала механика. Разбор PX4 — в гайде по ULog.
Сначала железо: что проверять по частоте
bbdoctor делит резонансы на два диапазона и подсказывает, куда смотреть. Это та же граница, что в тексте его вывода:
| Точная частота | Что обычно звенит | Что сделать |
|---|---|---|
| 60–250 Гц | лучи и рама, болтающаяся камера, антенна, батарея на слабом ремне | протянуть винты лучей, осмотреть лучи на трещины и расслоение, закрепить камеру и антенну, затянуть ремень и подложить резинку под батарею |
| 250 Гц и выше | стек полётника и ESC на мягких проставках, крепёж, стойки, верхняя дека | проверить проставки (пережатый стек уже не мягкий), гайки стека, стойки и винты верхней пластины |
Перед работой с рамой отключи батарею и сними пропы. Перед ремонтом поставь свежие пропы и проверь моторы: резонанс раскачивают именно они. Как найти виноватый мотор по логу, разобрано в гайде про вибрации. Общая картина шума и фильтров — в гайде про горячие моторы.
Проверка коротким логом на полной частоте
- Включи запись на частоте цикла PID. В Betaflight 4.3+ это
set blackbox_sample_rate = 1/1, в INAV —blackbox_rate_num = 1иblackbox_rate_denom = 1, в PX4 — биты 4 (High rate) и 8 (Raw FIFO high-rate IMU Gyro) вSDLOG_PROFILE, в ArduPilot 4.5+ —INS_RAW_LOG_OPTи бит IMU_RAW вLOG_BITMASK. Флешка будет заполняться в 4 раза быстрее, чем на 1/4. - Проверь, что пишется сырой гироскоп. В 4.5 и новее у него своё поле, в 4.0–4.4 нужен
debug_mode = GYRO_SCALED. Подробности — в гайде по настройке blackbox. - Слетай минуту: висение, плавный разгон по прямой до 70–80% газа, ступеньки газа по несколько секунд. Детектору нужны окна во многих интервалах газа, а не только на висении.
- Загрузи лог в bbdoctor. Если резонанс однозначен, вывод будет называться «Резонанс на X Гц при любом газе», и под ним будут команды notch.
- Сначала исправь механику и слетай ещё раз. Notch ставь, только если пик остался. После него сделай ещё один лог: горб на этой частоте после фильтров должен исчезнуть, а шум после фильтров не должен вырасти.
- Верни обычный делитель записи.
set blackbox_sample_rate = 1/1 save
Ошибки, которые встречаются чаще всего
- Notch на сложенную частоту. Лог 1/4, пик на 186 Гц, notch на 186 Гц, а настоящий резонанс на 827 Гц. В итоге 0,6 мс задержки на частотах управления, а вырезать там нечего.
- Пять notch при рабочем RPM-фильтре. Их задержки складываются, а резать почти нечего. Начни с одного и добавляй, только если на тепловой карте после фильтров видна линия.
- min_hz так низко, что notch лезет в полосу управления. При dyn_notch_q 500 notch, вставший на 70 Гц, стоит 1,29 мс на 40 Гц, а на 100 Гц — 0,52 мс. Ставь минимум под свои моторы, а не «пониже на всякий случай».
- Диапазон не накрывает пик. INAV с минимумом 126 Гц против пика 117 Гц, FFT-notch PX4 до 150 Гц против 469 Гц. Фильтр включён, но не работает.
- Ослабить фильтры, когда резонанс не исправлен. Низкий шум после фильтров ещё не значит, что есть запас: он может держаться ровно на том notch и ФНЧ, которые ты собираешься ослабить.
- Забытый статический notch. После ремонта сделай лог. Если пика нет, убери notch командой
set gyro_notch1_hz = 0, потом коротко повиси и потрогай моторы. Задержка без дела никому не нужна.
И когда ничего не трогать: bbdoctor резонанса не видит, сырой шум ниже 4 °/с (его порог «механика чистая»), шум после фильтров ниже 1 °/с, моторы после полёта тёплые, а не горячие. Notch не лечит и низкочастотные колебания. В одном логе PX4 1.17 bbdoctor нашёл пик на 42 Гц в ошибке (gyro − setpoint) только по pitch, и по фазе моторов выходит, что его раскачивает P. Совет там — снизить P по pitch на 10% и сравнить следующий полёт, а не ставить фильтр. Да и детектор резонансов ниже 60 Гц не смотрит.
Загрузи свой лог в анализатор или посмотри пример отчёта. Конфиг без полёта можно проверить на странице проверки diff: там ловится, например, выключенный динамический notch без RPM-фильтра.
Частые вопросы
Сколько динамических notch-фильтров ставить, если работает RPM-фильтр?
Обычно один-два. RPM-фильтр уже вырезает гармоники каждого мотора, и динамическому notch остаётся ловить то, что с оборотами не связано: резонанс рамы и остатки шума пропов. Вики Betaflight 4.3 пишет, что больше двух-трёх нужно редко, а часто хватает одного. В большинстве наших логов 4.5 стоит dyn_notch_count = 1 с Q 500, в логе 2025.12 — два notch с Q 400. Каждый лишний notch на низкой частоте добавляет задержку.
Что ставить против резонанса рамы: статический или динамический notch?
Сначала чини механику. Если резонанс остался и его частота точно известна по логу 1/1, ставь статический: он стоит ровно на частоте и не уезжает на другие пики. Динамический справится, если частота попадает между dyn_notch_min_hz и dyn_notch_max_hz и ему хватает свободных notch, но с одним notch при RPM-фильтре он будет разрываться между резонансом и остатками шума моторов.
Что означает dyn_notch_q?
Добротность notch, умноженную на 100: dyn_notch_q = 500 — это Q = 5. Ширина полосы по уровню −3 дБ равна частоте, делённой на Q: на 200 Гц при Q 5 это 40 Гц. Чем выше Q, тем уже вырез и меньше задержка в полосе управления, но тем точнее он должен попадать в пик. Без RPM-фильтра вики 4.3 советует Q 120–150, с ним в логах обычно 350–500.
Уберёт ли notch желе на видео?
Нет. Желе — это вибрация самой камеры, а фильтр гироскопа меняет только то, что видит PID-контур. Камеру он не успокоит. Ищи причину в механике: разбалансированный проп, мотор, крепление камеры. Notch помогает косвенно, если вибрацию раскачивают сами моторы, получая шум в командах. Частоту ищи по логу так же, как резонанс.
Обновлено: