Labor 03: Lautsprecher-Messungen

1. Überblick

Dieses Labor behandelte die umfassende Charakterisierung von Lautsprechersystemen durch präzise akustische Messungen. Schwerpunkte waren Nah-/Fernfeld-Messtechniken, Frequenzweichen-Design und aktive Entzerrung zur Optimierung des Gesamtfrequenzgangs.

2. Versuchsaufbau

2.1. Messkette

  • Audio-Interface: RME Babyface Pro (44.1 kHz)
  • Anregung: Exponential-Sweep (10 Hz - 22 kHz)
  • Mikrofonierung: Kondensatormikrofon für Impulsantwort-Messung
  • Lautsprecher: 2-Wege-System (Tieftöner + Hochtöner)

2.2. Messgeometrie

  • Fernfeld: 3.5 m Abstand für charakteristische Abstrahlung
  • Nahfeld: Direkt an Membran/Port für unverzerrte Tieftonmessung
  • Winkel: On-axis-Messungen (0° zur Hauptabstrahlrichtung)

3. Experiment 1: Systemidentifikation durch Sweep-Messung

3.1. Anregungssignal

x = pf.signals.exponential_sweep_time(
    n_samples=2**18,
    frequency_range=[10, 22050],
    sampling_rate=44100
)
x_padded = pf.dsp.pad_zeros(x, pad_width=1 * x.sampling_rate)

Vorteile des Exponential-Sweeps:

  • Gleichmäßige Energieverteilung über Frequenzbereich
  • Gute Signal-Rausch-Verhältnis
  • Nichtlineare Verzerrungen zeitlich separiert

3.2. Dekonvolution und Impulsantwort-Extraktion

# Aufnahme mit Referenzsignal
recording = sd.playrec(x_padded.time.T, channels=2)
y = pf.Signal(recording[:,0].T, x_padded.sampling_rate)
x_reference = pf.Signal(recording[:,1].T, x_padded.sampling_rate)

# Regularisierte Dekonvolution
x_inverted = pf.dsp.regularized_spectrum_inversion(x_reference, (20, 21000))
h = y * x_inverted  # Impulsantwort des Systems

Regularisierung: Verhindert numerische Instabilitäten bei schwacher Anregung in bestimmten Frequenzbereichen.

4. Experiment 2: Nahfeld-Messungen und Pegelkorrektur

4.1. Konzept der Nahfeld-Messung

Problem: Fernfeld-Messungen sind bei tiefen Frequenzen durch Raumakustik gestört. Lösung: Nahfeld-Messungen eliminieren Raumeinflüsse, benötigen aber Flächenkorrektur.

4.2. Pegelkorrektur nach Keele-Methode

def add_nearfield(ir_m, ir_t, S_m, S_t):
    # Flächenverhältnis-Korrektur
    ratio = np.sqrt(S_t / S_m)
    ir_t_corrected = pf.multiply((ir_t, ratio), domain='freq')
    result = pf.add((ir_m, ir_t_corrected), domain='freq')
    return result, ir_t_corrected

Messungen:

  • Membran: S_membran = π * (0.261/2)² (Tieftöner-Membranfläche)
  • Port: S_tunnel = 0.233 * 0.035 * 4 (Bassreflex-Öffnungen)

Physikalische Grundlage: Schallleistung proportional zu Membranfläche, Schalldruck zur Wurzel der Fläche.

5. Experiment 3: Fernfeld-Messung und Fensterung

5.1. Fensterung zur Reflexions-Eliminierung

def windowed_ir(ir, w_time):
    start_samples = int(pf.dsp.find_impulse_response_start(ir, threshold=10))
    w_size = int(round(w_time * ir.sampling_rate))
    
    # Symmetrisches Hann-Fenster um Impulsantwort-Start
    start = start_samples - w_size // 2
    stop = start_samples + w_size // 2
    ir_windowed = pf.dsp.time_window(ir, [start, stop], 
                                     window='hann', shape='symmetric')
    return ir_windowed

Zweck: Entfernung von Raumreflexionen, die das charakteristische Abstrahlungsverhalten überlagern.

Fensterlänge: 23 ms - Kompromiss zwischen Zeitauflösung und Frequenzauflösung.

6. Experiment 4: Nah-/Fernfeld-Kombination

6.1. Hybride Frequenzgang-Konstruktion

def combine_near_and_farfield(ir_near, ir_far, f_cut):
    frequencies = ir_far.frequencies
    f_index = np.argmin(np.abs(frequencies - f_cut))
    
    # Amplitude und Phase separieren
    abs_far = np.abs(ir_far.freq)
    phase_far = np.angle(ir_far.freq)
    abs_near = np.abs(ir_near.freq)
    
    # Nahfeld-Skalierung auf Fernfeld bei Übergangsfrequenz
    scale_factor = abs_far[..., f_index] / abs_near[..., f_index]
    adjusted_abs_near = abs_near * scale_factor
    
    # Nahtlose Kombination
    combined_abs = abs_far.copy()
    combined_abs[..., :f_index] = adjusted_abs_near[..., :f_index]
    
    # Rekonstruktion mit Fernfeld-Phase
    combined_complex = combined_abs * np.exp(1j * phase_far)
    return pf.Signal(combined_complex, ir_far.sampling_rate, domain='freq')

