Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Export & Project Management

This section covers exporting filters, total impulse responses, and managing your LinFIR projects.


Filter Export

Overview

LinFIR allows you to export processed FIR filter coefficients for use in external DSP systems, hardware amplifiers, or room correction software. You can export:

  • Individual Driver FIR Filters: Per-driver crossover and correction filters (Loudspeaker Design mode only)
  • Global FIR Correction: System-wide magnitude and phase correction filters
  • Total Impulse Response: The complete processed system impulse at the listening position

Access: Menu > Export Filters

Important: Driver Adjustments Are Not Exported

⚠️ Critical Note: Filter exports (FIR and IIR) do NOT include Driver Adjustments (gain, time delay, and polarity inversion).

What’s Exported:

  • FIR filter coefficients (crossovers + correction)
  • IIR filter coefficients (parametric EQ, shelving, etc.)

What’s NOT Exported:

  • 🔊 Gain adjustment (-40 to +40 dB)
  • ⏱️ Time delay (0 to 100 ms)
  • 🔄 Polarity inversion (180° phase flip)

Why?

These parameters are intentionally excluded for both technical and practical reasons.

Gain Embedding a gain offset directly into FIR coefficients (scaling all taps) seems harmless, but can silently cause internal clipping in some DSP architectures — particularly fixed-point or integer pipelines where the headroom available after the FIR stage is limited. DSP platforms provide dedicated gain controls for precisely this reason: they operate at the right stage in the signal chain and respect the hardware’s dynamic range constraints.

Time delay Baking a time delay into a FIR filter is a costly misuse of resources. It works by translating the filter impulse response within its tap window: the filter is shifted right by N samples, zeros are prepended on the left, and the same number of meaningful taps are truncated on the right. This has two consequences:

  1. Filter truncation introduces artefacts — the discarded taps carry real filter information (typically the ringing or low-frequency content of the impulse). Losing them degrades the filter’s frequency and phase response.
  2. Convolving zeros is wasteful — a DSP has to compute multiplications on those leading zeros at every sample, consuming CPU cycles or DSP MAC operations to produce nothing. By contrast, every DSP platform offers dedicated delay lines (circular buffers, integer sample delay blocks) that implement delay at essentially zero computational cost. They are the right tool for the job.

Polarity inversion A simple sign flip on all coefficients works mathematically, but like gain, it is directly available as a single-bit inversion in every DSP, with no processing overhead.

In short: each of these adjustments has a dedicated, efficient, and precise implementation in your DSP. Keeping them separate from the FIR data gives you full control and avoids hard-to-debug artefacts.

What You Must Do: After exporting filters, you must manually configure these parameters in your target DSP:

  • Set each driver’s output gain/level
  • Configure time delay/alignment for each channel
  • Enable polarity inversion where needed

Exception:

  • Hypex HFD Export (→ see HFD Export, available in Loudspeaker Design mode, no license required): Gain, delay, and polarity are automatically included in the .hfd configuration file

Export File Formats

LinFIR supports multiple export formats to ensure compatibility with various DSP platforms:

Binary Formats

  • FLOAT32LE (.bin): IEEE 754 32-bit little endian float
    • Standard format for CamillaDSP and MiniDSP
    • Raw binary data, no header
    • Each sample is 4 bytes
  • FLOAT64LE (.bin): IEEE 754 64-bit little endian float
    • Higher precision for demanding applications
    • Raw binary data, no header
    • Each sample is 8 bytes

Text Formats

  • CSV row (.csv): Comma-separated values in a single row
  • CSV column (.csv): One coefficient per line
  • Text decimal (.txt): Decimal format, one coefficient per line: 0.123456
  • Text scientific (.txt): Scientific notation format, one coefficient per line: 1.2345600000000000e-01

