You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.2 KiB
74 lines
2.2 KiB
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
from bessel import ric_besselh,ric_besselh_derivative
|
|
import pandas as pd
|
|
|
|
# This file computes the monostatic RCS of a PEC sphere
|
|
# It uses the MIE series to provide an analytical solution for the monostatic RCS
|
|
# RCS = (j / (kr)) sum_n=1toinf [ -1**n (2n+1) (kr * j(n-1) - n * jn) / (kr * H(1)(n-1) - n * H(1)n) - jn/H(1)n ]
|
|
#
|
|
# H(2)(n) = jn - 1.0j yn)
|
|
# jn --> Spherical-Bessel Function of the 1st kind of order n
|
|
# yn --> Spherical-Bessel Function of the 2nd kind of order n
|
|
# H(1)(n) = jn + 1.0j yn)
|
|
# jn --> Spherical-Bessel Function of the 1st kind of order n
|
|
# yn --> Spherical-Bessel Function of the 2nd kind of order n
|
|
|
|
frequency = np.linspace(0.05e9,5e9,1000)
|
|
wavelength = 3e8 / frequency
|
|
|
|
|
|
# Radius of circle in meters
|
|
Radius = 0.1
|
|
OrderN = 100
|
|
|
|
AreaOfCircle = np.pi * Radius**2
|
|
|
|
RCS = np.zeros(len(wavelength),dtype=complex)
|
|
RCS_NORM = np.zeros(len(wavelength))
|
|
|
|
for index,w in enumerate(wavelength):
|
|
|
|
k = 2*np.pi/w
|
|
kr = k * Radius
|
|
sum_ = 0.0 + 0.0j
|
|
|
|
kr_vec = kr * np.ones(1)
|
|
Order = np.transpose(np.linspace(0,OrderN,OrderN+1))
|
|
H = ric_besselh(Order,kr_vec,2)
|
|
Hp = ric_besselh_derivative(Order,kr_vec,2)
|
|
|
|
for n_ in range(OrderN):
|
|
|
|
n = n_ + 1
|
|
|
|
# Sum up the series
|
|
sum_ = (-1.0)**n * (2.0*n+1.0) / ( H[n] * Hp[n] )
|
|
RCS[index] = RCS[index] + sum_
|
|
|
|
RCS[index] = abs(RCS[index])**2 * w**2 / (4 * np.pi)
|
|
RCS_NORM[index] = RCS[index] / AreaOfCircle
|
|
|
|
Normalized_circumference = 2*np.pi * Radius / wavelength
|
|
|
|
plt.figure()
|
|
plt.plot(Normalized_circumference,RCS_NORM)
|
|
plt.grid()
|
|
plt.xticks(np.linspace(0,10,11))
|
|
plt.xlabel("Circumference of Circle")
|
|
plt.ylabel("Normalized RCS by Area of Circle")
|
|
plt.show()
|
|
|
|
plt.figure()
|
|
plt.plot(frequency/1e9,10*np.log10(RCS))
|
|
plt.grid()
|
|
plt.xticks(np.linspace(0,10,21))
|
|
plt.xlim([min(frequency/1e9),max(frequency/1e9)])
|
|
plt.xlabel("Frequency (GHz)")
|
|
plt.ylabel("RCS (dBsm)")
|
|
plt.show()
|
|
|
|
output_df = pd.DataFrame({'Frequency':frequency/1e9, 'coRCS':np.real(10*np.log10(RCS))})
|
|
output_df.to_csv("RCS_ANALYTIC.xlsx", index=False)
|
|
|
|
|
|
|