Übergangsfrequenz: 400 Hz - oberhalb Raumakustik-Einfluss, unterhalb Chassis-Interferenzen.

7. Experiment 5: Aktive Frequenzweiche und Entzerrung

7.1. Zeitausrichtung der Chassis

def shift_ir(ir_TT, ir_HT):
    start_TT = pf.dsp.find_impulse_response_start(ir_TT, threshold=0)
    start_HT = pf.dsp.find_impulse_response_start(ir_HT, threshold=0)
    
    # Synchronisation der Impulsantwort-Starts
    if start_HT < start_TT:
        shift_samples = start_TT - start_HT
        ir_HT = pf.dsp.time_shift(ir_HT, shift_samples, mode='linear')
    elif start_TT < start_HT:
        shift_samples = start_HT - start_TT
        ir_TT = pf.dsp.time_shift(ir_TT, shift_samples, mode='linear')
    
    return ir_TT, ir_HT

7.2. Linkwitz-Riley Frequenzweiche

def crossover_LR_Filter(ir_TT, ir_HT, N, f_cross):
    # Komplementäre Filter 8. Ordnung
    TT_low = pf.dsp.filter.crossover(ir_TT, N, f_cross)
    HT_high = pf.dsp.filter.crossover(ir_HT, N, f_cross)
    
    # Summenbildung
    sum_signal = TT_low[0] + HT_high[1]
    
    # Multi-Channel-Signal: [Tieftöner, Hochtöner, Summe]
    time_data = np.stack((TT_low[0].time[0], HT_high[1].time[0], 
                         sum_signal.time[0]), axis=0)
    
    return pf.Signal(time_data[:, np.newaxis, :], TT_low.sampling_rate)

Filter-Parameter:

  • Ordnung: N = 8 (48 dB/Oktave Flankensteilheit)
  • Übergangsfrequenz: f_cross = 1800 Hz
  • Typ: Linkwitz-Riley für kohärente Summierung

7.3. Parametrische Entzerrung

# Beispiel Entzerrungsfilter
filtered_HT = pf.dsp.filter.bell(filtered_HT, 4000, -10, 0.5)  # Resonanzreduktion
filtered_TT = pf.dsp.filter.bell(filtered_TT, 280, 3, 4)      # Bassanhebung
filtered_HT = pf.dsp.filter.high_shelf(filtered_HT, 5500, 1, 1)  # Luftigkeitsanhebung

Filter-Typen:

  • Bell: Parametrische Glockenfilter für spezifische Resonanzen
  • Shelf: Breitbandige Anhebung/Absenkung
  • Allpass: Phasenkorrektur ohne Amplitudenänderung

8. Wichtige Konzepte

8.1. Messtechnik

  • Nah-/Fernfeld-Komplementarität: Kombination für vollständigen Frequenzbereich
  • Fenster-Techniken: Zeitliche Begrenzung für Reflexions-Eliminierung
  • Regularisierte Dekonvolution: Numerisch stabile Systemidentifikation

8.2. Lautsprecherakustik

  • Bassreflex-Prinzip: Port-Abstimmung für erweiterten Tiefgang
  • Chassis-Interferenz: Konstruktive/destruktive Überlagerung
  • Zeitverhalten: Phasenlinearität für natürliche Wiedergabe

8.3. Signalverarbeitung

  • IIR-Filterdesign: Effiziente Echtzeitentzerrung
  • Crossover-Topologien: Optimal summierend für kohärente Abstrahlung
  • Frequenzbereichs-Manipulation: Komplexe Spektren für Amplitude/Phase-Kontrolle

9. Praktische Erkenntnisse

9.1. Messumgebung

  • Raum-Einfluss: Kritisch für Fernfeld-Messungen
  • Mikrofonpositionierung: Reproduzierbarkeit der Ergebnisse
  • Hardware-Kalibrierung: Absolute Pegel-Referenzierung

9.2. Design-Optimierung

  • Zeitausrichtung: Kohärente Summierung im Übergangsbereich
  • Entzerrungs-Strategegie: Parametrisch vs. FIR-basiert
  • Psychoakustische Optimierung: Technische Messungen vs. subjektive Bewertung

9.3. Software-Tools

  • PyFar-Ecosystem: Umfassende Toolbox für Lautsprecher-Development
  • Real-time-Processing: Echtzeitfähige Filter-Implementierung
  • Automatisierung: Batch-Processing für systematische Optimierung

Dieses Labor vermittelte fortgeschrittene Kenntnisse der elektroakustischen Messung und deren Anwendung im Lautsprechersystemdesign.

Command Palette

Search for a command to run...