Source code for sfs.fd

"""Submodules for monochromatic sound fields.

.. autosummary::
    :toctree:

    source

    wfs
    nfchoa
    sdm
    esa

"""
from . import source
from .. import array as _array
from .. import util as _util
import numpy as _np


[docs]def shiftphase(p, phase): """Shift phase of a sound field.""" p = _np.asarray(p) return p * _np.exp(1j * phase)
[docs]def displacement(v, omega): r"""Particle displacement. .. math:: d(x, t) = \int_{-\infty}^t v(x, \tau) d\tau """ return _util.as_xyz_components(v) / (1j * omega)
[docs]def synthesize(d, weights, ssd, secondary_source_function, **kwargs): """Compute sound field for a generic driving function. Parameters ---------- d : array_like Driving function. weights : array_like Additional weights applied during integration, e.g. source selection and tapering. ssd : sequence of between 1 and 3 array_like objects Positions, normal vectors and weights 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_function_weight, **kwargs) -> numpy.ndarray **kwargs All keyword arguments are forwarded to *secondary_source_function*. This is typically used to pass the *grid* argument. """ ssd = _array.as_secondary_source_distribution(ssd) if not (len(ssd.x) == len(ssd.n) == len(ssd.a) == len(d) == len(weights)): raise ValueError("length mismatch") p = 0 for x, n, a, d, weight in zip(ssd.x, ssd.n, ssd.a, d, weights): if weight != 0: p += a * weight * d * secondary_source_function(x, n, **kwargs) return p
[docs]def secondary_source_point(omega, c): """Create a point source for use in `sfs.fd.synthesize()`.""" def secondary_source(position, _, grid): return source.point(omega, position, grid, c=c) return secondary_source
[docs]def secondary_source_line(omega, c): """Create a line source for use in `sfs.fd.synthesize()`.""" def secondary_source(position, _, grid): return source.line(omega, position, grid, c=c) return secondary_source
from . import esa from . import nfchoa from . import sdm from . import wfs