Betaflight RPM Filtering: Motor Poles, Dynamic Notch, and Gyro Noise Signatures — 2026 Guide

You spend an hour dialing PIDs, and every time you think you’ve got it, a specific throttle range produces mid-throttle oscillations that no D-gain tweak can fix. The problem isn’t your tune — it’s noise at a frequency your static notch filter can’t catch because it shifts with RPM. RPM filtering tracks motor speed in real time and cancels noise at exactly the frequency each motor produces. Once you enable it, you’ll wonder why you ever tuned without it.

How RPM Filtering Works (And Why Static Notch Filters Fall Short)

Every spinning motor produces vibrations at a fundamental frequency equal to RPM ÷ 60 (for Hz). A 2207 motor at 30,000 RPM generates a 500Hz vibration. At 20,000 RPM, it’s 333Hz. At 45,000 RPM, it’s 750Hz. A static notch filter at 500Hz catches one of those — and misses the others.

RPM filtering uses bidirectional DShot telemetry to read each motor’s actual RPM, then places a narrow notch filter at exactly that frequency — dynamically, updating every PID loop cycle. The result: the filter is always exactly where the noise is, regardless of throttle position.

This isn’t a minor refinement. On builds that previously needed 2-3 static notch filters eating up 15-20% of the filter budget, RPM filtering typically lets you remove them entirely, freeing filter headroom for a sharper tune.

Step 1: Confirm Hardware Compatibility

RPM filtering requires bidirectional DShot — the ESC must report motor RPM back to the flight controller. This means:
– BLHeli_32 ESCs (native support, firmware 32.7+)
– BLHeli_S ESCs flashed with Bluejay (0.16+) or JESC (with telemetry license)
– AM32 ESCs (native support)

The flight controller needs a free UART for ESC telemetry (or, on 4-in-1 ESCs with a dedicated telemetry pad, a wire from that pad to a UART RX on the FC). Most modern stacks include this by default.

Step 2: Enable Bidirectional DShot in Betaflight

In the Motors tab of Betaflight Configurator, set the ESC/Motor Protocol to DShot300 or DShot600 (DShot600 is preferred for RPM filtering — higher update rate means better filter tracking). Then flip the “Bidirectional DShot” switch to ON.

In the CLI, verify:

set dshot_bidir = ON
set motor_poles = 14

Motor poles must be set correctly — this is how Betaflight converts the electrical RPM reported by the ESC into mechanical RPM. Most 5-inch motors (2207, 2306, etc.) use 14 poles (7 pole pairs). Check your motor spec sheet. If you get this wrong, the notch filters will chase the wrong frequency and actually inject noise instead of canceling it.

Step 3: Configure RPM Filters

In the PID Tuning tab, under Filter Settings, enable “RPM Filter.” Two sliders appear:

RPM Filter Harmonics: Controls how many multiples of the fundamental RPM frequency are filtered. Default is 3. Each harmonic adds a notch filter at 2×, 3×, etc. of the motor frequency. Most noise energy is at the fundamental (1×) and second harmonic (2×). Start at 2, go to 3 if you still see motor-related noise in the gyro spectrogram.

Min Frequency: The minimum RPM the filter acts at. Default is 100 Hz. Motors at very low RPM produce negligible noise relative to the noise floor, so filtering there wastes CPU cycles.

Step 4: Remove Redundant Static Notch Filters

Before RPM filtering, your setup might have 2-3 static notch filters configured. After enabling RPM filtering, go to the Gyro Notch Filter 1 and 2 settings and reduce them to 1 total (keep a single static notch around 100-150Hz to catch frame resonance that RPM filtering doesn’t cover — frame resonance is independent of motor RPM).

Step 5: Verify with Gyro Spectrogram

Enable debug mode “GYRO_SCALED” and do a test flight that sweeps through the full throttle range. Download the blackbox log and open it in Plasmatree or Betaflight Blackbox Explorer. Switch to the spectrogram view. Before RPM filtering, you’ll see diagonal lines tracking motor RPM. After, those lines should be nearly gone.

