# Atmospheric Sound Absorption according to ANSI S1.26-1995 # K.-H. Frommolt 2021-12-01 # FrO - vibrational relaxation frequency for oxygen # FrN - vibrational relaxation frequency for oxygen # Pr - reference atmospheric pressure = 101.325 kPa # Tr - reference air temperature = 293.15 K (20?C) # pt - pressure amplitute [Pa] # pi - initial pressure amplitude [Pa] # s - distance [m] # a - pure-tone sound attenuation coefficient for atmospheric absorption [dB/m] # f - frequency of sound [Hz] # Ta - (T) ambient atmospheric temperature [K] # h - molar concentration of water vapor [%] # Pa - ambient atmospheric pressure [kPa] # RH - relative humidity [%] # Psat- saturation vapor pressure # To1 - triple-point isotherm temp: 273.16 K = 273.15 + 0.01 K (0.01?C) # Input Data Pa<-101.325 # actual atmospheric pressure [kPa] Temp_C<- 10 # actual temperature [?C] RH=80 # relative humidity (%) f=5080 # frequency of signal [Hz] for control only Dist_Source=25.86 # Distance between microphone and sound source animal [m] Dist_Target=1 # Target distance for which SPL should be corrected Outputfile<-"C:\\Daten\\Filter_Temp7_RH80_Distance25_1000.csv" # Constants Pr<-101.325 # reference atmospheric pressure [kPa] Tr<-293.15 # reference air temperature = 293.15 K (20?C) To1<-273.16 # triple-point isotherm temp: 273.16 K = 273.15 + 0.01 K (0.01?C) Freq<-c(0,50,63,80,100,125,160,200,250,315,400,500,630,800,1000,1250,1600,2000,2500,3150,4000,5000,6300,8000,10000,12000,24000) Abs_Coeff<-c(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) # Calculated variables Ta<- Temp_C+273.15 # actual temperature [K] # Calculation of h according to Improved Magnus formula according to Alduchov & Eskridge (1996) Psat_Magnus<-6.1094*exp((17.625*Temp_C)/(Temp_C+243.04)) # [hPa] Psat=Psat_Magnus/10 h=RH*Psat/Pa # Calculation of relaxation frequencies FrO and FrN P_rel<-Pa/Pr T_rel<-Ta/Tr FrO<-P_rel*(24+40400*h*(0.02+h)/(0.391+h)) FrN<-P_rel*T_rel^(-.5)*(9+280*h*exp(-4.170*(T_rel^(-1/3)-1))) # calculation of a [db/m] FrO_Term<-FrO/(FrO^2+f^2) FrN_Term<-FrN/(FrN^2+f^2) Part_A<-1.84*10^-11*P_rel^-1*T_rel^.5 Part_B<- 0.01275*((exp(-2239.1/Ta))*FrO_Term) Part_C<-0.1068*((exp(-3352/Ta))*FrN_Term) a<-8.686*f^2*(Part_A+T_rel^-2.5*(Part_B+Part_C)) idx <-(2:25) for (i in idx) { FrO_Term<-FrO/(FrO^2+Freq[i]^2) FrN_Term<-FrN/(FrN^2+Freq[i]^2) Part_A<-1.84*10^-11*P_rel^-1*T_rel^.5 Part_B<- 0.01275*((exp(-2239.1/Ta))*FrO_Term) Part_C<-0.1068*((exp(-3352/Ta))*FrN_Term) Abs_Coeff[i]<-8.686*(Freq[i])^2*(Part_A+T_rel^-2.5*(Part_B+Part_C)) } Absorption<-cbind(Freq,Abs_Coeff) Atten_dB<-Abs_Coeff*(Dist_Target-Dist_Source) Ampl_dB<-Abs_Coeff*(Dist_Source-Dist_Target) Ampl_Factor<-10^(Ampl_dB/20) Ampl_Factor[1]<-0 Ampl_Factor[26]<-0 Ampl_Factor[27]<-0 Attenuation<-cbind(Freq,Ampl_Factor,Atten_dB) write.csv2(Attenuation,Outputfile)