Coherence and Correlation
audiotoolbox includes functions for complex-valued correlation analysis, useful for binaural and narrowband signal analysis.
Complex Correlation Coefficient
Use cmplx_corr to compute the complex correlation coefficient between two
signals. The magnitude describes similarity, and the phase reflects relative
phase differences.
import audiotoolbox as audio
import numpy as np
sig = audio.Signal(n_channels=2, duration=1, fs=48000)
sig.ch[0].add_tone(500)
sig.ch[1].add_tone(500, start_phase=np.pi / 4)
corr = audio.cmplx_corr(sig.ch[0], sig.ch[1])
print(corr)
Complex Cross-Correlation Over Time
For time-varying analysis, use cmplx_crosscorr with a sliding window.
This is useful when phase or level relations change over time.
import audiotoolbox as audio
sig = audio.Signal(n_channels=2, duration=2, fs=48000).add_noise('white')
# Example: 20 ms analysis window
cc = audio.cmplx_crosscorr(sig.ch[0], sig.ch[1], win_len=20e-3)
print(cc.shape)
Binaural Difference Extraction
For narrowband signals, extract_binaural_differences provides
instantaneous phase difference (IPD) and envelope difference between channels
based on the analytic signal representation.
import audiotoolbox as audio
sig = audio.Signal(n_channels=2, duration=1, fs=48000)
sig.ch[0].add_tone(1000)
sig.ch[1].add_tone(1000, start_phase=0.3)
ipd, ild = audio.extract_binaural_differences(sig)
Notes
These methods are most meaningful for narrowband or band-limited signals.
For broadband stimuli, analyze in subbands (for example with a filterbank) before interpreting phase/coherence metrics.