bbdoctor
Diagnóstico de drones por el log: Betaflight, INAV, ArduPilot, PX4
RUENESPTUA

Notch dinámico y resonancia del frame: qué filtrar y qué corregir

Un pico pronunciado en el espectro del giroscopio se puede recortar con un filtro notch o eliminar desde el origen. Esta guía explica cómo distinguir el ruido de los motores de la resonancia del frame en un log, cómo detecta bbdoctor una resonancia y por qué a veces no indica la frecuencia, y qué ajustes de notch usan pilotos reales en Betaflight 4.2 a 2025.12, INAV 8 y logs de PX4.

Notch, pasa bajos y filtro RPM: qué elimina cada uno y cuánto cuesta

Todos limpian el giroscopio antes de que llegue al controlador PID, y todos añaden retardo. La diferencia está en lo que buscan:

El retardo de un notch depende de su frecuencia y su ancho. Las cifras siguientes se calcularon para un lazo de 4 kHz con un biquad al estilo Betaflight. Lo que importa es el retardo entre 20 y 40 Hz, donde se produce el movimiento real del dron.

FiltroRetardo a 20 HzA 40 Hz
PT1 250 Hz0.63 ms0.61 ms
PT1 100 Hz1.52 ms1.32 ms
Notch estático 160 Hz, corte 120 (Q 1.71)0.60 ms0.68 ms
Notch estático 469 Hz, corte 3280.24 ms0.24 ms
Notch dinámico a 200 Hz, dyn_notch_q 5000.16 ms0.18 ms
Notch dinámico a 100 Hz, dyn_notch_q 5000.36 ms0.52 ms
Notch dinámico a 70 Hz, dyn_notch_q 5000.58 ms1.29 ms
Notch dinámico a 100 Hz, dyn_notch_q 1201.45 ms1.88 ms

De aquí salen dos reglas. Un notch estrecho en la parte alta del espectro casi no cuesta nada, mientras que uno ancho o de frecuencia baja puede costar tanto como un buen pasa bajos. Y tres notches muy juntos triplican el retardo de uno solo.

Ruido de motores o resonancia del frame: líneas diagonales y verticales

La vista más clara es un mapa de calor del gas: la frecuencia va en horizontal, el gas aumenta hacia arriba y el brillo representa el nivel de ruido. La velocidad de los motores aumenta con el gas, así que sus armónicos dibujan líneas diagonales. Una resonancia del frame es una frecuencia natural de la estructura y no depende del gas, así que dibuja una línea vertical.

Mapas de calor sin filtrar de roll y pitch del giroscopio de un dron 6S con Betaflight 4.5.1: bandas verticales cerca de 198 y 186 Hz que van desde poco gas hasta el 85 por ciento
Giroscopio sin filtrar de un dron 6S con Betaflight 4.5.1, registrado a 1013 Hz. Al gas de estacionario (20–30 %), los motores giran alrededor de 192 Hz y, por encima del 80 %, cerca de 467 Hz. Mientras tanto, las bandas de 198 Hz (roll) y 186 Hz (pitch) permanecen en el mismo sitio con cualquier nivel de gas. Brillan más entre 20 y 40 %, donde el primer armónico de los motores las cruza y hace vibrar el frame.

Ese último detalle importa: una resonancia casi siempre brilla más donde la cruza una línea del motor. El motor es la fuente y el frame actúa como amplificador. Un dron de 7 pulgadas con Betaflight 4.6 lo muestra bien. Su piloto ya había configurado un notch estático a 160 Hz.

Mapas de calor de pitch de un dron de 7 pulgadas: a la izquierda, giroscopio sin filtrar con una línea vertical cerca de 162 Hz cruzada por la diagonal de los motores; a la derecha, giroscopio filtrado, casi oscuro con la misma escala
Dron de 7 pulgadas, Betaflight 4.6.0, registrado a 1980 Hz; ambos mapas usan la misma escala de color. Izquierda, giroscopio sin filtrar: la línea cerca de 162 Hz sobresale entre 16 y 22 dB sobre las frecuencias vecinas con 25–40 % de gas, cuando los motores giran a 139–178 Hz, y solo entre 0 y 8 dB con otros niveles de gas. Derecha, giroscopio filtrado: a 162 Hz y 30–40 % de gas, el nivel baja de +4 a +5 dB antes del filtrado a cerca de −39 dB después.

