import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import find_peaks
np.set_printoptions(precision=5)
import scienceplots
#Warning : As of version 2.0.0, you need to add import scienceplots before setting the style (plt.style.use('science')).
plt.style.use(['science', 'notebook'])
#plt.rcParams['font.family'] = 'Times New Roman' # font familyの設定
plt.rcParams['font.family'] = 'serif' # font familyの設定
plt.rcParams['mathtext.fontset'] = 'cm' # math fontの設定
計算条件
波源分布の長さ,ウッドワード・ローソン法における合成するビームの数を設定して,
dd = 10.0# Diameter normalized by wave-length
nbeam = 6# ビームの数
if np.mod(nbeam,2) == 0:# 偶数
mm = nbeam//2
else:# 奇数
mm = (nbeam-1)//2
akover2 = np.pi*dd
th = np.linspace(-np.pi*0.5, np.pi*0.5, 360+1)
thdeg = th*180/np.pi
nth = len(th)
u = akover2 * np.sin(th)
uoverpi = u/np.pi
an = np.ones(mm)
a0 = 1.0
if np.mod(nbeam,2) == 0:# 偶数
f0 = np.zeros(nth)
else:# 奇数
f0 = a0*np.sinc(uoverpi)
開口面分布および放射パターン
ビームを合成して得られる放射パターン,そのときの波源分布を求めると,
xx = np.linspace(-1.0, 1.0, 100+1)# 波源位置座標
if np.mod(nbeam,2) == 0:# 偶数
af = 0.0
else:# 奇数
af = 1.0
fp = np.zeros([mm,nth])
fm = np.zeros([mm,nth])
f = f0
for i in range(mm):
if np.mod(nbeam,2) == 0:# 偶数
um = akover2*(2*(i+1)-1)/2/dd
else:# 奇数
um = akover2*(i+1)/dd
umpi = um/np.pi
ump = uoverpi+umpi
umm = uoverpi-umpi
fp[i,:] = an[i]*np.sinc(ump)
fm[i,:] = an[i]*np.sinc(umm)
f = f+fp[i,:]+fm[i,:]
af = af+ 2.0*np.cos(um*xx)
np.max(af)
afn = af/np.max(af)
p = 20.0*np.log10(np.abs(f))# 放射パターン[dB]
波源分布の計算値の一部を出力すると,
print(f"{'2x/a':>10s} {'e(x)':>10s}")
for i in range(0,len(xx),10):
print(f"{xx[i]:10.5f} {afn[i]:10.5f}")
print(f"{'th[deg]':>10s} {'u/pi':>10s} {'f':>10s} {'p[dB]':>10s}")
for i in range(0,len(uoverpi),20):
print(f"{thdeg[i]:10.5f} {uoverpi[i]:10.5f} {f[i]:10.5f} {p[i]:10.5f}")