bbdoctor
Діагностика дрона за логом: Betaflight, INAV, ArduPilot, PX4
RUENESPTUA

Dynamic Notch і резонанс рами: що фільтрувати, а що лагодити

Різкий пік у спектрі гіроскопа можна зрізати notch-фільтром або усунути його джерело. У цьому посібнику показано, як відрізнити шум моторів від резонансу рами в логу, як bbdoctor виявляє резонанс і чому іноді не називає його частоту, а також які налаштування notch використовують пілоти в реальних логах Betaflight 4.2–2025.12, INAV 8 і PX4.

Notch, lowpass і RPM-фільтр: що прибирає кожен і якою ціною

Усі ці фільтри очищають сигнал гіроскопа перед PID-контролером і додають затримку. Відрізняються вони тим, на що реагують:

Затримка notch залежить від його частоти та ширини. Наведені нижче значення обчислено для контуру 4 кГц із бікуадом у стилі Betaflight. Важлива затримка на 20–40 Гц — саме в цьому діапазоні відбувається основний рух дрона.

ФільтрЗатримка на 20 ГцНа 40 Гц
PT1 250 Гц0.63 мс0.61 мс
PT1 100 Гц1.52 мс1.32 мс
Статичний notch 160 Гц, зріз 120 (Q 1.71)0.60 мс0.68 мс
Статичний notch 469 Гц, зріз 3280.24 мс0.24 мс
Динамічний notch на 200 Гц, dyn_notch_q 5000.16 мс0.18 мс
Динамічний notch на 100 Гц, dyn_notch_q 5000.36 мс0.52 мс
Динамічний notch на 70 Гц, dyn_notch_q 5000.58 мс1.29 мс
Динамічний notch на 100 Гц, dyn_notch_q 1201.45 мс1.88 мс

Звідси два правила. Вузький notch у верхній частині спектра майже нічого не коштує, а широкий або низькочастотний може затримувати сигнал не менше, ніж пристойний lowpass. Три notch поруч додають утричі більшу затримку, ніж один.

Шум моторів чи резонанс рами: діагональні та вертикальні лінії

Найнаочніше це видно на тепловій карті газу: частота по горизонталі, газ угору, яскравість показує рівень шуму. Зі збільшенням газу мотори обертаються швидше, тому їхні гармоніки утворюють діагональні лінії. Резонанс рами — це власна частота конструкції, на яку газ не впливає, тому він утворює вертикальну лінію.

Необроблені теплові карти roll і pitch гіроскопа дрона 6S на Betaflight 4.5.1: вертикальні смуги біля 198 і 186 Гц простягаються від малого газу до 85 відсотків
Необроблений сигнал гіроскопа дрона 6S на Betaflight 4.5.1, записаний на 1013 Гц. На газу зависання (20–30%) мотори обертаються приблизно на 192 Гц, а вище 80% — приблизно на 467 Гц. Водночас смуги на 198 Гц (roll) і 186 Гц (pitch) лишаються на місці за будь-якого газу. Найяскравіші вони на 20–40%, де перша гармоніка моторів проходить крізь них і розгойдує раму.

Важливо, що резонанс майже завжди найяскравіший там, де лінія мотора перетинає його. Джерело — мотор, а рама підсилює вібрацію. Це добре видно на 7-дюймовому дроні з Betaflight 4.6. Пілот уже встановив статичний notch на 160 Гц.

Теплові карти pitch 7-дюймового дрона: ліворуч сирий сигнал гіроскопа з вертикальною лінією біля 162 Гц, яку перетинає діагональ моторів; праворуч відфільтрований сигнал, майже темний у тій самій шкалі
7-дюймовий дрон, Betaflight 4.6.0, запис на 1980 Гц, обидві карти мають однакову шкалу кольорів. Ліворуч сирий сигнал гіроскопа: лінія біля 162 Гц на 16–22 дБ вища за сусідні частоти на газу 25–40%, коли мотори обертаються на 139–178 Гц, і лише на 0–8 дБ вища за інших значень газу. Праворуч відфільтрований сигнал: на 162 Гц і газу 30–40% рівень падає з +4…+5 дБ до приблизно −39 дБ.