bbdoctor no lo identificó como resonancia: la línea supera el umbral en solo cerca de la mitad de los intervalos de gas, y necesita llegar al 60 %. Es una conclusión razonable. Un pico así está en el límite entre el frame y los motores, y los filtros activos ya lo controlan. El ruido filtrado aquí es de 0.66 deg/s, así que no hay motivo para tocar los filtros. Sin embargo, el ruido sin filtrar es de 7.9 deg/s, y bbdoctor señala correctamente las hélices, los motores y el frame.

Cómo detecta bbdoctor una resonancia y por qué a veces no indica la frecuencia

Si sabes cómo funciona el detector, podrás interpretar el informe:

  1. El vuelo se divide en ventanas de 256 muestras, con un solapamiento del 50 %. Cada ventana se asigna a uno de 20 intervalos de gas según el promedio del gas. Un intervalo cuenta si contiene al menos 4 ventanas.
  2. Para roll y pitch se calcula un espectro en cada intervalo, y el «piso» es una mediana móvil de 15 frecuencias vecinas. El paso de la cuadrícula es la tasa de registro dividida por 256: unos 4 Hz en un log de 1 kHz y unos 16 Hz a 4 kHz.
  3. Una frecuencia cuenta como resonancia si su pico supera el piso en más de 6 dB en al menos el 60 % de los intervalos de gas. Se ignora todo lo que esté por debajo de 60 Hz o en el 5 % superior por debajo de Nyquist.
  4. Los picos de roll y pitch separados por menos de 10 Hz se combinan en uno.

Con un divisor de registro, la caja negra de Betaflight guarda una de cada N muestras sin filtro antialiasing. Todo lo que supera la mitad de la tasa de registro se repliega, así que un pico a 827 Hz en un log de 1013 Hz aparece a 186 Hz. El log no permite deshacerlo, así que bbdoctor muestra las frecuencias candidatas: f, fs − f y fs + f.

LogRegistro / lazo PIDPico en el logCandidatasConclusión
BF 4.5.1, 6S, vuelo 11013 Hz / 4 kHz206 Hz roll, +8 dB, 71 % de los intervalos206, 807, 1219no se sugiere notch
BF 4.5.1, 6S, vuelo 21013 Hz / 4 kHz186 pitch, 198 roll, +6–7 dB186, 827, 1199 / 198, 815, 1211no se sugiere notch
BF 4.5.1, 6S, vuelo 31013 Hz / 4 kHz190 y 226 pitch, 202 roll, +7 dB190, 823, 1203 y otrasno se sugiere notch
INAV 8.0.0, 6S995 Hz / 2 kHz117 Hz pitch, +12 dB, 100 % de los intervalos117, 878, 1112no se sugiere notch
PX4 1.15.4, 6S8013 Hz469 Hz pitch, +6 dBsin ambigüedadnotch estático

Según la regla del código, la frecuencia no es ambigua si el log se registra a la tasa del lazo PID, o si se registra a 2 kHz o más y el pico está por debajo de la mitad de la frecuencia de Nyquist. En un log de 2 kHz eso significa menos de 500 Hz. Los tres vuelos 6S son el caso de manual. Usan blackbox_sample_rate = 1/4, así que la resonancia real podría estar a 186 Hz en los brazos o a 827 Hz en la stack. Eso cambia tanto el notch como el lugar donde debes buscar el problema.

Espectros de roll y pitch antes y después del filtrado: el giroscopio sin filtrar muestra picos a 202 Hz en roll y a 190 y 226 Hz en pitch; el giroscopio filtrado queda entre 26 y 28 dB más bajo
Tercer vuelo del mismo dron 6S, espectro de todo el vuelo. El gris es el giroscopio sin filtrar (picos de −1 a −3 dB a 202 Hz en roll y 190 y 226 Hz en pitch); el azul es el resultado del filtrado (−28 a −30 dB). El filtro RPM, un notch dinámico y los pasa bajos reducen estos picos entre 26 y 28 dB, aunque sobreviven pequeños bultos en las mismas frecuencias.

