75 行
2.6 KiB
Python
可执行文件
75 行
2.6 KiB
Python
可执行文件
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]
|