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

Graphs Settings

Graphs Settings Tab 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:

ContextGroup DelayPhaseTHD
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

SettingDefaultPurpose
Appearance
UI Color SchemeRedInterface accent colors
ThemeFollow SystemLight/Dark mode
Filter Processing
Clipping DetectionEnabledSafety warnings for filter output levels
Auto Causal AlignmentEnabledOptimize IR positioning with causal filters
Show Manual FIR Delay CompensationDisabled⚙️ Advanced: Show manual FIR delay fields
Default Values
Sample Rate48 kHzDefault for new projects
Speaker FIR Taps512Per-driver FIR filter length
Global FIR Taps512Global correction filter length
Curve Smoothing1/12 octaveFrequency response smoothing
Graph Display ModeDrivers/MeasurementsInitial display mode
Phase DisplayWrappedPhase graph mode
Remove time of flight rotationsDisabledLinear phase removal
Graphs
Plot Resolution64k pointsFrequency point count
GD/Phase TruncationEnabledTruncate by magnitude threshold
Truncation Thresholds-20 dBThreshold below max
Drivers Range60 dBY-axis range for drivers
Filters Lower Bound-100 dBY-axis lower limit for filters
Adaptive IR DisplayEnabledAuto-detect IR boundaries
Margin Before5 msPre-signal margin
Margin After10 msPost-signal margin
Focus on Summed ResponseDisabledUse 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):

  1. 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
  2. Disable clipping detection: Settings → General → Filter Processing

    • Eliminates test signal processing on every update
    • Only disable if you’re confident in your gain staging
  3. 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)