En los tres logs, bbdoctor informa: «Filtros: hay margen, pero aún es pronto para relajarlos (retardo de 2.2–2.3 ms)». El ruido filtrado es de 0.5–0.6 deg/s, pero el giroscopio sin filtrar marca 4.8–7.4 deg/s y hay una resonancia. Subir las frecuencias de corte antes de reparar el hardware y conocer la frecuencia solo deja que ese pico llegue a los PID.

Ajustes del notch dinámico según la versión de Betaflight

Los nombres de los parámetros cambiaron dos veces, en 4.2 y en 4.3. ¿No sabes qué ofrece tu firmware? Escribe get dyn_notch en la CLI para ver todos los parámetros coincidentes.

VersiónCómo activarloParámetrosNotas
4.0–4.1feature DYNAMIC_FILTERdyn_notch_range (LOW/MEDIUM/HIGH/AUTO), dyn_notch_width_percent, dyn_notch_q, dyn_notch_min_hzel límite superior es un preajuste; valores predeterminados: AUTO, 8, 120, 150
4.2feature DYNAMIC_FILTERdyn_notch_max_hz sustituye a range, dyn_notch_min_hz, dyn_notch_width_percent, dyn_notch_qnotas de 4.2: ancho 0 y Q 250 con RPM; 8 y 120 sin RPM
4.3, 4.4, 4.5, 4.6, 2025.12dyn_notch_count mayor que 0dyn_notch_count (hasta 5; hasta 7 en 2025.12), dyn_notch_q, dyn_notch_min_hz, dyn_notch_max_hznuevo algoritmo SDFT; ya no existen width ni la función; valores predeterminados: 3 notches, Q 300, 150–600 Hz en 4.3 y 100–600 Hz en 2025.12

Estos son los ajustes de logs reales de nuestro conjunto (todos usan DShot bidireccional excepto el último):

DronFirmwarecountQmín.–máx., Hz
Dron 6S, los tres vuelos anteriores4.5.11500100–600
MASTER5 V24.5.12350120–650
Nazgul F5 V24.4.12500120–600
GEPRC, F4052025.12.5240090–400
REKON 74.6.0350070–400, más un notch estático a 160 Hz
F745, filtro RPM inactivo (dshot_bidir 0)4.2.8ancho 8120150–600

Cuántos notches. Si el filtro RPM funciona, empieza con uno o dos. Las notas de 4.3 dicen que rara vez hacen falta más de dos o tres y que muchas veces basta con uno. Sin filtro RPM, los notches hacen su trabajo, y las notas sugieren tres o cuatro con Q de alrededor de 120–150.

Q. Las notas de 4.3 indican que 300–450 es un buen rango para freestyle. En los logs con filtro RPM se usa 350–500. Un Q bajo solo tiene sentido sin filtro RPM, cuando el notch debe cubrir el ruido disperso de los motores.

min_hz y max_hz. Busca la línea más baja del mapa de calor que quieras captar (con filtro RPM suele ser la resonancia; sin él, el armónico 1× de los motores al gas de estacionario) y configura dyn_notch_min_hz unos 20 Hz por debajo. Las notas recomiendan mantener el mínimo tan alto como sea práctico para reducir el retardo. En los logs anteriores está entre 90 y 120 Hz en los drones pequeños, y en 70 Hz en el dron de 7 pulgadas, cuyos motores giran a 125–155 Hz con 20–35 % de gas. Configura dyn_notch_max_hz justo por encima del pico más alto que necesites; un rango más amplio implica una resolución más gruesa.

set dyn_notch_count = 1
set dyn_notch_q = 500
set dyn_notch_min_hz = 100
set dyn_notch_max_hz = 600
save

Es la configuración del dron 6S de la tabla: un punto de partida razonable en 4.3+ con filtro RPM, no una receta universal.

Un notch estático como solución provisional

Cuando la frecuencia no es ambigua, bbdoctor propone un comando de notch estático: centra el notch en la resonancia y fija el corte inferior en 0.7 veces esa frecuencia. Betaflight calcula Q a partir de la frecuencia central y el corte con Q = f·c / (f² − c²). Con c = 0.7f, Q ≈ 1.37, y la banda a −3 dB va de 0.7f a 1.43f. Es ancha a propósito. La resonancia varía con la tensión de los tornillos y la temperatura, y un mapa de calor de un log de 4 kHz solo la ubica con una precisión de medio paso de la cuadrícula, unos 8 Hz. Si un log 1/1 confirma que la resonancia del dron 6S está realmente a 186 Hz, el comando es:

