RC Low-Pass Filter

The RC low-pass filter is the most basic passive filter in analog circuits — one resistor and one capacitor can filter high-frequency noise from a signal path. Used in ADC anti-aliasing, audio de-hissing, and PWM output smoothing.

Core Formula

Cutoff frequency $f_c$ (−3 dB point):

KATEX_0

For an input signal at frequency $f$, the output amplitude gain is:

KATEX_1

Parameter Input

slex: "0.1",
  namespace: "example_rc_low_pass_filter",
  g: {
    r: 10000,
    c: 100,
    f: 1000,
    cutoff: function () { return 1 / (2 * Math.PI * this.r * this.c * 1e-9); },
    gain: function () { return 1 / Math.sqrt(1 + Math.pow(this.f / this.cutoff(), 2)); },
    gainDb: function () { return (20 * Math.log10(this.gain())).toFixed(1); },
    regimeLabel: function () { return this.f < this.cutoff() * 0.1 ? "Passband" : this.f > this.cutoff() * 10 ? "Stopband" : "Transition"; }
  },
  layout: {
    "section:params": {
      eyebrow: "Calculator",
      title: "RC Low-Pass Filter",
      subtitle: "One resistor and one capacitor — filter out high-frequency noise.",
      "card:params": {
        title: "Parameter Input",
      "grid:inputs": {
        columns: 1, mdColumns: 2,
        "column:rField": { "input:r": { label: "Resistance R", "$value": "g.r", type: "number", unit: "Ω", onchange: "g.r = Number($event || 0)" }, "slider:r": { label: "R", "$value": "g.r", min: 100, max: 100000, step: 100, unit: "Ω", onchange: "g.r = Number($event)" } },
        "column:cField": { "input:c": { label: "Capacitance C", "$value": "g.c", type: "number", unit: "nF", onchange: "g.c = Number($event || 0)" }, "slider:c": { label: "C", "$value": "g.c", min: 1, max: 1000, step: 1, unit: "nF", onchange: "g.c = Number($event)" } },
        "column:fField": { "input:f": { label: "Input frequency f", "$value": "g.f", type: "number", unit: "Hz", onchange: "g.f = Number($event || 0)" }, "slider:f": { label: "f", "$value": "g.f", min: 1, max: 100000, step: 1, unit: "Hz", onchange: "g.f = Number($event)" } }
      },
      "stat:fc": { label: "Cutoff frequency", "$value": "g.cutoff().toFixed(1)", unit: "Hz" },
      "badge:regime": { "$label": "g.regimeLabel()", "$tone": "g.f < g.cutoff() * 0.1 ? 'success' : g.f > g.cutoff() * 10 ? 'danger' : 'warning'" }
      }
    }
  }
}

Results

slex: "0.1",
  namespace: "example_rc_low_pass_filter",
  layout: {
    "card:results": {
      title: "Results",
      "formula:fc_eq": { "$tex": "'f_c = \\\\frac{1}{2\\\\pi \\\\times ' + (g.r/1000).toFixed(1) + 'k\\\\Omega \\\\times ' + g.c + '\\\\text{nF}} = ' + g.cutoff().toFixed(1) + '\\\\text{ Hz}'" },
      "stat:gain_val": { label: "Magnitude gain |H(f)|", "$value": "g.gain().toFixed(4)" },
      "stat:gain_db": { label: "Gain", "$value": "g.gainDb()", unit: "dB" },
      "callout:verdict": { "$tone": "g.f < g.cutoff() * 0.1 ? 'success' : g.f > g.cutoff() * 10 ? 'danger' : 'warning'", "$text": "g.f < g.cutoff() * 0.1 ? 'Signal passes through intact — attenuation < 0.04 dB.' : g.f > g.cutoff() * 10 ? 'Signal is heavily attenuated by over 20 dB — the filter is working effectively.' : 'Signal is in the transition band — attenuation is about ' + (-20 * Math.log10(1 / Math.sqrt(1 + Math.pow(g.f / g.cutoff(), 2)))).toFixed(1) + ' dB.'" }
    }
  }
}

Selection Guide

Below are common parameter combinations for typical scenarios. Set the cutoff frequency to 5–10× the highest signal frequency to ensure a flat passband.

slex: "0.1",
  namespace: "example_rc_low_pass_filter",
  layout: {
    "card:selection": {
      title: "Selection Guide",
      "table:guide": {
        columns: ["R", "C", "fc", "Typical Use"],
        rows: [
          ["1 kΩ", "100 nF", "1592 Hz", "Audio low-pass"],
          ["10 kΩ", "100 nF", "159 Hz", "ADC anti-aliasing"],
          ["100 kΩ", "10 nF", "159 Hz", "PWM smoothing"],
          ["1 kΩ", "1 µF", "159 Hz", "Power ripple filtering"],
          ["10 kΩ", "1 nF", "15915 Hz", "High-frequency noise suppression"]
        ]
      },
      "callout:tip": { "$tone": "g.cutoff() < 100 ? 'info' : g.cutoff() > 10000 ? 'warning' : 'success'", "$text": "g.cutoff() < 100 ? 'Low cutoff frequency — suitable for power filtering and slow signals.' : g.cutoff() > 10000 ? 'High cutoff frequency — may not effectively filter high-frequency noise.' : 'Current cutoff frequency suits most applications.'" }
    }
  }
}

Engineering Notes

$f/f_c$ Gain Attenuation
0.1 0.995 −0.04 dB
1.0 0.707 −3 dB
5.0 0.196 −14.2 dB
10.0 0.100 −20 dB