Low-pass Filtering#
A filter that keeps low-frequency content and attenuates high-frequency noise in a signal.
Important
✨ AI-generated content. This page was written with the assistance of an AI language model and is provided as a learning aid. Despite careful review, it may still contain mistakes, omissions, or out-of-date information. Whether you are new to the topic, a team lead, or a senior practitioner, treat it as a starting point rather than an authoritative reference: read it critically and independently verify anything you act on (code, commands, figures, and factual claims) against official documentation and primary sources before relying on it.
What it is#
A low-pass filter (LPF) lets low-frequency content through while attenuating high-frequency content. In practice that means smoothing a signal and removing high-frequency noise while keeping the slow-moving structure.
Frequency-domain view#
An ideal low-pass filter keeps everything below a cutoff frequency \(f_c\) and removes everything above it:
Real filters approximate this brick wall with a smoother roll-off.
Time-domain view#
Equivalently, low-pass filtering is convolution with a smoothing kernel — a moving average or a Gaussian window — which is exactly the smoothing used in time-series analysis.
Common filter types#
Ideal — perfect sharp cutoff (theoretical only).
Butterworth — flat passband, smooth roll-off.
Chebyshev — sharper cutoff at the cost of passband ripple.
Digital FIR / IIR — the workhorses of practical DSP.
Moving average — the simplest crude low-pass filter.
Where it’s used#
Removing hiss from audio, blurring images, extracting long-term trends from noisy time series, isolating frequency bands in communications, and cleaning ECG/EEG signals in biomedicine.
Example#
Daily stock prices wobble with short-term noise; a low-pass filter strips the wobble and leaves the longer-term trend visible.
import numpy as np
from scipy.signal import butter, filtfilt
t = np.linspace(0, 1, 500)
signal = np.sin(2*np.pi*5*t) + 0.5*np.sin(2*np.pi*50*t) # 5 Hz + 50 Hz
noisy = signal + 0.3*np.random.randn(len(t))
b, a = butter(N=4, Wn=0.1) # cutoff at 0.1 x Nyquist
clean = filtfilt(b, a, noisy) # zero-phase filtering
Theme: Signal Processing & Time Series · All terminology
Hint
More in Signal Processing & Time Series
ARIMA (AutoRegressive Integrated Moving Average) · Bayesian Time Series · Forecast Error · Forecasting Benchmarks · Forecasting Competitions · Log-Space · LSTM — Long Short-Term Memory Networks · M-Competitions (Makridakis Competitions) · Naïve Baseline Forecast · Prophet — Time Series Forecasting by Facebook (Meta) · Seasonal Lag · Seasonality · Signal Processing · Simple Baseline Methods
See also
Source article Adapted (context, re-expressed) in our own words from: Low-pass Filtering (insightful-data-lab.com).