guides

Audio Signal Processing

FFT, waveform analysis, and filter chains in pure Python.

Published May 30, 2026

Moving Average Filter

def moving_average(signal: list[float], window: int) -> list[float]:
    result = []
    total = sum(signal[:window])
    result.append(total / window)
    for i in range(window, len(signal)):
        total += signal[i] - signal[i - window]
        result.append(total / window)
    return result

RMS Energy

def rms(signal: list[float]) -> float:
    total = 0.0
    for s in signal:
        total += s * s
    return (total / len(signal)) ** 0.5

Sampling Rate Conversion

def resample(signal: list[float], factor: int) -> list[float]:
    return [signal[i * factor] for i in range(len(signal) // factor)]