Skip to main content

Passive Filter Design: First-Order RC Low-Pass and High-Pass Filters

11 min read
ElectricalFiltersRCAudioSignal ProcessingEngineering

Passive Filter Design: First-Order RC Low-Pass and High-Pass Filters

A 5 V PWM signal from an Arduino pin, meant to drive a DC motor's speed input, produces audible judder at the motor. The fix: a 10 kΩ resistor and a 2.2 µF capacitor between the PWM pin and the motor driver. Cutoff frequency 7.2 Hz, well below the 490 Hz PWM carrier, and the peak-to-peak ripple drops from 5 V down to about 120 mV. Two components, one formula.

Passive RC filters are the simplest signal-conditioning building block in electronics. One resistor, one capacitor, a ground reference, and you get a first-order low-pass or high-pass response whose corner frequency is set by a single equation. Most engineers learn it once, forget the derivation, and recall only the formula. This guide walks through the math, the Bode plot, and three worked examples (audio tone control, PWM smoothing, and ADC anti-aliasing) you can verify against the Calcflux RC filter calculator.

The Cutoff Formula

The corner frequency (also called the cutoff, −3 dB, or half-power point) of a first-order RC filter is:

f_c = 1 / (2π · R · C)

Where R is in ohms, C is in farads, and f_c comes out in hertz. The same formula governs both the low-pass topology (R in series, C to ground, output across C) and the high-pass topology (C in series, R to ground, output across R). The swap changes which side of f_c the signal passes; it does not change the corner itself.

The related time constant τ tells you how fast the capacitor charges or discharges through the resistor:

τ = R · C

After one time constant a charging capacitor reaches 63.2% of the final voltage. After five time constants it sits at 99.3% and is considered fully settled. This is the time-domain dual of the frequency-domain cutoff. They describe the same filter through two different lenses.

Why −3 dB at the Corner

At f = f_c, the magnitude of the transfer function is exactly 1/√2 ≈ 0.707. Square that and you get 1/2, meaning half the input power reaches the output. Hence "half-power point." Converting the amplitude ratio to decibels with 20·log₁₀(1/√2) gives −3.0103 dB, which is why datasheets round to −3 dB.

This is not a rule of thumb. It falls directly out of the transfer function algebra for a first-order RC system, and it shows up unchanged in every textbook since the work of George Campbell and Otto Zobel at AT&T Bell Labs in the 1915–1925 period.

Reading the Bode Plot

A Bode plot shows magnitude (in dB) versus frequency (on a log scale). For a first-order low-pass RC filter:

  • Below f_c the response is flat at 0 dB. The signal passes through unchanged.
  • At f_c the response is down 3 dB.
  • Above f_c the slope is −20 dB per decade. Every tenfold increase in frequency gives a tenfold drop in amplitude (a 20 dB loss).

For a first-order high-pass filter, flip the plot. The slope is +20 dB per decade below f_c and flat at 0 dB above it. The corner still sits at f_c.

Phase shift tracks the magnitude but lags. A low-pass filter goes from 0° at DC, through −45° at f_c, to −90° far above it. The transition is gradual. One decade below f_c the shift is already about −5.7°. One decade above it reaches −84.3°. A high-pass filter mirrors the curve: +90° at DC, +45° at f_c, 0° far above. Phase matters when you cascade filters in control loops, crossovers, or phase-locked systems.

Worked Example 1: Audio Tone Control at 1 kHz

You want a simple treble-cut control. Signal comes from a line-level source (low impedance), drives an RC low-pass, and feeds an amplifier with high input impedance. The target is f_c = 1 kHz: attenuate hiss and high-frequency noise without touching the midrange.

Pick the capacitor first. For audio work, values between 10 nF and 1 µF cover most cases, and capacitor values step in coarser E-series than resistors. Choose C = 100 nF (0.1 µF), a standard ceramic or film value.

Solve for R:

R = 1 / (2π · C · f_c)
R = 1 / (2π · 100e-9 · 1000)
R = 1 / 6.283e-4
R = 1592 Ω

Pick 1.6 kΩ from the E24 series. Verify: f_c = 1 / (2π · 1600 · 100e-9) = 995 Hz. Close enough for audio.

