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)