Dynamic Notch і резонанс рами: що фільтрувати, а що лагодити
Різкий пік у спектрі гіроскопа можна зрізати notch-фільтром або усунути його джерело. У цьому посібнику показано, як відрізнити шум моторів від резонансу рами в логу, як bbdoctor виявляє резонанс і чому іноді не називає його частоту, а також які налаштування notch використовують пілоти в реальних логах Betaflight 4.2–2025.12, INAV 8 і PX4.
Notch, lowpass і RPM-фільтр: що прибирає кожен і якою ціною
Усі ці фільтри очищають сигнал гіроскопа перед PID-контролером і додають затримку. Відрізняються вони тим, на що реагують:
- Lowpass-фільтри (
gyro_lpf1_static_hz,gyro_lpf2_static_hz) послаблюють усе вище частоти зрізу. Їхня затримка майже не змінюється в робочому діапазоні керування. - RPM-фільтр ставить вузькі notch на гармоніках 1×, 2× і 3× кожного мотора, використовуючи телеметрію двонаправленого DShot. Він стежить за моторами й не чіпає решту сигналу. Налаштування описано в посібнику з RPM-фільтра.
- Динамічний notch шукає найсильніші піки в спектрі гіроскопа між
dyn_notch_min_hzіdyn_notch_max_hzта ставить на них поdyn_notch_countnotch на кожну вісь. Йому байдуже, спричинений пік моторами чи рамою. - Статичний 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 Гц, зріз 120 (Q 1.71) | 0.60 мс | 0.68 мс |
| Статичний notch 469 Гц, зріз 328 | 0.24 мс | 0.24 мс |
| Динамічний notch на 200 Гц, dyn_notch_q 500 | 0.16 мс | 0.18 мс |
| Динамічний notch на 100 Гц, dyn_notch_q 500 | 0.36 мс | 0.52 мс |
| Динамічний notch на 70 Гц, dyn_notch_q 500 | 0.58 мс | 1.29 мс |
| Динамічний notch на 100 Гц, dyn_notch_q 120 | 1.45 мс | 1.88 мс |
Звідси два правила. Вузький notch у верхній частині спектра майже нічого не коштує, а широкий або низькочастотний може затримувати сигнал не менше, ніж пристойний lowpass. Три 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 Гц, об’єднуються в один.
Якщо в Betaflight задано дільник запису, blackbox зберігає кожен 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-контурів.
Налаштування Dynamic Notch у різних версіях Betaflight
Назви параметрів змінювалися двічі — у версіях 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: ширина 0 і Q 250 з RPM-фільтром, 8 і 120 без нього |
| 4.3, 4.4, 4.5, 4.6, 2025.12 | dyn_notch_count більше 0 | dyn_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):
| Дрон | Прошивка | count | Q | мін.–макс., Гц |
|---|---|---|---|---|
| Дрон 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, плюс статичний notch на 160 Гц |
| F745, RPM-фільтр неактивний (dshot_bidir 0) | 4.2.8 | ширина 8 | 120 | 150–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 на м’яких кріпленнях, кріпильні елементи, стійки, верхня пластина | перевір втулки (якщо стек затиснутий, м’якого кріплення вже немає), гайки стека, стійки й гвинти верхньої пластини |
Перед роботою з рамою від’єднай акумулятор і зніми пропелери. Перед ремонтом постав справні пропелери й перевір мотори, адже саме вони збуджують резонанс. Як знайти проблемний мотор за логом, описано в посібнику з вібрацій, а загальну картину шуму й фільтрів — у посібнику про гарячі мотори.
Перевір резонанс коротким логом із повною частотою запису
- Записуй лог із частотою контуру 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. - Переконайся, що сирий сигнал гіроскопа записується. Починаючи з 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 мс. Встановлюй мінімум з огляду на свої мотори, а не «трохи нижче про всяк випадок».
- Діапазон не охоплює пік. Мінімум 126 Гц в INAV, коли пік на 117 Гц; верхня межа FFT-notch у PX4 — 150 Гц, коли пік на 469 Гц. Фільтр увімкнено, але він нічого не робить.
- Послаблення фільтрів, поки резонанс лишився. Низький рівень відфільтрованого шуму не доводить, що є запас. Шум може бути низьким саме завдяки notch і lowpass, які ти збираєшся послабити.
- Забутий статичний notch. Після ремонту запиши лог. Якщо пік зник, прибери notch командою
set gyro_notch1_hz = 0, ненадовго зависни й перевір, чи теплі мотори. Зайва затримка без шуму, який потрібно фільтрувати, нікому не допомагає.
Коли нічого не потрібно змінювати: 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 допомагає лише опосередковано, коли мотори передають вібрацію рамі. Знайди частоту в логу так само, як для резонансу.
Оновлено: