ita_sound_power.m 2.82 KB
Newer Older
1
2
3
4
function varargout = ita_sound_power(varargin)
%ITA_SOUND_POWER - calculate the sound power of a source in a specific room
%  This function takes spl-data and RT of the empty room to calculate the
%  equivalent absorption area of the tested room. This is used to calculate
5
%  the sound power of the source according to ISO 3741.
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
%
%  Syntax:
%   audioObjOut = ita_sound_power(audioObjIn, T_empty, options)
%
%   Options (default):
%           'room_volume' (124) :  default value fits ITA reverberation
%                                  chamber
%           'room_surface' (181):  default value fits ITA reverberation
%                                  chamber 
%           'T' (20)            :  Temperature in deg Celsius
%           'RH' (0.5)          :  Relative Humidity
%
%  Example:
%   audioObjOut = ita_sound_power(audioObjIn)
%
%  See also:
%   ita_sabine
%
%   Reference page in Help browser 
%        <a href="matlab:doc ita_sound_power">doc ita_sound_power</a>

% <ITA-Toolbox>
% This file is part of the ITA-Toolbox. Some rights reserved. 
% You can find the license for this m-file in the license.txt file in the ITA-Toolbox folder. 
% </ITA-Toolbox>

% Author: Christian Haar -- Email: christian.haar@akustik.rwth-aachen.de
% Created:  24-Jun-2010 

%% Initialization and Input Parsing
sArgs        = struct('pos1_spl', 'itaSuper', 'pos2_T_empty', 'itaSuper', 'room_volume', 124,'room_surface',181,'T',20,'RH',0.5, 'freqRange', ita_preferences('freqRange'), 'bandsPerOctave', ita_preferences('bandsPerOctave') );
[spl,T_empty,sArgs] = ita_parse_arguments(sArgs,varargin); 

39
40
41
42
43
44
% acoustic constants
c = 20.05*sqrt(273 + sArgs.T);
% correction factors for the meteorological conditions (not in dB!)
% (assumes static pressure is the reference value)
C1 = sqrt((273.15 + sArgs.T)/314);
C2 = sqrt((273.15 + sArgs.T)/296).^3;
45

46
%% calculate sound pressure level data
Markus Mueller-Trapet's avatar
Markus Mueller-Trapet committed
47
48
49
% first third-octaves then average
spl = ita_spk2frequencybands(spl, 'freqRange',sArgs.freqRange , 'bandsPerOctave',sArgs.bandsPerOctave);
spl_m = sqrt(mean(spl^2));
50
51
52
53
54
55
spl_m = itaResult(spl_m,T_empty.freqVector);

%% calculate equivalent absorption area
A = 55.26*itaValue(double(sArgs.room_volume)/c,'s*m^2')/T_empty;

%% calculate sound power (Eq 20 in ISO 3741)
Markus Mueller-Trapet's avatar
Markus Mueller-Trapet committed
56
sound_power = spl_m^2 * A * 10^(-6/10) * C1 * C2;
57
58
59
60
61
62
63
% exponent and frequency-dependent part
sound_power.freq = sound_power.freq.*exp(A.freq./double(sArgs.room_surface)).*(1 + double(sArgs.room_surface)*c./(8*double(sArgs.room_volume).*sound_power.freqVector));
% getting the reference values right
sound_power = sound_power*itaValue(1e-12,'W')/itaValue(20e-6,'Pa')^2/itaValue(1,'m^2');

% or the straight-forward way: 
% sound_power = spl_m^2 * A/(2*itaValue(c,'m/s')*itaValue(1.2,'kg/m^3'));
64
65
66
67
68
69
70
71
72

%% Add history line
sound_power = ita_metainfo_add_historyline(sound_power,mfilename,varargin);

%% Set Output
varargout(1) = {sound_power}; 

%end function
end