Audio Formats

  • WAV 16-bit (mono) (.wav): 16-bit integer PCM
    • Auto-normalized: Coefficients are automatically normalized to prevent clipping if max(abs(value)) > 1.0
    • Range: -32768 to 32767 (maps to -1.0 to 1.0)
    • Single channel audio file
  • WAV 24-bit (mono) (.wav): 24-bit integer PCM
    • Auto-normalized: Coefficients are automatically normalized to prevent clipping if max(abs(value)) > 1.0
    • Range: -8388608 to 8388607 (maps to -1.0 to 1.0)
    • Single channel audio file
  • WAV 32-bit float (mono) (.wav): 32-bit floating point
    • Raw coefficients: No normalization, values preserved as-is (can exceed ±1.0)
    • Same data as FLOAT32LE binary format, but with WAV header
    • Single channel audio file
  • WAV 16-bit (stereo) (.wav): 16-bit integer PCM stereo
    • Auto-normalized: Coefficients are automatically normalized to prevent clipping if max(abs(value)) > 1.0
    • Range: -32768 to 32767 (maps to -1.0 to 1.0)
    • Dual channel audio file with identical left/right channels (mono signal duplicated)
  • WAV 24-bit (stereo) (.wav): 24-bit integer PCM stereo
    • Auto-normalized: Coefficients are automatically normalized to prevent clipping if max(abs(value)) > 1.0
    • Range: -8388608 to 8388607 (maps to -1.0 to 1.0)
    • Dual channel audio file with identical left/right channels (mono signal duplicated)
  • WAV 32-bit float (stereo) (.wav): 32-bit floating point stereo
    • Raw coefficients: No normalization, values preserved as-is (can exceed ±1.0)
    • Dual channel audio file with identical left/right channels (mono signal duplicated)

Note on Normalization: FIR filter coefficients can have values outside the ±1.0 range. WAV PCM formats (16-bit, 24-bit) automatically normalize coefficients to fit their limited integer range while preserving the filter’s frequency response shape. WAV 32-bit float and binary formats (FLOAT32LE/FLOAT64LE) preserve raw coefficient values without normalization.

Note on Stereo Formats: Stereo WAV formats duplicate the mono FIR filter signal to both left and right channels. The actual filter data is identical in both channels.

Platform-Specific Formats

  • Text - Powersoft Armonia (.txt): Format for Powersoft amplifiers. Usually requires 48 kHz to be set as target sampling frequency.

FIR Export Process

When exporting FIR filters (Menu > Export Filters):

  1. Driver Selection: In Loudspeaker Design mode, LinFIR exports each enabled driver with active FIR filters (HP, LP, or correction)
    • Only enabled drivers are exported (drivers with the Enabled button toggled on in the Drivers toolbar)
    • Disabled drivers are automatically skipped during export
  2. Global Filter: If global FIR correction is enabled, it’s exported as a separate file
  3. Room Calibration Mode: Only global filters are exported (no per-driver files)
  4. File Naming: Each filter gets a descriptive name with complete parameter details by default

Filter Naming Convention

Exported filter names include all relevant parameters for complete traceability:

Driver FIR Example:

Tweeter_4096taps_96000Hz_HPLR4-2500Hz_CORR(MAG+PH_R30dB_G-2.5dB_MinPhase).wav

Components:

  • Tweeter: Driver name (from imported IR filename)
  • 4096taps: Filter length (including padding)
  • 96000Hz: Sample rate
  • HPLR4-2500Hz: High-pass Linkwitz-Riley 4th-order at 2500 Hz
    • Format: HP or LP + filter type abbreviation + order (if not brick-wall) + - + frequency
    • Types: Brick-wall (no order), BW (Butterworth), LR (Linkwitz-Riley), BE (Bessel)
  • CORR(...): Correction filter details (only if correction is enabled)
    • MAG+PH: Both magnitude and phase correction enabled
    • MAG or PH: Only one correction type enabled
    • R30dB: 30 dB correction range (magnitude only)
    • G-2.5dB: -2.5 dB post-gain (magnitude only, only if gain ≠ 0)
    • MinPhase: Minimum-phase causality (causality ≥ 0.99)
    • C75%: Mixed causality at 75% (causality 0.01-0.98)
    • No causality suffix = Linear-phase (causality = 0.0)

Global FIR Example:

GlobalFIR_8192taps_96000Hz_MAG_R40dB_C50%_200-18000Hz.wav

