sfs.td

Submodules for broadband sound fields.

source Compute the sound field generated by a sound source.
wfs Compute WFS driving functions.
nfchoa Compute NFC-HOA driving functions.

Functions

apply_delays(signal, delays) Apply delays for every channel.
secondary_source_point(c) Create a point source for use in sfs.td.synthesize().
synthesize(signals, weights, ssd, …) Compute sound field for an array of secondary sources.
sfs.td.synthesize(signals, weights, ssd, secondary_source_function, **kwargs)[source]

Compute sound field for an array of secondary sources.

Parameters:
  • signals ((N, C) array_like + float) – Driving signals consisting of audio data (C channels) and a sampling rate (in Hertz). A DelayedSignal object can also be used.

  • weights ((C,) array_like) – Additional weights applied during integration, e.g. source selection and tapering.

  • ssd (sequence of between 1 and 3 array_like objects) – Positions (shape (C, 3)), normal vectors (shape (C, 3)) and weights (shape (C,)) of secondary sources. A SecondarySourceDistribution can also be used.

  • secondary_source_function (callable) – A function that generates the sound field of a secondary source. This signature is expected:

    secondary_source_function(
        position, normal_vector, weight, driving_signal,
        **kwargs) -> numpy.ndarray
    
  • **kwargs – All keyword arguments are forwarded to secondary_source_function. This is typically used to pass the observation_time and grid arguments.

Returns:

numpy.ndarray – Sound pressure at grid positions.

sfs.td.apply_delays(signal, delays)[source]

Apply delays for every channel.

Parameters:
  • signal ((N,) array_like + float) – Excitation signal consisting of (mono) audio data and a sampling rate (in Hertz). A DelayedSignal object can also be used.
  • delays ((C,) array_like) – Delay in seconds for each channel (C), negative values allowed.
Returns:

DelayedSignal – A tuple containing the delayed signals (in a numpy.ndarray with shape (N, C)), followed by the sampling rate (in Hertz) and a (possibly negative) time offset (in seconds).

sfs.td.secondary_source_point(c)[source]

Create a point source for use in sfs.td.synthesize().