Source code for acoustics.power

"""
Power
=====

"""
import numpy as np


[docs]def lw_iso3746(LpAi, LpAiB, S, alpha, surfaces): """ Calculate sound power level according to ISO 3746:2010. :param LpAi: Sound pressure levels of the source :math:`L_{pAi}`. :type LpAi: :class:`np.ndarray` :param LpAiB: Background noise sound pressure levels :math:`L_{pAiB}`. :type LpAiB: :class:`np.ndarray` :param S: Area in square meters of the measurement surface :math:`S`. :type S: :class:`float` :param alpha: Absorption coefficients of the room :math:`\\alpha`. :type alpha: :class:`np.ndarray` :param surfaces: Room surfaces. :type surfaces: :class:`np.ndarray` :returns: Sound power level :math:`L_{w}`. """ LpA = 10.0 * np.log10(np.sum(10.0**(0.1 * LpAi)) / LpAi.size) LpAB = 10.0 * np.log10(np.sum(10.0**(0.1 * LpAiB)) / LpAiB.size) deltaLpA = LpA - LpAB if deltaLpA > 10.0: k_1a = 0.0 elif 3.0 <= deltaLpA <= 10.0: k_1a = -10.0 * np.log10(1.0 - 10.0**(-0.1 * deltaLpA)) else: # This should alert to user because poor condition of the measurement. k_1a = 3.0 S0 = 1.0 Sv = np.sum(surfaces) alpha_mean = np.average(alpha, axis=0, weights=surfaces) A = alpha_mean * Sv k_2a = 10.0 * np.log10(1.0 + 4.0 * S / A) LpA_mean = LpA - k_1a - k_2a L_WA = LpA_mean + 10.0 * np.log10(S / S0) return L_WA