If you still see motor-RPM lines in the spectrogram, try increasing RPM Filter Harmonics to 3, or check that motor_poles is set correctly.

RPM Filtering Parameter Table

Setting Default Recommended Range What It Affects
RPM Filter Harmonics 3 1-3 How many multiples of motor RPM frequency to notch out. Higher = more filtering, more CPU, slight added latency
RPM Filter Min Hz 100 80-120 Floor frequency for filter activation. Below this, motor vibrations are below noise floor
DShot Protocol DShot300 DShot300-DShot600 DShot600 preferred for faster RPM telemetry update rate
Motor Poles 14 12-14 (confirm datasheet) Critical for correct RPM calculation. Wrong = filter at wrong frequency
Gyro RPM Filter Q 500 (auto) N/A (auto-calculated) Filter width. Narrower = less phase delay but needs accurate RPM data

Common Mistakes & What Most Pilots Get Wrong

Mistake 1: Setting motor_poles wrong and trusting the filter. If your motors have 12 poles and you tell Betaflight 14, the notch filter centers at 14/12 = 1.17× the actual motor frequency — it misses the noise entirely. Every time I’ve seen RPM filtering “not working,” the motor pole count was wrong. Look up the datasheet for your specific motor. Don’t assume.

Mistake 2: Keeping static notch filters at their old values. RPM filtering reduces the need for static notches, but it doesn’t eliminate it entirely. Frame resonance (usually 80-150Hz on a 5-inch) is mechanical, not motor-derived, and RPM filtering won’t touch it. Keep one static notch at your frame’s resonant frequency — find it by doing a motor test sweep and looking for the frequency where gyro amplitude spikes regardless of motor RPM.

Mistake 3: Running DShot300 when DShot600 is available. The faster RPM telemetry update rate on DShot600 gives the notch filter more data points per second, which means it tracks motor RPM changes more accurately during rapid throttle transients. The difference is marginal on a 4S cruiser but noticeable on a 6S freestyle build doing snap rolls.

Mistake 4: Skipping the spectrogram verification. “It flies better” isn’t data. The spectrogram tells you exactly what frequencies are being filtered and whether motor RPM lines still exist. Fly-log-analyze-repeat is the only way to know RPM filtering is actually working.

Mistake 5: Expecting RPM filtering to fix a mechanically broken build. A bent motor shaft, chipped prop, or loose arm produces broadband noise that no notch filter — dynamic or static — can remove. RPM filtering is for harmonic motor noise. If your gyro traces look like a seismograph during an earthquake, fix the mechanical issue first.

⚠️ Regulatory Notice: The flight and tuning recommendations in this article should be followed in accordance with the latest 2026 drone regulations in your country or region. Always verify local laws regarding flight altitude, no-fly zones, remote ID requirements, and registration before flying. Regulations vary significantly between the FAA (US), EASA (EU), CAA (UK), CAAC (China), and other authorities.

RPM filtering works hand-in-hand with blackbox analysis — the spectrogram tells you whether your filters are actually hitting the noise. Our Betaflight Blackbox log analysis guide walks through interpreting gyro traces and spectrograms to confirm your filter setup is doing its job. And if you’re running BLHeli_S ESCs, the BLHeli_S configuration guide covers the Bluejay flash process needed to enable bidirectional DShot on those ESCs.

For pilots running BLHeli_32 ESCs, the T-Motor F55A Pro II 4-in-1 ESC has rock-solid bidirectional DShot telemetry — the RPM data stream is clean and consistent across the full throttle range, which means the notch filters track accurately even during hard freestyle moves. Budget ESCs sometimes drop RPM telemetry packets under heavy load, which introduces filter jitter that you’ll feel as micro-oscillations.

Leave a Comment

Scroll to Top