A Bode plot of a low pass filter is a dual-graph representation showing how a circuit's voltage gain (in decibels) and phase shift (in degrees) change across a logarithmic frequency sweep, effectively mapping out exactly which frequencies pass through and which get blocked. In a real circuit, this plot dictates how a flat, broadband signal is transformed into a frequency-dependent signal, rolling off high-frequency noise while preserving DC and low-frequency fundamentals.
If you are designing an anti-aliasing filter for a microcontroller ADC or smoothing a PWM signal, the Bode plot is your primary diagnostic map. It tells you not just if a frequency is blocked, but exactly how much it is attenuated and what time delay (phase shift) it introduces.
The Anatomy of the Plot: Magnitude and Phase
A standard Bode plot for a first-order passive RC low pass filter consists of two stacked graphs sharing the same logarithmic X-axis (frequency in Hz).
The Magnitude Plot (Top): This shows the voltage gain. At DC (0 Hz), the gain is 0 dB (meaning 100% of the input voltage passes through). As frequency increases, the plot stays flat until it approaches the cutoff frequency ($f_c$). At $f_c$, the gain drops to -3 dB, which corresponds to 70.7% of the input voltage. Beyond $f_c$, the magnitude drops at a constant rate of -20 dB per decade (or -6 dB per octave) for a first-order filter.
The Phase Plot (Bottom): This shows the time delay introduced by the filter, expressed as a phase angle. At DC, the phase shift is 0°. At the cutoff frequency, the phase lags by exactly -45°. As frequency approaches infinity, the phase shift asymptotically approaches -90°. This phase lag is critical in control loops and audio applications, as it can introduce instability or stereo imaging errors.
Worked Numeric Example: Designing a 1 kHz RC Filter
Let's design a first-order low pass filter with a target cutoff frequency ($f_c$) of 1,000 Hz using standard off-the-shelf components. The governing equation is:
f_c = 1 / (2 * π * R * C)
- Select the Capacitor: Capacitors have fewer standard values than resistors. We will choose a standard E12 value of 100 nF (0.1 µF) using an X7R ceramic dielectric for stability.
- Calculate the Ideal Resistor: Rearranging the formula for R gives
R = 1 / (2 * π * 1000 * 100e-9), which equals 1,591.5 Ω. - Select the Standard Resistor: The nearest standard E24 resistor value is 1.6 kΩ (1,600 Ω).
- Recalculate the Actual Cutoff: Using 1,600 Ω and 100 nF, our actual $f_c$ is
1 / (2 * π * 1600 * 100e-9)= 994.7 Hz.
Here is how the Bode plot data points map out for this specific 994.7 Hz filter:
| Frequency (Hz) | Decades from fc | Magnitude (Gain) | Phase Shift |
|---|---|---|---|
| 10 Hz | -2 | ~-0.004 dB (99.9%) | -5.7° |
| 994.7 Hz (fc) | 0 | -3.01 dB (70.7%) | -45.0° |
| 9,947 Hz | +1 | -20.04 dB (9.9%) | -84.3° |
| 99,470 Hz | +2 | -40.00 dB (1.0%) | -89.4° |
Where You Meet This in Practice
You will rarely generate a Bode plot by hand on the bench, but you will use the principles constantly in these common scenarios:
- Microcontroller ADC Anti-Aliasing: When an ESP32 or Arduino samples an analog sensor, the Nyquist theorem dictates you must filter out frequencies above half your sampling rate. A low pass filter prevents high-frequency noise from 'folding back' into your DC measurements.
- PWM to Analog Conversion: Smoothing a 5V PWM signal from a microcontroller into a clean DC voltage for a motor driver or LED dimmer requires an RC filter where the cutoff frequency is set at least a decade below the PWM frequency to achieve less than 1% ripple.
- Audio Subwoofer Crossovers: Active low pass filters in audio amplifiers use op-amps to create 2nd-order (-40 dB/decade) or 4th-order (-80 dB/decade) Bode slopes, ensuring mid-range frequencies never reach the subwoofer cone.
Real-World Scenario Walkthrough: The Noisy Sensor Fail
Theoretical Bode plots assume perfect components. Real-world parasitics will ruin your day if you ignore them. Here is a classic bench failure involving an ESP32-S3 and a thermistor.
The Setup: We needed to read a 10kΩ NTC thermistor using the ESP32's internal SAR ADC. The board was powered by a cheap switching buck converter generating 500 kHz noise on the 3.3V rail. To clean up the thermistor signal, we designed a low pass filter with a 100 Ω resistor and a 10 µF radial electrolytic capacitor, yielding a theoretical cutoff of 159 Hz.
The Numbers: According to the ideal Bode plot, at 500 kHz (over three decades above the 159 Hz cutoff), the filter should provide roughly -70 dB of attenuation. A 100 mV noise spike on the rail should be reduced to 0.03 mV—well below the ESP32's ADC noise floor.
The Outcome: The ADC readings were erratic, fluctuating by ±25 counts. The temperature reading was jumping by ±2°C, completely ruining our 0.1°C resolution target.
What Went Wrong: We forgot to plot the parasitics on our Bode plot. A standard 10 µF aluminum electrolytic capacitor has high Equivalent Series Inductance (ESL) and a Self-Resonant Frequency (SRF) around 50 kHz to 100 kHz. Above the SRF, the capacitor stops acting like a capacitor and starts acting like an inductor. On a real-world Bode plot, the magnitude line stops dropping at -20 dB/decade at 100 kHz, flattens out, and can even spike due to resonance. At 500 kHz, our 'filter' was actually just a 100 Ω resistor in series with an inductor, providing almost zero attenuation to the switching noise.
Common Confusions and Mistakes
When reading or designing around a Bode plot of a low pass filter, makers frequently trip over three specific concepts:
1. Confusing -3 dB with 'Zero Signal': The cutoff frequency ($f_c$) is often mistakenly called the 'blocking point.' In reality, at $f_c$, the signal is only attenuated by 30% (it retains 70.7% of its voltage). If you need a signal heavily suppressed at a specific frequency, you must place $f_c$ at least one or two decades below that target frequency.
2. Confusing Frequency Domain with Time Domain: A Bode plot shows steady-state sinusoidal response (frequency domain). It does not directly show you the step response (time domain). If you apply a square wave to a low pass filter, the exponential charging curve you see on an oscilloscope is governed by the time constant ($ au = R imes C$), not directly by the dB values on the Bode plot, though the two are mathematically linked.
3. Ignoring Source and Load Impedance: The Bode plot math assumes an ideal voltage source (0 Ω impedance) driving an infinite load impedance. If your low pass filter is driven by a high-impedance voltage divider (like a 100kΩ thermistor network) and feeds a low-impedance load, the actual cutoff frequency will shift drastically from your calculated value. Always buffer high-impedance filters with an op-amp voltage follower.
FAQ: Bode Plot of a Low Pass Filter
Can I measure a Bode plot without a network analyzer?
Yes. You can use a standard function generator and a digital oscilloscope. Sweep the generator logarithmically from 10 Hz to 1 MHz, measure the peak-to-peak voltage at the output relative to the input at each step, and plot the ratio in dB (20 * log10(Vout/Vin)). Many modern digital scopes, like the Rigol MSO5000 or Siglent SDS1204X-E, have built-in Bode plot apps that automate this sweep via USB control.
Why does a 2nd-order filter drop at -40 dB/decade?
A 2nd-order low pass filter uses two reactive components (e.g., two capacitors, or an inductor and a capacitor). Each reactive component contributes a -20 dB/decade slope. When cascaded properly (usually with an op-amp buffer between them to prevent impedance loading), the slopes add together, resulting in a much steeper -40 dB/decade roll-off on the Bode plot.
Does the Bode plot account for component tolerances?
No. The theoretical plot assumes exact values. A 10% tolerance on both your resistor and capacitor means your actual cutoff frequency could vary by up to 20% from the plotted line. For precision audio or strict ADC anti-aliasing, use 1% metal film resistors and C0G/NP0 ceramic capacitors.