set gyro_notch1_hz = 186
set gyro_notch1_cutoff = 130
save

El piloto del dron de 7 pulgadas eligió 160/120, que corresponde a Q 1.71 y a un corte algo más estrecho. Según la tabla anterior, añade unos 0.6 ms a 20 Hz, lo mismo que un PT1 de 250 Hz. Es un precio razonable para un pico, pero no una razón para añadir un segundo notch «por si acaso». Las notas de 4.3 añaden una recomendación útil: cuando el notch estático se encarga de una resonancia que se mantiene en la misma frecuencia, reduce dyn_notch_count en uno.

INAV. INAV no tiene notch estático para el giroscopio (solo acc_notch_hz para el acelerómetro), así que bbdoctor no ofrece ningún comando para INAV. Queda el notch dinámico: dynamic_gyro_notch_enabled, dynamic_gyro_notch_q, dynamic_gyro_notch_min_hz. Nuestro log de INAV usa Q 250 con un mínimo de 126 Hz. Si un log a tasa completa confirma una resonancia a 117 Hz, el notch dinámico no podrá alcanzarla hasta que bajes el mínimo a unos 100 Hz. Más información en la guía de la caja negra de INAV.

ArduPilot. bbdoctor activa el segundo notch armónico en modo de frecuencia fija, con un ancho de banda de f/2 y una atenuación de 40 dB. Después de configurar INS_HNTC2_ENABLE = 1, actualiza la lista de parámetros para que aparezcan los demás parámetros INS_HNTC2_*. Consulta la guía de logs de ArduPilot.

PX4. Desde la versión 1.13 se usan IMU_GYRO_NF0_FRQ y IMU_GYRO_NF0_BW; en la 1.12 y anteriores, IMU_GYRO_NF_FREQ y IMU_GYRO_NF_BW. bbdoctor fija el ancho de banda en 0.3 veces la frecuencia. El log de PX4 1.15.4 se registró a 8 kHz, así que el pico de 469 Hz no es ambiguo y los comandos son:

param set IMU_GYRO_NF0_FRQ 469
param set IMU_GYRO_NF0_BW 141

El mismo log tiene activado el notch FFT (IMU_GYRO_FFT_EN = 1), pero su rango es de 30–150 Hz y nunca llega a 469 Hz. Mientras tanto, IMU_GYRO_CUTOFF = 40 añade unos 5.6 ms de retardo, mientras que un notch de 469 Hz con un ancho de banda de 141 Hz añade unos 0.1 ms. Aun así, bbdoctor indica que todavía es pronto para relajar los filtros: el ruido sin filtrar en roll es de 6.4 deg/s, así que primero hay que corregir el hardware. Encontrarás detalles de PX4 en la guía de ULog.

Primero corrige el hardware: qué revisar según la frecuencia

bbdoctor divide las resonancias a 250 Hz e indica la causa probable en el hallazgo:

Frecuencia realQué suele vibrarQué hacer
60–250 Hzbrazos y frame, cámara floja, antena, batería con una correa poco firmeaprieta los tornillos de los brazos, revisa si tienen grietas o delaminación, asegura la cámara y la antena, aprieta la correa y pon una almohadilla antideslizante bajo la batería
250 Hz o másla stack de la controladora de vuelo y los ESC sobre soportes blandos, fijaciones, separadores, placa superiorrevisa los ojales (si la stack está aplastada, ya no está montada sobre soportes blandos), las tuercas de la stack, los separadores y los tornillos de la placa superior

Desconecta la batería y quita las hélices antes de trabajar en el frame. Antes de reparar nada, coloca hélices nuevas y revisa los motores, porque son los que excitan la resonancia. La guía de vibraciones explica cómo identificar en un log el motor culpable; la guía de motores calientes explica el ruido y los filtros en general.

