Wed 28 Aug 21:38:52 CEST 2024
This commit is contained in:
		
							parent
							
								
									c6111de69b
								
							
						
					
					
						commit
						53536e33fe
					
				
							
								
								
									
										87
									
								
								src/SimNDT/core/signal.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										87
									
								
								src/SimNDT/core/signal.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,87 @@ | ||||||
|  | import numpy as	np | ||||||
|  | from  math import pi, cos, sin | ||||||
|  | import matplotlib.pyplot as plt | ||||||
|  | 
 | ||||||
|  | def RaisedCosinePulse(t, Freq, Amplitude): | ||||||
|  | 	""" | ||||||
|  | 	Raised-Cosine Pulse | ||||||
|  | 	 | ||||||
|  | 	"""  | ||||||
|  | 	N  = np.size(t,0) | ||||||
|  | 	P  = np.zeros((N,),dtype=np.float32) | ||||||
|  | 	for m in range(0,N): | ||||||
|  | 		if t[m] <= 2.0/Freq: | ||||||
|  | 			P[m] = Amplitude *(1-cos(pi*Freq*t[m]))*cos(2*pi*Freq*t[m]) | ||||||
|  | 
 | ||||||
|  | 	return P | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def PulseUTsin(t,fc,NT, Amp): | ||||||
|  | 	""" | ||||||
|  | 	Gaussian Pulse | ||||||
|  | 
 | ||||||
|  | 	Code inspired by | ||||||
|  | 	see http://www.k-wave.org/ | ||||||
|  | 	""" | ||||||
|  | 	def gaussian_func(x,mean,variance): | ||||||
|  | 		return np.exp(-((x - mean)**2)/(2*variance)) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	Ts			 = t[1]-t[0] | ||||||
|  | 	Fs			 = 1.0/Ts | ||||||
|  | 	tone_length	 = ( NT/(fc*1.0) ) | ||||||
|  | 	tone_t		 = np.arange(0,tone_length,Ts) | ||||||
|  | 	tone_burst_t = np.sin(2*pi*fc*tone_t) | ||||||
|  | 
 | ||||||
|  | 	x_lim = 3 | ||||||
|  | 	window_x = np.arange(-x_lim,x_lim, 2.0*x_lim/(np.size(tone_burst_t)-1) ) | ||||||
|  | 	window	 = gaussian_func(window_x,0, 1) | ||||||
|  | 
 | ||||||
|  | 	ind = np.min([ np.size(window_x), np.size(tone_burst_t)]) | ||||||
|  | 	tone_burst=np.zeros((ind,)) | ||||||
|  | 	tone_burst[0:ind] = window[0:ind]*tone_burst_t[0:ind]  | ||||||
|  | 
 | ||||||
|  | 	y	= np.zeros((np.size(t),)) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	#plt.figure() | ||||||
|  | 	#plt.plot(tone_burst) | ||||||
|  | 	#plt.show() | ||||||
|  | 	try: | ||||||
|  | 		y[0:np.size(tone_burst)] = Amp*tone_burst[:] | ||||||
|  | 		return y | ||||||
|  | 	except: | ||||||
|  | 		raise Exception("Signal does not fit in the Configured Time, Increase the Simulation Time to solve this issue") | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class Signals(): | ||||||
|  | 	 | ||||||
|  | 	def __init__(self, Name="RaisedCosine", Amplitud=1, Frequency=1, N_Cycles=1): | ||||||
|  | 		 | ||||||
|  | 		self.Name      = Name | ||||||
|  | 		self.Amplitude = Amplitud | ||||||
|  | 		self.Frequency = Frequency | ||||||
|  | 		self.N_Cycles  = N_Cycles | ||||||
|  | 	 | ||||||
|  | 	 | ||||||
|  | 	def __str__(self): | ||||||
|  | 		return "Signal: "  + unicode(self.Name) | ||||||
|  | 
 | ||||||
|  | 	def __repr__(self): | ||||||
|  | 		return "Signal: " + unicode(self.Name) | ||||||
|  | 		 | ||||||
|  | 
 | ||||||
|  | 	def generate(self, t): | ||||||
|  | 		if self.Name == "RaisedCosine": | ||||||
|  | 			return RaisedCosinePulse(t, self.Frequency, self.Amplitude) | ||||||
|  | 		elif self.Name == "GaussianSine": | ||||||
|  | 			return PulseUTsin(t,self.Frequency,self.N_Cycles,self.Amplitude) | ||||||
|  | 		 | ||||||
|  | 	def save(self,t): | ||||||
|  | 		self.time_signal  = self.generate(t) | ||||||
|  | 	 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user