bbdoctor не назвав це резонансом: лінія перевищує поріг лише приблизно в половині діапазонів газу, а потрібно 60%. Це обґрунтоване рішення. Такий пік — на межі між резонансом рами й шумом моторів, а наявні фільтри вже з ним справляються. Відфільтрований шум тут становить 0.66 град/с, тож чіпати фільтри немає підстав. Сирий шум, однак, дорівнює 7.9 град/с, і bbdoctor слушно вказує на пропелери, мотори та раму.

Як bbdoctor знаходить резонанс і чому іноді не називає частоту

Розуміння роботи детектора допоможе читати звіт:

  1. Політ розбивається на вікна по 256 відліків із перекриттям 50%. Кожне вікно потрапляє в один із 20 діапазонів газу за його середнім значенням. Діапазон враховується, якщо в ньому є щонайменше 4 вікна.
  2. Для roll і pitch обчислюється спектр кожного діапазону, а «підлога» — це ковзна медіана за 15 сусідніми частотами. Крок сітки дорівнює частоті запису, поділеній на 256: приблизно 4 Гц у логу 1 кГц і 16 Гц у логу 4 кГц.
  3. Частота вважається резонансною, якщо її пік перевищує підлогу більш ніж на 6 дБ щонайменше у 60% діапазонів газу. Ігноруються частоти нижче 60 Гц і верхні 5% діапазону до частоти Найквіста.
  4. Піки roll і pitch, віддалені не більш ніж на 10 Гц, об’єднуються в один.

Якщо в Betaflight задано дільник запису, blackbox зберігає кожен N-й відлік без фільтра проти накладання спектрів. Частоти вище половини частоти запису відображаються нижче, тому пік 827 Гц у логу 1013 Гц видно як 186 Гц. Сам лог не дає змоги це виправити, тому bbdoctor показує можливі частоти: f, fs − f і fs + f.

ЛогЗапис / контур PIDПік у логуМожливі частотиВисновок
BF 4.5.1, 6S, політ 11013 Гц / 4 кГц206 Гц roll, +8 дБ, 71% діапазонів206, 807, 1219notch не рекомендовано
BF 4.5.1, 6S, політ 21013 Гц / 4 кГц186 pitch, 198 roll, +6–7 дБ186, 827, 1199 / 198, 815, 1211notch не рекомендовано
BF 4.5.1, 6S, політ 31013 Гц / 4 кГц190 і 226 pitch, 202 roll, +7 дБ190, 823, 1203 тощоnotch не рекомендовано
INAV 8.0.0, 6S995 Гц / 2 кГц117 Гц pitch, +12 дБ, 100% діапазонів117, 878, 1112notch не рекомендовано
PX4 1.15.4, 6S8013 Гц469 Гц pitch, +6 дБоднозначна частотастатичний notch

Згідно з кодом, частота однозначна, якщо лог записано з частотою контуру PID або якщо запис ведеться на частоті від 2 кГц і пік розташований нижче половини частоти Найквіста. Для логу 2 кГц це означає нижче 500 Гц. Три польоти дрона 6S — показовий приклад. У них задано blackbox_sample_rate = 1/4, тож справжній резонанс може бути на 186 Гц у променях або на 827 Гц у стеку. Від цього залежить і notch, і те, де шукати проблему.

Спектри roll і pitch до та після фільтрації: сирий сигнал гіроскопа має піки на 202 Гц roll і 190 та 226 Гц pitch, відфільтрований сигнал на 26–28 дБ нижчий
Третій політ того самого дрона 6S, спектр за весь політ. Сірим показано сирий сигнал гіроскопа (піки від −1 до −3 дБ на 202 Гц roll, 190 і 226 Гц pitch), синім — сигнал після фільтрації (−28…−30 дБ). RPM-фільтр, один динамічний notch і lowpass-фільтри знижують ці піки на 26–28 дБ, але невеликі виступи на тих самих частотах усе одно залишаються.

Для всіх трьох логів bbdoctor повідомляє: «Фільтри: запас є, але послаблювати їх зарано (затримка 2.2–2.3 мс)». Відфільтрований шум становить 0.5–0.6 град/с, але сирий сигнал гіроскопа має 4.8–7.4 град/с і містить резонанс. Підвищення частот зрізу до ремонту механіки й визначення частоти просто пропустить цей пік до PID-контурів.

Налаштування Dynamic Notch у різних версіях Betaflight

Назви параметрів змінювалися двічі — у версіях 4.2 і 4.3. Не знаєш, що є у твоїй прошивці? Введи в CLI get dyn_notch, щоб побачити всі відповідні параметри.

