Fri 29 Nov 2024 04:30:50 PM CET
This commit is contained in:
parent
6d495910ab
commit
dba6fd1276
91
src/SimNDT/core/signal.py
Normal file
91
src/SimNDT/core/signal.py
Normal file
|
@ -0,0 +1,91 @@
|
|||
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: Name={}, Amplitude={}, Frequency={}, N_Cycles={}".format(
|
||||
self.Name, self.Amplitude, self.Frequency, self.N_Cycles
|
||||
).encode('utf-8')
|
||||
|
||||
def __repr__(self):
|
||||
return "Signals(Name='{}', Amplitude={}, Frequency={}, N_Cycles={})".format(
|
||||
self.Name, self.Amplitude, self.Frequency, self.N_Cycles
|
||||
).encode('utf-8')
|
||||
|
||||
|
||||
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