Graphs Settings

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.
Focus on Summed Response
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 |
| Show Manual FIR Delay Compensation | Disabled | ⚙️ Advanced: Show manual FIR delay fields |
| 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 |
| Remove time of flight rotations | Disabled | Linear phase removal |
| 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 |
| Focus on Summed Response | 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
- Show Manual FIR Delay Compensation: Keep disabled unless you are experienced in signal processing and need manual FIR alignment control
- 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
- Focus on Summed Response: 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)