Global Settings
Global settings affect the entire LinFIR application and are accessible via Edit → Settings or the keyboard shortcut Cmd+, (macOS) / Ctrl+, (Windows).
The Settings window is organized into three tabs:
- General: Application preferences, defaults, and appearance
- Audio Settings: Audio device configuration and measurement setup
- Graphs: Display options and graph configuration
This page covers the General and Graphs tabs. For Audio Settings, see Audio Configuration.
General Settings Tab
Appearance
Customize the visual appearance of the LinFIR interface.
UI Color Scheme
Choose between two color themes for LinFIR’s interface elements:
- Red (default): Custom red accent colors for headers, titles, and active buttons
- Blue: Standard egui theme with blue accents
What changes:
- Section headers (Parameters, Drivers, Global Filters)
- Graph titles (Frequency Responses, Impulse Responses, etc.)
- Active button colors and selection highlights
- Accent colors throughout the interface
Application: Changes apply immediately without requiring restart.
Theme (Light/Dark Mode)
Switch between light mode and dark mode using the system theme preference buttons.
- Light mode: Bright background, dark text
- Dark mode: Dark background, light text
- Follow system: Automatically matches your operating system theme preference
Filter Processing
Settings that affect how filters are computed and validated.
Clipping Detection
Default: Enabled
When enabled, LinFIR analyzes filter chains to detect potential clipping and suggests gain adjustments.
How it works:
- Generates a normalized 32-tone test signal (amplitude = 1.0) covering 20 Hz to 20 kHz
- Applies all active filters to the test signal
- Warns when filter output exceeds 1.1 (≈0.8 dB above 0 dBFS)
- Suggests gain reduction to bring peak below 0.95 (-0.44 dBFS)
Important clarifications:
⚠️ Measurement levels are not tested - Clipping warnings are purely about filter processing, not your imported measurements. The test signal is synthetic and independent of measurement amplitude.
⚠️ Phase processing can cause clipping even with flat magnitude responses - Filters with visually reasonable frequency responses can produce temporal peaks exceeding 0 dBFS. This is especially common with:
- Phase correction filters combined with other filters (without crossovers)
- All-pass filters that only modify phase
- Multiple FIR filters with different causality settings
Why this happens: Phase distortion (or correction) shifts frequency components in time, causing them to align constructively at certain moments. Classic example: a square wave with magnitude 1.0 can exceed 1.0 after phase processing, even though the Fourier magnitude spectrum remains unchanged.
Why disable:
- May improve performance on slower systems
- Removes safety warnings if you’re confident in your gain staging
⚠️ Warning: Disabling removes safety checks. Always test with your actual audio content when clipping detection is disabled.
Auto Causal Alignment
Default: Enabled
Automatically optimizes FIR impulse positioning when using multiple FIR filters with causality, based on logarithmic energy distribution analysis.
How it works:
- Computes logarithmic energy for each sample:
log(x² + ε)where ε = 10⁻¹² - Shifts log values to positive range while preserving relative distribution
- Calculates the log-energy ratio before and after the impulse peak
- Positions the peak at
ratio × n_tapswithin the FIR window- Example: 30% log-energy before peak → peak positioned at 30% of FIR taps
- Example: 50% log-energy before peak → peak centered at 50% of FIR taps
Why logarithmic energy:
- Gives more weight to weak signal components (pre-ringing, post-ringing) relative to the dominant peak
- Compresses dynamic range to better detect energy asymmetry in the impulse response
- More robust than simple amplitude threshold methods with complex filter combinations
Activation conditions:
- At least 2 FIR filters are active (correction, low-pass, high-pass, or phase filters)
- At least one filter has non-zero causality (> 0.0)
Why it’s useful:
- Prevents truncation of both pre-ringing and post-ringing artifacts
- Adapts positioning to actual signal energy distribution
- Handles asymmetric impulse responses from causal filter combinations
- Maximizes useful signal capture in the final cropped FIR window
When to disable:
- Manual control over impulse positioning is preferred using custom FIR Compensation Delay adjustments
- ⚠️ Only disable if you understand signal processing and impulse alignment implications - incorrect manual alignment can cause truncation artifacts or loss of filter effectiveness
Default Values for New Projects
Configure default settings that apply when creating new projects. These do not affect existing projects.
Sample Rate
Options: 44.1 kHz, 48 kHz, 88.2 kHz, 93.75 kHz, 96 kHz, 176.4 kHz, 192 kHz
Default: 48 kHz
Default sampling frequency for new projects.
- 44.1 kHz: Compact DSP platforms with limited processing power
- 48 kHz: Professional audio standard, most DSP platforms
- 88.2 kHz: High-resolution audio (2× CD rate, relatively uncommon DSP sampling frequency)
- 93.75 kHz: Hypex DSP platforms (FA123, FA253, FA502, etc.)
- 96 kHz: High-resolution audio
- 176.4/192 kHz: Ultra-high resolution - only use when DSP platform specifically requires it (higher CPU load, larger filter sizes)
FIR length (taps)
Range: 32 to 65536 taps
Default: 512 taps
Default number of taps for individual driver FIR filters (low-pass, high-pass, and correction filters).
- 512-2048 taps: Sufficient for most crossover and correction applications
- 4096 taps: Typical maximum needed for standard loudspeaker design
- 8192-16384 taps: Specialized use for subwoofer phase and magnitude correction in very low frequencies
- >16384 taps: Rarely needed - primarily for extreme low-frequency correction or research purposes
Trade-offs:
- More taps = better frequency resolution and steeper slopes
- More taps = higher latency (taps/2 samples for linear-phase filters)
- More taps = larger file sizes and more DSP processing required
Global FIR Taps
Range: 32 to 65536 taps
Default: 512 taps
Default number of taps for the global FIR correction filter (applied to the summed system response).
Same considerations as FIR length (taps) apply.
Curve Smoothing
Options: None, 1/48 octave, 1/24 octave, 1/12 octave, 1/6 octave, 1/3 octave
Default: None
Default smoothing applied to frequency response curves in plots.
- No smoothing: Shows raw response with all detail
- 1/48 to 1/24 octave: Subtle smoothing, reveals trends while keeping detail
- 1/12 octave: Good balance between detail and readability
- 1/6 to 1/3 octave: Heavy smoothing, shows overall trends only
Graph Display Mode
Options: FIR, IIR, FIR+IIR, Drivers/Measurements
Default: FIR
Default graph display mode for new projects.
- FIR: Shows FIR filter responses only
- IIR: Shows IIR filter responses only
- FIR+IIR: Shows combined FIR and IIR responses
- Drivers/Measurements: Shows complete processed driver/measurement responses
Keyboard shortcuts: Press F (Filters mode) or D (Drivers mode) to switch quickly.
Phase Display
Options: Unwrapped, Wrapped
Default: Wrapped
Default phase display mode for new projects.
- Wrapped: Phase values constrained to ±180°, with discontinuities at boundaries
- Unwrapped: Continuous phase values extending beyond ±180°
Note: Group delay is always computed from unwrapped phase; this setting only affects the phase graph display.
Keyboard shortcut: Press U to toggle unwrap/wrap mode.
Time-Centered Phase
Options: Enabled, Disabled
Default: Disabled
Removes the linear phase component (constant group delay) from phase responses to flatten phase around 0°.
How it works:
- Loudspeaker Design: Removes linear delay of Sum curve from all driver responses (or driver’s own delay for single driver)
- Room Calibration: Removes linear phase component of each individual measurement independently (no shared reference)
- Filters Mode: Removes linear phase component of each individual filter
Use cases:
- Loudspeaker Design: Identify phase alignment issues between drivers relative to system response
- Room Calibration: Compare phase behavior across room positions without timing offsets
Keyboard shortcut: Press C to toggle time-centered phase.
Default Sweep Parameters
Configure default settings for the built-in sweep measurement system. These apply to new measurement captures.
Sweep Duration
Range: 1.0 to 10 seconds
Default: 5 seconds
Default length of exponential sine sweep for impulse response measurements.
- Shorter (1-3s): Faster measurements, lower frequency resolution
- Longer (5-10s): Better low-frequency resolution, improved signal-to-noise ratio
Recommendation: 5-7 seconds for full-range measurements.
Sweep Level
Range: -40 to 0 dBFS
Default: -6 dBFS
Default output level for sweep signals.
Adjust this to match your amplifier’s input sensitivity and desired acoustic level. Lower values provide headroom for systems with high gain.
Start Frequency
Range: 0.1 to 1000 Hz
Default: 0.1 Hz
Default lower frequency limit of the sweep.
- 0.1 Hz: Captures near-DC response (full bandwidth)
- 20 Hz: Typical for full-range measurements
- Higher values: For focused high-frequency measurements (tweeters)
End Frequency
Range: 1 kHz to 192 kHz
Default: Nyquist frequency (sample rate / 2)
Default upper frequency limit of the sweep.
- Nyquist (auto): Full available bandwidth
- 20 kHz: Complete audible spectrum
- Lower values: For focused low-frequency measurements (subwoofers)
Note: End frequency is automatically clamped to the Nyquist frequency.
Reset Application Settings
⚠️ Warning: This action cannot be undone!
Completely reset all LinFIR settings to factory defaults.
What gets reset:
- All application settings and preferences
- Application cache and UI state
- Default values for new projects
- Audio device selections
- Graph display preferences
What is NOT reset:
- Existing project files (your work is safe)
Process:
- Save your current project before resetting
- Click “🔄 Reset Application Settings” button
- All settings restored to factory defaults
When to use:
- Troubleshooting configuration issues
- Starting fresh with default settings
- Clearing corrupted preferences
- Removing experimental settings after testing
Graphs Settings Tab
Configure display options and graph behavior.
Display
Plot Resolution
Options: 16k points, 32k points, 64k points
Default: 32k points (balanced)
FFT resolution for frequency response computation.
- 16k points (16384): Faster computation, lower frequency resolution
- 32k points (32768): Balanced performance and resolution
- 64k points (65536): Maximum frequency resolution, slower computation
Impact:
- Higher resolution provides finer low frequency detail in magnitude, phase, and group delay plots
- Affects computation time for filter responses and driver measurements
- Does not affect the actual filter quality, only the analysis resolution
Group Delay & Phase Truncation
Optionally truncate group delay and phase curves to the active frequency region using magnitude thresholds.
Enable Truncation
Default: Enabled
When checked: Group delay and phase curves are shown only where the corresponding magnitude exceeds a threshold below the maximum.
When unchecked: Full-range phase and group delay displayed regardless of magnitude.
Purpose:
- Avoid displaying phase/group delay in stop-band regions
- Focus on pass-band characteristics
- Reduce visual clutter from irrelevant frequency ranges
Truncation Thresholds (dB below maximum)
Independent thresholds for different contexts:
| Context | Group Delay | Phase | THD |
|---|---|---|---|
| Drivers | -20 dB | -20 dB | -20 dB |
| IIR Filters | -20 dB | -20 dB | — |
| FIR Filters | -20 dB | -20 dB | — |
| FIR+IIR | -20 dB | -20 dB | — |
How thresholds work:
- Values are expressed as dB below the maximum magnitude in the reference curve
- Example: -20 dB means “show phase/GD only where magnitude > (max - 20 dB)”
- Adjustable range: -120 dB to -20 dB
Context matching:
- The reference magnitude matches the context
- Example: FIR curves use FIR magnitude as reference
- Drivers use driver magnitude as reference
THD Truncation:
- Only available for Drivers context
- Shows Total Harmonic Distortion only in active magnitude regions
Magnitude Plot Bounds
Configure default Y-axis bounds for magnitude plots.
Drivers Range (dB)
Range: 20 to 200 dB
Default: 60 dB
Y-axis range for speaker magnitude plots.
- Calculation: From (max_response - range) to (max_response + 5 dB)
- Smaller values (20-40 dB): Zoomed view, emphasizes small variations
- Moderate values (60-80 dB): Good balance for most designs
- Larger values (100-200 dB): Wide view, shows full range
Filters Lower Bound (dB)
Range: -200 to 0 dB
Default: -100 dB
Lower bound of Y-axis for filter magnitude plots (IIR, FIR, FIR+IIR).
- Higher values (-40 dB): Focuses on pass-band details
- Lower values (-100 to -200 dB): Shows deep stop-band attenuation
Impulse/Step Response Display
Adaptive display automatically detects and shows only the relevant portion of impulse and step responses.
Enable Adaptive Display
Default: Enabled
When checked: Automatically detects signal boundaries based on amplitude threshold.
- Detection threshold: 1/1000th of peak amplitude
- Automatic margins: Adds configurable time before and after detected signal
When unchecked: Always shows the complete impulse response (full tap length).
Use case: Focuses view on active signal portion, especially useful for long impulse responses with significant zero-padding.
Margin Before (ms)
Range: 0 to 50 ms
Default: 5 ms
Time added before detected signal start.
Purpose: Ensures pre-ringing or early arrivals are visible in the plot.
Margin After (ms)
Range: 0 to 100 ms
Default: 10 ms
Time added after detected signal end.
Purpose: Captures decay tail and late reflections.
Sum Focus
Default: Disabled
When enabled in multi-driver plots:
- All curves (individual drivers and sum) use the summed IR time boundaries
- Focuses on the main energy region of the system response
When disabled (default):
- Uses the union of all individual curve boundaries
- Shows the full extent of all driver responses
Use case: Quickly identify timing alignment issues across speakers by focusing on the system sum.
Settings Summary Table
| Setting | Default | Purpose |
|---|---|---|
| Appearance | ||
| UI Color Scheme | Red | Interface accent colors |
| Theme | Follow System | Light/Dark mode |
| Filter Processing | ||
| Clipping Detection | Enabled | Safety warnings for filter output levels |
| Auto Causal Alignment | Enabled | Optimize IR positioning with causal filters |
| Default Values | ||
| Sample Rate | 48 kHz | Default for new projects |
| Speaker FIR Taps | 512 | Per-driver FIR filter length |
| Global FIR Taps | 512 | Global correction filter length |
| Curve Smoothing | 1/12 octave | Frequency response smoothing |
| Graph Display Mode | Drivers/Measurements | Initial display mode |
| Phase Display | Wrapped | Phase graph mode |
| Time-Centered Phase | Disabled | Linear phase removal |
| Sweep Parameters | ||
| Sweep Duration | 2 s | Measurement sweep length |
| Sweep Level | -6 dBFS | Output level |
| Start Frequency | 0.1 Hz | Lower frequency limit |
| End Frequency | Nyquist | Upper frequency limit |
| Graphs | ||
| Plot Resolution | 64k points | Frequency point count |
| GD/Phase Truncation | Enabled | Truncate by magnitude threshold |
| Truncation Thresholds | -20 dB | Threshold below max |
| Drivers Range | 60 dB | Y-axis range for drivers |
| Filters Lower Bound | -100 dB | Y-axis lower limit for filters |
| Adaptive IR Display | Enabled | Auto-detect IR boundaries |
| Margin Before | 5 ms | Pre-signal margin |
| Margin After | 10 ms | Post-signal margin |
| Sum Focus | Disabled | Use sum boundaries for all curves |
Performance Considerations
Real-Time Filter Processing Architecture
LinFIR differs fundamentally from traditional FIR filter design software in how it processes and displays results.
Real-time (“online”) filter generation:
- Filters are generated and applied to driver impulse responses in real time based on UI interactions
- The complete signal processing chain is computed immediately as you adjust parameters
- You see the true response of the entire filter chain instantly, including all windowing artifacts and actual behavior
Why this matters:
- Immediate feedback: No “generate” or “apply” button required - changes are visible instantly
- Transparency: Shows exactly what the filters can and cannot do, with all artifacts visible
- Accuracy: No approximation or preview mode - what you see is what you get
Contrast with traditional software:
- Most FIR design tools require you to validate parameters before showing the true response
- They often show theoretical or idealized responses that don’t reflect actual implementation artifacts
- LinFIR prioritizes showing real-world behavior over computational convenience
Filter Application Methods
FIR filters:
- Applied via fast convolution (multiplication in Fourier domain)
- Highly efficient for typical filter lengths
- Computational cost scales with filter length and number of measurements
IIR filters:
- Applied via recursive difference equations (time-domain processing)
- Extremely efficient regardless of filter complexity
- Minimal performance impact even with many cascaded sections
Performance Impact Factors
Filter length:
- Filters up to 4096 taps: Negligible performance impact on modern CPUs
- Filters 4096-8192 taps: May cause slight delays on slower systems
- Filters >8192 taps: Can noticeably slow down the application, especially during interactive adjustments
Off-axis measurements:
- Each off-axis measurement requires the full filter chain to be recomputed
- Projects with many off-axis angles and long filters may experience longer update times
- LinFIR prioritizes UI responsiveness using background processing (see below)
Background Processing for Responsiveness
To maintain smooth UI interaction even with complex projects, LinFIR uses processing prioritization:
Priority processing (synchronous, immediate):
- On-axis measurement (0°, 0°): Always computed first in the main thread
- Currently displayed angle: Computed immediately for instant visual feedback
- Filter parameters: Updated in real-time as you adjust controls
Background processing (asynchronous, non-blocking):
- Remaining off-axis measurements: Computed in a background thread after priority angles
- Directivity index: Calculated asynchronously when all measurements are ready
- System sum calculations: Processed in parallel when multiple drivers are active
User experience:
- Main graph updates are always immediate - you see changes to the selected angle instantly
- UI remains fully responsive even during heavy background computations
- You can continue adjusting parameters while background calculations complete
Optimization Recommendations
For slower systems or very long filters (>8192 taps):
-
Reduce plot resolution: Settings → Graphs → Plot Resolution
- Default: 64k points (maximum quality)
- Recommended for performance: 16k or 32k points
- Performance improvement with minimal visual quality loss
-
Disable clipping detection: Settings → General → Filter Processing
- Eliminates test signal processing on every update
- Only disable if you’re confident in your gain staging
-
Limit off-axis measurements:
- Use reasonable angle increments (10 or 15°)
Performance is always optimal for:
- Projects with standard filter lengths (≤4096 taps)
- IIR-only filtering (always fast regardless of complexity)
- Single on-axis measurements
- Modern multi-core processors (2020 or newer)
Best Practices
Performance Optimization
- Slower systems: Reduce plot resolution to 16k or 32k points
- Complex projects: Consider disabling clipping detection if filters are well-understood
Filter Design
- Auto Causal Alignment: Keep enabled unless you need precise manual control over IR positioning
- Clipping Detection: Keep enabled during design, test actual content before deploying
Graph Display
- Truncation: Enable for cleaner phase/GD plots focused on active frequency regions
- Sum Focus: Enable when analyzing multi-driver timing alignment
Measurement Setup
- Sweep Duration: Use 5-7 seconds for full-range, 2-3 seconds for limited bandwidth
- Sweep Level: Adjust based on amplifier sensitivity (-12 to -6 dBFS typical)