Module: ISO_1996::Withdrawn::Part_3_1987
- Includes:
- Constants
- Defined in:
- lib/iso_1996/withdrawn/part_3_1987.rb
Overview
ISO 1996-3:1987 Application to Noise Limits
Module implementing calculations defined in ISO 1996-3:1987: “Acoustics - Description, measurement and assessment of environmental noise - Part 3: Application to noise limits”
- Author
-
Maciej Ciemborowicz
- Date
-
July 11, 2025
Defined Under Namespace
Modules: Constants
Constant Summary
Constants included from Constants
Constants::IMPULSE_CORRECTION_THRESHOLD, Constants::STANDARD_24H_PERIOD
Class Method Summary collapse
-
.assessment_level(l_aeq_t, k_t, k_i) ⇒ Float
Calculate assessment level (L_r) as defined in Section 8.
-
.compliance_evaluation(l_r, noise_limit, measurement_uncertainty) ⇒ Boolean
Evaluate compliance with noise limits as defined in Section 9.
-
.impulsive_adjustment_factor(l_cpeak, is_highly_annoying: false) ⇒ Float
Determine impulsive adjustment factor (K_I) as defined in Section 7.2.
-
.time_period_conversion(period_levels, total_period: Constants::STANDARD_24H_PERIOD) ⇒ Float
Convert sound levels between time periods as defined in Annex A.
-
.tonal_adjustment_factor(delta_l) ⇒ Float
Determine tonal adjustment factor (K_T) as defined in Section 6 and Table 1.
Class Method Details
.assessment_level(l_aeq_t, k_t, k_i) ⇒ Float
Calculate assessment level (L_r) as defined in Section 8
L_r = L_AeqT + K_T + K_I dB
78 79 80 |
# File 'lib/iso_1996/withdrawn/part_3_1987.rb', line 78 def self.assessment_level(l_aeq_t, k_t, k_i) l_aeq_t + k_t + k_i end |
.compliance_evaluation(l_r, noise_limit, measurement_uncertainty) ⇒ Boolean
Evaluate compliance with noise limits as defined in Section 9
90 91 92 |
# File 'lib/iso_1996/withdrawn/part_3_1987.rb', line 90 def self.compliance_evaluation(l_r, noise_limit, measurement_uncertainty) l_r > noise_limit + measurement_uncertainty end |
.impulsive_adjustment_factor(l_cpeak, is_highly_annoying: false) ⇒ Float
Determine impulsive adjustment factor (K_I) as defined in Section 7.2
According to version:
K_I = 6 dB if L_Cpeak
64 65 66 |
# File 'lib/iso_1996/withdrawn/part_3_1987.rb', line 64 def self.impulsive_adjustment_factor(l_cpeak, is_highly_annoying: false) (l_cpeak >= Constants::IMPULSE_CORRECTION_THRESHOLD || ) ? 6.0 : 0.0 end |
.time_period_conversion(period_levels, total_period: Constants::STANDARD_24H_PERIOD) ⇒ Float
Convert sound levels between time periods as defined in Annex A
L_total = 10 * log10( [Σ(t_i * 10^(0.1*L_i)] / T_total ) dB
Example:
periods = [
{level: 65.0, duration: 16}, # Day
{level: 55.0, duration: 8} # Night
]
NoiseLimits.time_period_conversion(periods) # => ~62.1 dB
110 111 112 113 |
# File 'lib/iso_1996/withdrawn/part_3_1987.rb', line 110 def self.time_period_conversion(period_levels, total_period: Constants::STANDARD_24H_PERIOD) energy_sum = period_levels.sum { |period| period[:duration] * (10 ** (period[:level] / 10.0)) } 10 * Math.log10(energy_sum / total_period) end |
.tonal_adjustment_factor(delta_l) ⇒ Float
Determine tonal adjustment factor (K_T) as defined in Section 6 and Table 1
According to Table 1:
44 45 46 47 48 49 50 51 |
# File 'lib/iso_1996/withdrawn/part_3_1987.rb', line 44 def self.tonal_adjustment_factor(delta_l) case delta_l when 15..Float::INFINITY then 6.0 when 10..14 then 5.0 when 5..9 then 2.0 else 0.0 end end |