Waveform value now pre-multiplied by amplitude scaling value when returned.

这个提交包含在:
Craig Warren
2017-02-21 12:55:43 +00:00
父节点 f3c846330d
当前提交 c51a501d05

查看文件

@@ -41,7 +41,7 @@ class Waveform(object):
dt (float): Absolute time discretisation. dt (float): Absolute time discretisation.
Returns: Returns:
waveform (float): Calculated value for waveform. ampvalue (float): Calculated value for waveform.
""" """
# Coefficients for certain waveforms # Coefficients for certain waveforms
@@ -56,51 +56,53 @@ class Waveform(object):
# Waveforms # Waveforms
if self.type == 'gaussian': if self.type == 'gaussian':
waveform = np.exp(-zeta * delay**2) ampvalue = np.exp(-zeta * delay**2)
elif self.type == 'gaussiandot': elif self.type == 'gaussiandot':
waveform = -2 * zeta * delay * np.exp(-zeta * delay**2) ampvalue = -2 * zeta * delay * np.exp(-zeta * delay**2)
elif self.type == 'gaussiandotnorm': elif self.type == 'gaussiandotnorm':
normalise = np.sqrt(np.exp(1) / (2 * zeta)) normalise = np.sqrt(np.exp(1) / (2 * zeta))
waveform = -2 * zeta * delay * np.exp(-zeta * delay**2) * normalise ampvalue = -2 * zeta * delay * np.exp(-zeta * delay**2) * normalise
elif self.type == 'gaussiandotdot': elif self.type == 'gaussiandotdot':
waveform = 2 * zeta * (2 * zeta * delay**2 - 1) * np.exp(-zeta * delay**2) ampvalue = 2 * zeta * (2 * zeta * delay**2 - 1) * np.exp(-zeta * delay**2)
elif self.type == 'gaussiandotdotnorm': elif self.type == 'gaussiandotdotnorm':
normalise = 1 / (2 * zeta) normalise = 1 / (2 * zeta)
waveform = 2 * zeta * (2 * zeta * delay**2 - 1) * np.exp(-zeta * delay**2) * normalise ampvalue = 2 * zeta * (2 * zeta * delay**2 - 1) * np.exp(-zeta * delay**2) * normalise
elif self.type == 'ricker': elif self.type == 'ricker':
normalise = 1 / (2 * zeta) normalise = 1 / (2 * zeta)
waveform = - (2 * zeta * (2 * zeta * delay**2 - 1) * np.exp(-zeta * delay**2)) * normalise ampvalue = - (2 * zeta * (2 * zeta * delay**2 - 1) * np.exp(-zeta * delay**2)) * normalise
elif self.type == 'sine': elif self.type == 'sine':
waveform = np.sin(2 * np.pi * self.freq * time) ampvalue = np.sin(2 * np.pi * self.freq * time)
if time * self.freq > 1: if time * self.freq > 1:
waveform = 0 ampvalue = 0
elif self.type == 'contsine': elif self.type == 'contsine':
rampamp = 0.25 rampamp = 0.25
ramp = rampamp * time * self.freq ramp = rampamp * time * self.freq
if ramp > 1: if ramp > 1:
ramp = 1 ramp = 1
waveform = ramp * np.sin(2 * np.pi * self.freq * time) ampvalue = ramp * np.sin(2 * np.pi * self.freq * time)
elif self.type == 'impulse': elif self.type == 'impulse':
# time < dt condition required to do impulsive magnetic dipole # time < dt condition required to do impulsive magnetic dipole
if time == 0 or time < dt: if time == 0 or time < dt:
waveform = 1 ampvalue = 1
elif time >= dt: elif time >= dt:
waveform = 0 ampvalue = 0
elif self.type == 'user': elif self.type == 'user':
index = round_value(time / dt) index = round_value(time / dt)
# Check to see if there are still user specified values and if not use zero # Check to see if there are still user specified values and if not use zero
if index > len(self.uservalues) - 1: if index > len(self.uservalues) - 1:
waveform = 0 ampvalue = 0
else: else:
waveform = self.uservalues[index] ampvalue = self.uservalues[index]
return waveform ampvalue *= self.amp
return ampvalue