import numpy as np """混响级计算""" def call_RLs_Ss(v,SL,freq,tau,theta,l,r): #海面混响 """ v:风速,m/s SL:声源级,dB freq:声纳频率,KHz tau: 发射脉冲宽度,ms theta:海底掠射角,du l: 阵列长度,m r: 斜向距离,m""" freq = freq*1000 beta=158*np.power((v*np.power(freq,1.0/3)),-0.58) Ss=3.3*beta*np.log10(theta/30)-42.4*np.log10(beta)+2.6#海面散射强度经验公式,Chapman,Harris.水声学原理,p237 C=1500 #声速 tau=tau/1000 #单位换算 lam=C/freq#波长 phi= np.power(10,np.log10(lam/2/l/np.pi)+0.92)#l>lambda水平线阵/边长>>lambda等效波束宽度,水声学原理p225 TL=20*np.log10(r) #传播损失经验公式 A = C*tau*phi*r/2 #海面散射面积 rls = SL-2*TL+Ss+10*np.log10(A) return rls def call_RLs_Sb(SL,freq,tau,theta,l,r): #海底混响 """ SL:声源级,dB freq:声纳频率,KHz tau: 发射脉冲宽度,ms theta:海底掠射角,du l: 阵列长度,m r: 斜向距离,m""" Sb=-28+10*np.log10(np.sin(theta)*np.sin(theta))#海底散射强度经验公式,Mackenzie.水声学原理,p243 C=1500 #声速 tau=tau/1000 #单位换算 lam=C/(freq*1000)#波长 phi= np.power(10,np.log10(lam/2/l/np.pi)+0.92)#l>lambda水平线阵/边长>>lambda等效波束宽度,水声学原理p225 TL=20*np.log10(r) #传播损失经验公式 A = C*tau*phi*r/2 #海底散射面积 rls = SL-2*TL+Sb+10*np.log10(A) return rls def call_RLs_Sv(SL,Sv,freq,tau,l,r): #海面混响 """ SL:声源级,dB SV:散射强度,用户输入 freq:声纳频率,KHz tau: 发射脉冲宽度,ms theta:海底掠射角,du l: 阵列长度,m r: 斜向距离,m""" freq = freq*1000 C=1500 #声速 tau=tau/1000 #单位换算 lam=C/freq#波长 phi= np.power(10,np.log10(lam/2/l/np.pi)+0.92)#l>lambda水平线阵/边长>>lambda等效波束宽度,水声学原理p225 TL=20*np.log10(r) #传播损失经验公式 A = C*tau*phi*r*r/2 #海面散射面积 rls = SL-2*TL+Sv+10*np.log10(A) return rls def call_rl(v,SL,Sv,freq,tau,theta,l,r): """ v:风速,m/s SL:声源级,dB SV:散射强度,用户输入 freq:声纳频率,KHz tau: 发射脉冲宽度,ms theta:海底掠射角,du l: 阵列长度,m r: 斜向距离,m""" rlss = call_RLs_Ss(v,SL,freq,tau,theta,l,r) rlsb = call_RLs_Sb(SL,freq,tau,theta,l,r) rlsv = call_RLs_Sv(SL,Sv,freq,tau,l,r) return [rlss, rlsb, rlsv]