Source code for acoustics.decibel

"""
Decibel
=======

The `decibel` module contains basic functions for decibel arithmetic.

"""

import numpy as np


[docs]def dbsum(levels, axis=None): """Energetic summation of levels. :param levels: Sequence of levels. :param axis: Axis over which to perform the operation. .. math:: L_{sum} = 10 \\log_{10}{\\sum_{i=0}^n{10^{L/10}}} """ levels = np.asanyarray(levels) return 10.0 * np.log10((10.0**(levels / 10.0)).sum(axis=axis))
[docs]def dbmean(levels, axis=None): """Energetic average of levels. :param levels: Sequence of levels. :param axis: Axis over which to perform the operation. .. math:: L_{mean} = 10 \\log_{10}{\\frac{1}{n}\\sum_{i=0}^n{10^{L/10}}} """ levels = np.asanyarray(levels) return 10.0 * np.log10((10.0**(levels / 10.0)).mean(axis=axis))
[docs]def dbadd(a, b): """Energetic addition. :param a: Single level or sequence of levels. :param b: Single level or sequence of levels. .. math:: L_{a+b} = 10 \\log_{10}{10^{L_b/10}+10^{L_a/10}} Energetically adds b to a. """ a = np.asanyarray(a) b = np.asanyarray(b) return 10.0 * np.log10(10.0**(a / 10.0) + 10.0**(b / 10.0))
[docs]def dbsub(a, b): """Energetic subtraction. :param a: Single level or sequence of levels. :param b: Single level or sequence of levels. .. math:: L_{a-b} = 10 \\log_{10}{10^{L_a/10}-10^{L_b/10}} Energitally subtract b from a. """ a = np.asanyarray(a) b = np.asanyarray(b) return 10.0 * np.log10(10.0**(a / 10.0) - 10.0**(b / 10.0))
[docs]def dbmul(levels, f, axis=None): r"""Energetically add `levels` `f` times. :param levels: Sequence of levels. :param f: Multiplication factor `f`. :param axis: Axis over which to perform the operation. .. math:: L_{sum} = 10 \log_{10}{\sum_{i=0}^n{10^{L/10} \cdot f}} """ levels = np.asanyarray(levels) return 10.0 * np.log10((10.0**(levels / 10.0) * f).sum(axis=axis))
[docs]def dbdiv(levels, f, axis=None): """Energetically divide `levels` `f` times. :param levels: Sequence of levels. :param f: Divider `f`. :param axis: Axis over which to perform the operation. .. math:: L_{sum} = 10 \\log_{10}{\\sum_{i=0}^n{10^{L/10} / f}} """ levels = np.asanyarray(levels) return 10.0 * np.log10((10.0**(levels / 10.0) / f).sum(axis=axis))
__all__ = ['dbsum', 'dbmean', 'dbadd', 'dbsub', 'dbmul', 'dbdiv']