Components:

  • GlobalFIR: Global correction identifier
  • 8192taps: Filter length (including padding)
  • 96000Hz: Sample rate
  • MAG or PH or MAG+PH: Correction type enabled
  • R40dB: 40 dB correction range (magnitude only)
  • G+2.5dB: Post-gain in dB (only if gain ≠ 0)
  • MinPhase: Minimum-phase (causality ≥ 0.99)
  • C50%: Mixed causality at 50% (0.01-0.98)
  • No causality suffix = Linear-phase (causality = 0.0)
  • 200-18000Hz: Frequency range (only if f_min > 20 Hz or f_max < Nyquist - 100 Hz)

Padding and Filter Length

Exported filters include:

  • Base taps: The configured filter length (N taps)
  • Padding taps: Additional zero-padding if configured

Padding ensures compatibility with DSP systems that require a specific fixed tap count (e.g., Hypex amplifiers and DSPs require specific lengths).

Room Calibration Export Behavior

In Room Calibration mode:

  • Only global filters are exported (no per-driver FIR files)
  • The global FIR represents the averaged correction across all measurement positions
  • Individual driver controls are disabled in this mode
  • Export focuses on the overall room response correction

IIR Filter Export

Overview

LinFIR can export IIR filters (digital biquad coefficients) in four formats:

  • FQG Format (.txt): Text-based frequency/Q/gain lists
  • CamillaDSP Format (.yml): YAML configuration for CamillaDSP
  • Q-SYS Format (.csv): CSV biquad coefficients for Q-SYS IIR Custom Filter
  • MiniDSP Format (.txt): Compact biquad coefficients for MiniDSP devices

Note: Only IIR filters from enabled drivers are exported. Disabled drivers are automatically skipped.

IIR export is available for:

  • Global IIR filters (system-wide EQ and crossovers)
  • Per-driver IIR filters (individual driver EQ, in Loudspeaker Design mode)

Export Formats

FQG Format (Text)

Simple text format listing filter parameters:

# Global IIR Filters (FQG Format)
# Sample Rate: 96000 Hz
# Format: Type [Pass] Frequency [Order] [Q] [Gain]

Butterworth HP 80.0 4
Butterworth LP 20000.0 4
PEQ 1200.0 2.500 -3.50
LowShelf 200.0 0.707 2.00
HighShelf 10000.0 0.707 -1.50
Allpass2 3000.0 1.414
Allpass1 500.0

Format Details:

  • Butterworth/LR/Bessel: Type Pass Frequency Order
    • Pass: HP (high-pass) or LP (low-pass)
  • PEQ: PEQ Frequency Q Gain
  • Low/High Shelf: LowShelf/HighShelf Frequency Q Gain
  • Allpass2: Allpass2 Frequency Q (second-order)
  • Allpass1: Allpass1 Frequency (first-order)

CamillaDSP Format (YAML)

Full YAML configuration with native CamillaDSP filter types:

# Global IIR Filters (CamillaDSP Format)
# Sample Rate: 96000 Hz
filters:

  filter_1:
    type: BiquadCombo
    parameters:
      type: ButterworthHighpass
      freq: 80.0
      order: 4

  filter_2:
    type: Biquad
    parameters:
      type: Peaking
      freq: 1200.0
      gain: -3.50
      q: 2.500

  filter_3:
    type: Biquad
    parameters:
      type: Lowshelf
      freq: 200.0
      gain: 2.00
      q: 0.707

CamillaDSP Native Types:

  • ButterworthLowpass / ButterworthHighpass
  • LinkwitzRileyLowpass / LinkwitzRileyHighpass
  • Peaking (PEQ)
  • Lowshelf / Highshelf
  • Allpass (second-order)
  • AllpassFO (first-order)

Bessel Filters: CamillaDSP doesn’t natively support Bessel filters, so they’re exported as Free biquad sections with explicitly calculated coefficients:

  filter_1_1_bessel:
    type: Biquad
    parameters:
      type: Free
      b0: 0.9876543210123456
      b1: -1.9753086420246912
      b2: 0.9876543210123456
      a1: -1.9750000000000000
      a2: 0.9755086580370370