ВерсіяЯк увімкнутиПараметриПримітки
4.0–4.1feature DYNAMIC_FILTERdyn_notch_range (LOW/MEDIUM/HIGH/AUTO), dyn_notch_width_percent, dyn_notch_q, dyn_notch_min_hzверхня межа задається пресетом; стандартні значення: AUTO, 8, 120, 150
4.2feature DYNAMIC_FILTERdyn_notch_max_hz замінює range, а також є dyn_notch_min_hz, dyn_notch_width_percent, dyn_notch_qу примітках до 4.2: ширина 0 і Q 250 з RPM-фільтром, 8 і 120 без нього
4.3, 4.4, 4.5, 4.6, 2025.12dyn_notch_count більше 0dyn_notch_count (до 5, до 7 у 2025.12), dyn_notch_q, dyn_notch_min_hz, dyn_notch_max_hzновий алгоритм SDFT; ширину й feature прибрали; стандартні значення: 3 notch, Q 300, 150–600 Гц у 4.3, 100–600 Гц у 2025.12

Ось налаштування з реальних логів нашої добірки (у всіх, крім останнього, працює двонаправлений DShot):

ДронПрошивкаcountQмін.–макс., Гц
Дрон 6S, три польоти вище4.5.11500100–600
MASTER5 V24.5.12350120–650
Nazgul F5 V24.4.12500120–600
GEPRC, F4052025.12.5240090–400
REKON 74.6.0350070–400, плюс статичний notch на 160 Гц
F745, RPM-фільтр неактивний (dshot_bidir 0)4.2.8ширина 8120150–600

Кількість notch. Якщо RPM-фільтр працює, почни з одного або двох. У примітках до 4.3 сказано, що більше двох-трьох рідко потрібно, а часто вистачає одного. Без RPM-фільтра notch перебирають на себе його роботу, тож у примітках радять три або чотири з Q приблизно 120–150.

Q. У примітках до 4.3 значення 300–450 названо хорошим діапазоном для фристайлу. У логах із RPM-фільтром використовують 350–500. Низький Q має сенс лише без RPM-фільтрації, коли notch мусить накрити розмитий шум моторів.

min_hz і max_hz. Знайди на тепловій карті найнижчу лінію, яку потрібно прибрати (з RPM-фільтром це зазвичай резонанс, без нього — перша гармоніка моторів на газу зависання), і встанови dyn_notch_min_hz приблизно на 20 Гц нижче. У примітках радять тримати мінімум якомога вищим, щоб зменшити затримку. У логах вище це 90–120 Гц для менших дронів і 70 Гц для 7-дюймового, мотори якого обертаються на 125–155 Гц за газу 20–35%. Встанови 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 із таблиці — розумна відправна точка для 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 і трохи вужчий зріз. Згідно з таблицею вище, на 20 Гц це коштує приблизно 0.6 мс — стільки ж, скільки PT1 на 250 Гц. Це прийнятна ціна за один пік, але не привід додавати другий notch «про всяк випадок». У примітках до 4.3 є корисна порада: якщо статичний notch прибирає резонанс, що завжди лишається на одній частоті, зменш dyn_notch_count на одиницю.

INAV. У INAV взагалі немає статичного notch гіроскопа (є лише acc_notch_hz для акселерометра), тому bbdoctor не пропонує для INAV такої команди. Залишається динамічний notch: 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 розділяє резонанси на частоті 250 Гц і називає ймовірну причину у висновку:

Справжня частотаЩо зазвичай резонуєЩо робити
60–250 Гцпромені та рама, незакріплена камера, антена, акумулятор на слабкій стяжціпідтягни гвинти променів, перевір їх на тріщини й розшарування, закріпи камеру й антену, підтягни стяжку та підклади під акумулятор неслизьку прокладку
250 Гц і вищестек FC та ESC на м’яких кріпленнях, кріпильні елементи, стійки, верхня пластинаперевір втулки (якщо стек затиснутий, м’якого кріплення вже немає), гайки стека, стійки й гвинти верхньої пластини

Перед роботою з рамою від’єднай акумулятор і зніми пропелери. Перед ремонтом постав справні пропелери й перевір мотори, адже саме вони збуджують резонанс. Як знайти проблемний мотор за логом, описано в посібнику з вібрацій, а загальну картину шуму й фільтрів — у посібнику про гарячі мотори.

