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)
 | 
						|
 | 
						|
 | 
						|
 |