At 500 Hz (half a decade below f_c) the attenuation is 20·log₁₀(1/√(1 + 0.5²)) = −0.97 dB, essentially unchanged. At 10 kHz (a decade above) the attenuation is 20·log₁₀(1/√(1 + 10²)) = −20.04 dB. The tenfold drop in amplitude per decade is exactly what the Bode plot predicts. Cross-check with the RC filter calculator.

Worked Example 2: PWM to Analog Conversion

A 490 Hz PWM signal from an Arduino pin at 50% duty cycle should average to 2.5 V. The raw waveform is still 0 V to 5 V square; the average is what you want. A low-pass filter with τ much longer than the PWM period extracts the DC average and rejects the carrier.

For a 50% duty cycle and RC much greater than the PWM period, the peak-to-peak ripple relative to the full PWM swing is:

V_ripple_pp / V_swing ≈ T_PWM / (4 · RC) = 1 / (4 · R · C · f_PWM)

The derivation falls out of exponential charge and discharge during each half-period (see Swarthmore's Linear Physical Systems Analysis notes). The approximation holds well once RC exceeds the PWM period by roughly 10×.

For a 490 Hz Arduino PWM targeting 2% ripple (100 mV out of 5 V), you need RC > 1 / (4 · 0.02 · 490) = 25.5 ms. Equivalently, f_c < 6.2 Hz.

Pick R = 10 kΩ, C = 2.2 µF. RC = 22 ms, f_c = 7.23 Hz. Ripple works out to about 2.3% (116 mV peak-to-peak). The 22 ms time constant means step changes take roughly 110 ms to settle (five time constants), so don't use this filter on a signal that needs to track rapid duty cycle changes. If you need faster response, raise f_c and accept more ripple; if you need less ripple, use a second-order filter or raise the PWM frequency.

Higher-frequency PWM makes life easier. The ESP32 LEDC peripheral is commonly configured at 5 kHz (it can be pushed into the MHz with reduced bit depth). At 5 kHz PWM, RC = 2.5 ms is enough for 2% ripple: R = 25 kΩ, C = 100 nF, f_c = 63.7 Hz, settle time about 12 ms. An order of magnitude faster step response than the 490 Hz case, same ripple spec.

Worked Example 3: Anti-Aliasing Before an ADC

An ADC sampling at 48 kHz needs its input bandwidth-limited below the Nyquist frequency of 24 kHz. Any signal content above 24 kHz folds back into the audio band as aliased distortion. A single-pole RC filter at f_c = 20 kHz is often used as a first line of defense before a higher-order anti-alias filter inside the codec.

For f_c = 20 kHz with C = 1 nF (a small value that works well at audio-to-ultrasonic frequencies):

R = 1 / (2π · 1e-9 · 20e3) = 7958 Ω

Use 8.2 kΩ (E24). Actual f_c = 19.4 kHz.

At 40 kHz (about one octave into the stopband): attenuation is 20·log₁₀(1/√(1 + (40/19.4)²)) = −7.2 dB. That's not enough rejection by itself. A single RC pole only gets you −6 dB per octave, so a signal at the Nyquist frequency of 24 kHz only sees about −4 dB of attenuation (20·log₁₀(1/√(1 + (24/19.4)²)) = −4.03 dB) before folding back into the audio band. This is why real anti-alias filters for audio use 4th-order or higher active topologies. The RC pole is a pre-filter to keep RF and far-out-of-band signals from overloading the active stage. See "When First-Order Isn't Enough" below.

High-Pass Filters: AC Coupling

The most common high-pass application is DC blocking. Audio signals ride on top of DC bias voltages inside amplifiers, and one circuit's DC offset can saturate the next stage if connected directly. A series capacitor plus the input resistance of the next stage forms a high-pass filter that blocks DC while passing the AC audio.

Typical guitar-amp input: 1 MΩ input impedance on the next stage, target f_c well below the lowest bass note. Pick f_c = 8 Hz so the guitar's low E at 82 Hz is untouched and even a 20 Hz rumble passes cleanly. Solve for C:

C = 1 / (2π · R · f_c) = 1 / (2π · 1e6 · 8) = 19.9 nF

Use 22 nF (E6). Actual f_c = 7.23 Hz. At 20 Hz the signal is down only 0.5 dB, the 82 Hz bass fundamental is down 0.04 dB, and DC is completely blocked.

Pick the capacitor value based on how low in frequency you want to pass cleanly. For subwoofer work, drop f_c to 5 Hz. For voice-only applications, 200 Hz is fine and reduces microphone handling noise.

Picking Real Components

Three rules that keep the calculated answer matching the measured answer:

Capacitor tolerance dominates. Ceramic X7R capacitors carry ±10% tolerance at 25 °C and drift up to ±15% more across the full −55 to +125 °C operating range. A 100 nF capacitor at f_c = 1 kHz might actually be 85 nF or 115 nF, shifting f_c to 923 Hz or 1176 Hz. Film capacitors (polypropylene, polyester) hold ±5% and stay within ±2% over temperature, which is why they're standard in audio. C0G/NP0 ceramics offer excellent precision (±5% or tighter, ±30 ppm/°C drift) but only come in smaller values, typically below 10 nF.

Keep source impedance low relative to R. If the source driving the filter has output impedance R_s, the effective R in the cutoff formula becomes R_s + R. For a 10 kΩ filter resistor driven from a 1 kΩ source, f_c shifts down about 10%. Buffer the source with an op-amp if R_s is more than a few percent of R.

Keep load impedance high relative to R. The filter loads the previous stage, and the next stage loads the filter. If the load resistance R_L sits across the output capacitor (low-pass case), the effective R becomes R in parallel with R_L, shifting f_c up. For a clean first-order response, make R_L at least 10× R.

All three rules show up as "hidden" errors when a circuit on paper doesn't match the breadboard. The RC filter calculator handles the ideal math; the three rules keep the ideal math relevant to what you actually build.

When First-Order Isn't Enough

A single RC pole gives −20 dB per decade, which sounds fast until you try to use it for anti-aliasing or RF filtering. At 2× f_c the response is only down 7 dB. At 5× f_c it's down 14 dB. Most signal chains need more.

Three ways to get steeper rolloff:

Cascade multiple RC stages with buffers. Two RC stages give −40 dB/decade, three give −60 dB/decade. You need a buffer amplifier (usually a unity-gain op-amp) between stages; direct cascading changes the effective impedance of each stage and ruins the nominal cutoff. This approach is simple but component-heavy.

Sallen-Key active filters. A single op-amp with two resistors and two capacitors gives a true second-order response: −40 dB/decade with a defined Q factor and no buffering required. Sallen-Key low-pass is the go-to topology for audio anti-aliasing filters from 20 kHz to a few MHz.

LC passive filters. At radio frequencies, inductors replace active stages. An LC low-pass in a Pi or T configuration gives second-order response without an op-amp and works well into the GHz range. The tradeoff: inductors are bulky, expensive, and couple to stray magnetic fields. RC is almost always preferred below a few hundred kHz; LC takes over above.

For most everyday tasks (PWM smoothing, DC blocking, simple tone shaping, anti-aliasing pre-filtering), a first-order RC is the right answer. Reach for higher-order designs when you need more than 20 dB of rejection one decade past the corner.

Common Mistakes

Ignoring source impedance. A potentiometer-based tone control with 10 kΩ of source impedance feeding a 10 kΩ filter resistor does not produce the f_c you calculated from R = 10 kΩ alone. Effective R = 20 kΩ, so f_c is half of what you expected.

Skipping buffers between cascaded stages. Two 1 kHz low-pass filters directly connected do not produce a 1 kHz second-order filter. The second stage loads the first, shifting both corners. Always buffer.

Using polarized capacitors in AC-coupling applications. A 10 µF electrolytic in series with an audio signal works only if it sees a DC bias larger than the AC swing. In a bidirectional signal path (no DC offset), use a non-polarized capacitor or two back-to-back electrolytics. Better: use a film or tantalum bipolar cap.

Designing around ideal component values. Real capacitors have equivalent series resistance (ESR), real resistors have parasitic capacitance, and both have finite tolerance. For precision work, verify the built circuit against its design target with a signal generator and oscilloscope before assuming the math holds.

Run your RC filter calculations through the Calcflux RC filter calculator and cross-check with the resistor color code calculator when reading physical parts. For more complex impedance work, the Ohm's Law calculator handles the steady-state resistor relationships that underpin every filter design.