Q-SYS Format (CSV)

CSV format for Q-SYS IIR Custom Filter components. Each line represents one biquad section with coefficients in the order: b0, b1, b2, a0, a1, a2.

0.0040888760000000, 0.0081777519000000, 0.0040888760000000, 1.0000000000000000, -1.8954199260000000, 0.9117754299000000,
0.0040888760000000, 0.0081777519000000, 0.0040888760000000, 1.0000000000000000, -1.8954199260000000, 0.9117754299000000,
0.0033894348000000, 0.0067788696000000, 0.0033894348000000, 1.0000000000000000, -1.7990948390000000, 0.8126525782000000,

Format Specification:

  • One biquad section per line
  • Coefficients: b0, b1, b2, a0, a1, a2, (trailing comma optional)
  • Coefficient a0 must be non-zero (normalized to 1.0 by LinFIR)
  • 16 decimal places precision for maximum accuracy
  • Compatible with Q-SYS Designer IIR Custom Filter component

Usage in Q-SYS:

  1. Export filters from LinFIR in Q-SYS format
  2. In Q-SYS Designer, add an IIR Custom Filter component
  3. Set the component’s Section Count property to match the number of lines in your CSV file
  4. Close and reopen the component’s control panel
  5. Load the CSV file using the Coefficient File property

Important Notes:

  • Each filter in LinFIR may generate multiple biquad sections (see Biquad Count Reference below)
  • High-order filters (e.g., Butterworth 8th order) will create multiple CSV lines
  • Total biquad count = sum of all lines in the CSV file

MiniDSP Format (Text)

Compact text format with biquad coefficients for MiniDSP hardware processors. Each biquad section is labeled and coefficients are provided in normalized form.

biquad1,
b0=0.9876543210123456
b1=-1.9753086420246912
b2=0.9876543210123456
a1=1.9750000000000000
a2=-0.9755086580370370
biquad2,
b0=1.0123456789012345
b1=-2.0246913578024690
b2=1.0123456789012345
a1=1.9980000000000000
a2=-0.9960493580246914

Format Specification:

  • Each biquad section starts with biquadN, where N is the section number (1, 2, 3, …)
  • Coefficients are listed one per line in the order: b0, b1, b2, a1, a2
  • Note: a0 is omitted (assumed to be 1.0 after normalization)
  • a1 and a2 use miniDSP’s sign convention (y = b0·x0 + b1·x1 + b2·x2 + a1·y1 + a2·y2): they are the negated standard denominator coefficients
  • Format: coefficient_name=value with no spaces around the = sign
  • 16 decimal places precision for maximum accuracy

Important Notes:

  • Each filter in LinFIR may generate multiple biquad sections (see Biquad Count Reference below)
  • MiniDSP devices have limited biquad slots
  • High-order filters will consume multiple biquad slots
  • Check your device’s specifications for maximum biquad count before exporting complex filter chains

Biquad Count Reference

Understanding biquad counts is essential when exporting to hardware with limited DSP resources (e.g., Hypex FA series amplifiers with a 15-biquad limit):

Filter TypeOrderBiquad Count
Butterworth/Bessel LP/HP11
Butterworth/Bessel LP/HP21
Butterworth/Bessel LP/HP32
Butterworth/Bessel LP/HP42
Butterworth/Bessel LP/HP53
Butterworth/Bessel LP/HP63
Butterworth/Bessel LP/HP74
Butterworth/Bessel LP/HP84
Butterworth/Bessel LP/HP95
Butterworth/Bessel LP/HP105
Linkwitz-Riley LP/HP2 (LR2)2
Linkwitz-Riley LP/HP4 (LR4)2
Linkwitz-Riley LP/HP8 (LR8)4
Linkwitz-Riley LP/HP10 (LR10)5
PEQ (Parametric EQ)-1
Low/High Shelf-1
Allpass2 (2nd-order)-1
Allpass1 (1st-order)-1

