FIRDesign 1.3

The FIR filter designer for loudspeakers and rooms

A linear- and minimum-phase FIR filter designer, in the spirit of rePhase. Design a correction by hand, from measurements, or from a FIR filter you already have; see exactly what it does across magnitude, phase, group delay and impulse; then export a filter for your convolution engine.

Native macOS, Windows & Linux. Self-contained — nothing else to install.

FIRDesign charts workspace — magnitude and phase with a measurement, target and correction, plus the band console
The charts workspace — magnitude & phase, bands, and correction.
FIRDesign group-delay view
Switch views — group delay, impulse, and error.

Designing filters

  • Three independent channels. A filter is built from parametric bands (each carrying both magnitude and phase), a magnitude correction curve, and a phase correction curve — combined into one FIR.
  • Parametric bands in banks of 16, with types peak, low/high shelf, low/high pass, all-pass, phase EQ and linearize; drag on the chart or type exact values; per-bank gain range (±6 / ±12 / ±24 dB).
  • Phase modes. Linear, Minimum, or Intermediate — a continuous blend via α.
  • Synthesis windows. Auto (picks Blackman for steep filters, Hann otherwise), plus Hann, Blackman and Kaiser with adjustable stopband attenuation.
  • Fidelity-aware auto-centering. Finds the minimal latency that still reproduces the design faithfully — including steep low-frequency filters — or set centering by hand.
  • Full control. Sample rates 44.1–192 kHz, tap counts 1024–65536, selectable optimization passes, and output gain with one-click Normalize.

Measuring & correcting

  • Measurement import. Load .frd measurements with smoothing and a level offset; impedance-looking traces are detected and refused.
  • Targets. Flat, a tilt/slope, an imported curve, or a built-in house-curve builder (bass boost, treble cut, slope).
  • Auto-EQ (magnitude). Fits the correction to your target — as a smooth curve or as bands — with sensible max-boost / max-cut limits and warnings when a limit is reached.
  • Excess phase. Removes excess phase (crossover, driver, delay) beyond minimum phase, always gated by per-frequency measurement reliability, with a clear verdict.
  • Verify loop. Load an after-correction measurement to overlay the real result against the baseline, plus a delta-prediction that tracks further edits without double-correcting.

Rebuild a filter you already have New in 1.3

  • Open an existing FIR filter. Import filter… reads a text coefficient file — the shape rePhase and most designers write — and puts its magnitude in the correction slot. Not a format conversion: everything the old file baked in comes back to you as a decision.
  • The amplitude, frequency by frequency. The imported curve is an ordinary magnitude correction, so the band faders sit on top of it and shape it exactly as they shape an Auto-EQ curve — a problem at one frequency is fixed by dragging a band there.
  • Level. The curve keeps the file's own dB, so 0 dB on it means the filter does nothing there — which is what keeps several legs of one multi-way set comparable when each is imported separately. Output level stays the separate question it always is: Gain dB, or one-click Normalize.
  • Phase linearity, centering, pre-ringing. Phase is the linear ↔ minimum blend you choose here, not a property of the file; centering sets the latency, and with it the pre-ringing you are willing to accept.
  • Taps and window. The tap count is latency and how far down the filter can act; the window trades ringing against stopband depth. Both are yours to pick again.
  • Sample rate — one item on that list, not the headline. The curve is frequencies in Hz and carries no rate of its own, so a filter made at 96 kHz is redesigned at 88.2 kHz by setting the project there and changing nothing else. The file's rate is never guessed: you state it, because reading it wrong moves every frequency and still looks plausible.
  • It says what it found before anything is applied. Tap count and layout, whether the impulse is symmetric and where its peak sits, the usable band and the dB range — with notes where they matter, and a refusal, rather than a half-read, for a file that is plainly a curve and not coefficients. The curve carries the file's content from the file's own resolution upwards and fades to 0 dB below it, instead of inventing a low end the filter never had.
  • Magnitude only. Phase is not imported — the rebuilt filter's phase is whatever you design here. An import and Auto-EQ are alternatives filling the same correction, so if you are going to measure anyway, Auto-EQ against your own measurement is the better start.

Seeing what you did

  • Six hand-drawn, high-resolution charts (log-frequency): magnitude, phase, group delay, impulse and error — with legend, hover read-out, a shared crosshair, zoom and masking.
  • Audibility-graded Design Check. Continuously grades the filter and flags issues by audibility — a green "OK" when there's nothing to worry about, with notes like "≈45 dB below peak, likely inaudible" so warnings stay meaningful.

Output & projects

  • Export the impulse response as WAV, raw (headerless float), or text (rePhase-style, one coefficient per line).
  • Projects (.firproj) save and restore the full design.
  • Undo / redo with coalescing history (a continuous fader drag collapses to one step).

Help & expert control

  • Comprehensive in-app help — searchable, cross-linked topics, opened from the toolbar ?, F1, or contextual ? buttons. Rendered natively, so it adds nothing to the download.
  • Expert panel exposes a few normally-baked-in judgment-call constants (auto-centering tolerance, auto-window steepness, Auto-EQ Q cap), saved per project.
  • Generous-but-sensible value limits throughout, so a stray entry can never push the engine into nonsense.

Platforms & installation

Native, self-contained installers — a trimmed OpenJDK and OpenJFX are bundled, so there's nothing else to install.

  • macOS — Apple Silicon (arm64) + Intel (x86_64), .dmg
  • Windows — x64, .msi / .exe
  • Linux — arm64 + x86_64, .deb / .rpm / .AppImage

Go to downloads →

Try, then unlock

FIRDesign installs once and runs as a trial: every feature works except project save and impulse export, which are shown but locked, and the title shows "(Trial)".

Buy the full version — $39, one-time — and you receive a license key. Paste it into Activate… (or load it from the file you were sent) and FIRDesign verifies it on your machine. No login, no server, no phone-home — activation is fully offline, and your copy is "Licensed to you". Restart to unlock everything.

See pricing →

Design your first filter today

Try every feature free, then unlock with a one-time $39 license.