Module: ISO_1996::Withdrawn::Part_1_2003

Includes:
Constants
Defined in:
lib/iso_1996/withdrawn/part_1_2003.rb

Overview

ISO 1996-1:2003 Basic Quantities and Assessment Procedures

Module implementing calculations defined in ISO 1996-1:2003: “Acoustics - Description, measurement and assessment of environmental noise - Part 1: Basic quantities and assessment procedures”

Author:

  • Maciej Ciemborowicz

Since:

  • 2025-07-11

Defined Under Namespace

Modules: Constants

Class Method Summary collapse

Class Method Details

.a_weighted_sound_pressure_level(p_a, measurement_time: 1.0) ⇒ Float

Calculate A-weighted sound pressure level (L_A) as defined in Section 3.2

Parameters:

  • p_a (Float)

    A-weighted sound pressure (Pa)

  • measurement_time (Float) (defaults to: 1.0)

    Measurement time interval (seconds)

Returns:

  • (Float)

    A-weighted sound pressure level in dB

Since:

  • 2025-07-11



63
64
65
# File 'lib/iso_1996/withdrawn/part_1_2003.rb', line 63

def self.a_weighted_sound_pressure_level(p_a, measurement_time: 1.0)
  10 * Math.log10((1.0 / measurement_time) * (p_a ** 2) / (Constants::REFERENCE_SOUND_PRESSURE ** 2))
end

.equivalent_continuous_sound_level(levels, measurement_time) ⇒ Float

Calculate equivalent continuous sound level (L_Aeq,T) as defined in Section 3.7

Examples:

levels = [65.0, 67.0, 63.0]
Part_1_2003.equivalent_continuous_sound_level(levels, 3.0) # => ~65.1

Parameters:

  • levels (Array<Float>)

    Array of sound pressure levels (dB)

  • measurement_time (Float)

    Total measurement time (seconds)

Returns:

  • (Float)

    Equivalent continuous sound level in dB

Raises:

  • (ArgumentError)

    if measurement_time is not positive

Since:

  • 2025-07-11



93
94
95
96
97
98
99
100
# File 'lib/iso_1996/withdrawn/part_1_2003.rb', line 93

def self.equivalent_continuous_sound_level(levels, measurement_time)
  raise ArgumentError, "Measurement time must be positive" if measurement_time <= 0
  
  return -Float::INFINITY if levels.empty?

  energy_sum = levels.sum { |l| 10 ** (l / 10.0) }
  10 * Math.log10(energy_sum / measurement_time)
end

.peak_sound_pressure_level(p_c_max) ⇒ Float

Calculate C-weighted peak sound pressure level (L_Cpeak) as defined in Section 3.10

Parameters:

  • p_c_max (Float)

    Maximum C-weighted sound pressure (Pa)

Returns:

  • (Float)

    C-weighted peak sound pressure level in dB

Since:

  • 2025-07-11



110
111
112
# File 'lib/iso_1996/withdrawn/part_1_2003.rb', line 110

def self.peak_sound_pressure_level(p_c_max)
  20 * Math.log10(p_c_max / Constants::REFERENCE_SOUND_PRESSURE)
end

.sound_exposure_level(p_a) ⇒ Float

Calculate sound exposure level (L_AE) as defined in Section 3.9

Parameters:

  • p_a (Float)

    A-weighted sound pressure (Pa)

Returns:

  • (Float)

    Sound exposure level in dB

Since:

  • 2025-07-11



75
76
77
# File 'lib/iso_1996/withdrawn/part_1_2003.rb', line 75

def self.sound_exposure_level(p_a)
  10 * Math.log10((1.0 / Constants::REFERENCE_TIME) * (p_a ** 2) / (Constants::REFERENCE_SOUND_PRESSURE ** 2))
end

.sound_pressure_level(p) ⇒ Float

Calculate sound pressure level (L_p) as defined in Section 3.2

Examples:

Part_1_2003.sound_pressure_level(0.1) # => 74.0

Parameters:

  • p (Float)

    Root-mean-square sound pressure (Pa)

Returns:

  • (Float)

    Sound pressure level in dB

Since:

  • 2025-07-11



50
51
52
# File 'lib/iso_1996/withdrawn/part_1_2003.rb', line 50

def self.sound_pressure_level(p)
  10 * Math.log10((p ** 2) / (Constants::REFERENCE_SOUND_PRESSURE ** 2))
end