Linkwitz-Riley Formula: LR filters are implemented as cascaded Butterworth sections:

  • LR order = 2 × Butterworth order
  • LR2 = 2× Butterworth 1st-order = 2 biquads
  • LR4 = 2× Butterworth 2nd-order = 2 biquads
  • LR8 = 2× Butterworth 4th-order = 4 biquads

Butterworth/Bessel Formula: Biquad count = ⌈order / 2⌉ (ceiling of order divided by 2)

Export Process

  1. Open Menu > Export IIR Filters
  2. Select export format (FQG, CamillaDSP, Q-SYS, or MiniDSP)
  3. LinFIR identifies all enabled IIR filter chains:
    • Global IIR (if enabled)
    • Per-driver IIR (if enabled, Loudspeaker Design mode only)
  4. For each filter chain, specify output filename
  5. Files are generated with complete filter specifications

Room Calibration Mode: Only global IIR filters are exported (no per-driver files).


Total Impulse Response Export

Overview

Export the complete processed impulse response at the listening position (acoustic sum of all enabled drivers + global filters).

This is useful for:

  • External room correction systems (e.g., Audiolense, Acourate, etc.)
  • Validation and measurement (import into REW, Matlab, etc.)
  • Archival and comparison (document before/after tuning)

Export Options

Menu > Export Predicted Total IR (TXT/WAV)

WAV Export

  • Format: 32-bit float WAV (single channel)
  • Sample Rate: Choose target sample rate (can differ from project sample rate)
    • LinFIR will resample automatically if needed
    • Common rates: 44.1 kHz, 48 kHz, 96 kHz, 192 kHz

Example: Export at 48 kHz for compatibility with external room correction software, even if your project is at 96 kHz.

TXT Export

  • Format: Plain text, one sample per line (decimal)
  • Sample Rate: Choose target sample rate (with automatic resampling)
  • Use Cases: Import into Matlab, Python (numpy), or custom DSP tools

Resampling Behavior

If the target sample rate differs from your project sample rate:

  1. LinFIR uses high-quality resampling (sinc interpolation)
  2. The exported impulse maintains accurate time-domain characteristics
  3. No manual resampling required

Example Workflow:

  • LinFIR project at 96 kHz (high precision for design)
  • Export total impulse at 48 kHz (target hardware sample rate)
  • LinFIR handles resampling transparently

Project Management

Saving Projects

LinFIR projects are saved as .lnf files containing:

  • Driver configurations (impulse responses, filters, gain, delay, polarity)
  • Global FIR and IIR filter settings
  • Display preferences and graph states
  • Project mode (Loudspeaker Design or Room Calibration)
  • Measurement data (including off-axis measurements)

Save Shortcut: Cmd+S (macOS) / Ctrl+S (Windows/Linux)

Save As Shortcut: Cmd+E (macOS) / Ctrl+E (Windows/Linux)

Save Options

  1. Menu File/Save (or Cmd+S): Overwrites the current project file (prompts for a location if the project has never been saved)
  2. Menu File/Save as… (or Cmd+E): Saves the project to a new file with a name and location you choose. LinFIR then keeps working on the new file - later saves and auto-saves go to it, and the original file is left as it was
  3. Auto-Save: Enabled by default
    • Automatically saves every 60 seconds if changes detected
    • Runs in background without blocking the UI

Loading Projects

Menu > File/Load Project

LinFIR supports:

  • New format (.lnf): Current project structure with full multi-angle measurement support
  • Legacy format: Older LinFIR project files (automatically migrated on load)

Legacy Migration: When loading an old project file:

  • LinFIR converts the structure to the new format
  • A notification confirms successful migration
  • Re-save the project to preserve the new format

Drag & Drop

Drag .lnf files directly onto the LinFIR window to open projects.

Unsaved Changes Protection:

  • If you have unsaved changes, LinFIR prompts:
    You have unsaved changes. Save before opening?
    [Save] [Don't Save] [Cancel]
    

Recent Projects

Access recently opened projects from Menu > Recent Projects:

  • Up to 20 recent projects listed
  • Click to open instantly
  • List persists across sessions