Confírmalo con un log corto a tasa completa

  1. Registra a la tasa del lazo PID. En Betaflight 4.3+ usa set blackbox_sample_rate = 1/1; en INAV, blackbox_rate_num = 1 y blackbox_rate_denom = 1; en PX4, los bits 4 (High rate) y 8 (Raw FIFO high-rate IMU Gyro) en SDLOG_PROFILE; en ArduPilot 4.5+, INS_RAW_LOG_OPT junto con el bit IMU_RAW en LOG_BITMASK. La memoria flash se llena cuatro veces más rápido que con 1/4.
  2. Asegúrate de que se registre el giroscopio sin filtrar. Desde la versión 4.5 tiene un campo propio; en 4.0–4.4 necesitas debug_mode = GYRO_SCALED. Consulta la guía de configuración de la caja negra.
  3. Vuela durante un minuto: estacionario, una subida suave en línea recta hasta 70–80 % de gas y cambios de gas mantenidos durante unos segundos cada uno. El detector necesita ventanas en muchos intervalos de gas, no solo en estacionario.
  4. Sube el log a bbdoctor. Si la resonancia no es ambigua, el hallazgo dice «Resonance at X Hz at any throttle» e incluye comandos de notch.
  5. Corrige primero el hardware y vuelve a volar. Añade el notch solo si el pico persiste; luego registra otro log: el bulto de esa frecuencia debería haber desaparecido del giroscopio filtrado y el ruido filtrado no debería aumentar.
  6. Vuelve a poner el divisor de registro en su valor normal.
set blackbox_sample_rate = 1/1
save

Los errores más comunes

Cuándo dejarlo como está: bbdoctor no detecta resonancia, el ruido sin filtrar está por debajo de 4 deg/s (su indicador de «mecánica limpia»), el ruido filtrado está por debajo de 1 deg/s y los motores terminan templados, no calientes. Un notch tampoco arregla una oscilación de baja frecuencia. En un log de PX4 1.17, bbdoctor detectó un pico de 42 Hz solo en pitch en el error (giroscopio − setpoint), y la fase del motor apuntaba a que lo provocaba la P. Su recomendación es bajar la P de pitch un 10 % y comparar el siguiente vuelo, no añadir un filtro; además, el detector de resonancia ni siquiera analiza frecuencias por debajo de 60 Hz.

Sube tu propio log al analizador o consulta el informe de ejemplo. Puedes revisar una configuración sin volar en la página de comparación de cambios, que detecta casos como un notch dinámico desactivado sin filtro RPM.

Preguntas frecuentes

¿Cuántos notches dinámicos necesito si uso el filtro RPM?

Normalmente, uno o dos. El filtro RPM ya elimina los armónicos de cada motor, así que el notch dinámico solo tiene que captar lo que no está ligado a las RPM: la resonancia del frame y el ruido residual de las hélices. Las notas de ajuste de Betaflight 4.3 dicen que rara vez hacen falta más de dos o tres y que muchas veces basta con uno. En la mayoría de nuestros logs de 4.5 se usa dyn_notch_count = 1 con Q 500; un log de 2025.12 usa dos con Q 400. Cada notch adicional que se queda bajo en el espectro añade retardo.

¿Notch estático o dinámico para una resonancia del frame?

Primero corrige el hardware. Si la resonancia persiste y un log a tasa completa te da su frecuencia exacta, usa un notch estático: se coloca justo en el pico y no se desplaza para perseguir otra cosa. El notch dinámico puede controlarla si la frecuencia está entre dyn_notch_min_hz y dyn_notch_max_hz y tiene un notch disponible, pero si solo tienes uno junto al filtro RPM, tendrá que elegir entre la resonancia y el ruido residual de los motores.

¿Qué significa dyn_notch_q?

Es el valor Q del notch multiplicado por 100, así que dyn_notch_q = 500 significa Q = 5. El ancho de banda a −3 dB es la frecuencia central dividida por Q: 40 Hz de ancho a 200 Hz con Q 5. Un Q más alto produce un corte más estrecho y menos retardo en la banda de control, pero el notch debe coincidir con el pico con más precisión. Sin filtro RPM, las notas de 4.3 sugieren Q 120–150; los logs con filtro RPM suelen usar 350–500.

¿Un filtro notch puede arreglar el jello del video?

No. El jello se debe a que vibra la cámara, y un filtro del giroscopio solo cambia lo que ve el lazo PID, así que no estabiliza la cámara. Busca la causa mecánica: una hélice desequilibrada, un motor áspero o un soporte de cámara flojo. El notch solo ayuda indirectamente, cuando los motores transmiten ruido al frame. Busca la frecuencia en el log como lo harías con una resonancia.

Actualizado:

Más guías