Перевір резонанс коротким логом із повною частотою запису

  1. Записуй лог із частотою контуру 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. Пам’ять заповнюється вчетверо швидше, ніж за значення 1/4.
  2. Переконайся, що сирий сигнал гіроскопа записується. Починаючи з 4.5, для нього є окреме поле; у версіях 4.0–4.4 потрібно встановити debug_mode = GYRO_SCALED. Докладніше — у посібнику з налаштування blackbox.
  3. Політай хвилину: зависай, плавно набирай висоту по прямій до газу 70–80%, а потім кілька разів утримуй різні значення газу по кілька секунд. Детектору потрібні вікна в багатьох діапазонах газу, а не лише під час зависання.
  4. Завантаж лог у bbdoctor. Якщо резонанс визначено однозначно, у висновку буде «Резонанс на X Гц за будь-якого газу» та команди для notch.
  5. Спершу усунь проблему з механікою і знову політай. Додавай notch, лише якщо пік залишився, а потім запиши ще один лог: виступ на цій частоті має зникнути з відфільтрованого сигналу гіроскопа, а відфільтрований шум не повинен зрости.
  6. Поверни звичайний дільник запису.
set blackbox_sample_rate = 1/1
save

Найпоширеніші помилки

Коли нічого не потрібно змінювати: bbdoctor не виявляє резонансу, сирий шум нижче 4 град/с (позначка «механіка справна»), відфільтрований шум нижче 1 град/с, а мотори після польоту теплі, не гарячі. Notch також не усуне низькочастотні коливання. В одному лозі PX4 1.17 bbdoctor знайшов пік 42 Гц лише на pitch у похибці (гіроскоп мінус setpoint), а фаза мотора вказувала, що його викликає P. Рекомендація — знизити pitch P на 10% і порівняти з наступним польотом, а не додавати фільтр. Детектор резонансів узагалі не аналізує частоти нижче 60 Гц.

Завантаж власний лог в аналізатор або переглянь приклад звіту. Перевірити конфігурацію без польоту можна на сторінці порівняння конфігурацій: вона виявляє, наприклад, вимкнений Dynamic Notch за відсутності RPM-фільтра.

Часті запитання

Скільки динамічних notch потрібно, якщо працює RPM-фільтр?

Зазвичай один або два. RPM-фільтр уже прибирає гармоніки кожного мотора, тож динамічному notch лишається ловити те, що не прив’язане до обертів: резонанс рами й залишковий шум пропелерів. У примітках із налаштування Betaflight 4.3 сказано, що більше двох-трьох notch рідко потрібно, а часто вистачає одного. У більшості наших логів 4.5 працює dyn_notch_count = 1 за Q 500, у логу 2025.12 — два за Q 400. Кожен зайвий notch унизу спектра додає затримку.

Статичний чи динамічний notch для резонансу рами?

Спершу усунь проблему з механікою. Якщо резонанс лишився, а лог із повною частотою запису показує точну частоту, використовуй статичний notch: він точно накриває пік і не блукає в пошуках чогось іншого. Динамічний notch теж може впоратися, якщо частота лежить між dyn_notch_min_hz і dyn_notch_max_hz та є вільний notch. Але якщо поруч із RPM-фільтром працює лише один notch, йому доводиться вибирати між резонансом і залишковим шумом моторів.

Що означає dyn_notch_q?

Це добротність notch, помножена на 100: dyn_notch_q = 500 означає Q = 5. Ширина смуги на рівні −3 дБ дорівнює центральній частоті, поділеній на Q: за Q 5 це смуга завширшки 40 Гц на частоті 200 Гц. Вище Q — вужчий зріз і менша затримка в робочому діапазоні керування, але notch має точніше потрапити в пік. Без RPM-фільтра в примітках до 4.3 радять Q 120–150; із RPM-фільтром у логах зазвичай використовують 350–500.

Чи може notch-фільтр прибрати желе на відео?

Ні. Желе виникає через вібрацію самої камери, а фільтр гіроскопа змінює лише сигнал для PID-контуру, тож камеру він не заспокоїть. Шукай механічну причину: незбалансований пропелер, нерівно працює мотор або розхиталося кріплення камери. Notch допомагає лише опосередковано, коли мотори передають вібрацію рамі. Знайди частоту в логу так само, як для резонансу.

Оновлено:

Інші гайди