RCS Computation Toolkit This repository provides C++ and Python tools for computing radar cross section (RCS) from surface currents or analytical models
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

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)