mirror of
https://gitlab.science.ru.nl/mthesis-edeboone/m-thesis-introduction.git
synced 2024-12-22 11:33:32 +01:00
Simu: Let Signal have default final positions
This commit is contained in:
parent
80710bee23
commit
c6d527a307
2 changed files with 59 additions and 18 deletions
|
@ -1,4 +1,5 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import scipy.interpolate as interp
|
import scipy.interpolate as interp
|
||||||
|
|
||||||
|
@ -14,7 +15,7 @@ class DigitisedSignal(Signal):
|
||||||
Model an arbitrary digitised signal that can be translated to another position and time.
|
Model an arbitrary digitised signal that can be translated to another position and time.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, signal, sample_rate, t_0 = 0, x_0 = 0, periodic=True, interp1d_kw = None, velocity=None):
|
def __init__(self, signal, sample_rate, t_0 = 0, x_0 = 0, periodic=True, interp1d_kw = None, velocity=None, t_f = None, x_f = None):
|
||||||
"""
|
"""
|
||||||
Initialise by saving the raw signal
|
Initialise by saving the raw signal
|
||||||
|
|
||||||
|
@ -37,8 +38,12 @@ class DigitisedSignal(Signal):
|
||||||
Dictionary will be entered in as **kwargs.
|
Dictionary will be entered in as **kwargs.
|
||||||
velocity : float, optional
|
velocity : float, optional
|
||||||
Defaults to the speed of light in m/s.
|
Defaults to the speed of light in m/s.
|
||||||
|
t_f : float, optional
|
||||||
|
Default time that this signal is received.
|
||||||
|
x_f : float, optional
|
||||||
|
Default Location that this signal is received.
|
||||||
"""
|
"""
|
||||||
super().__init__(t_0=t_0, x_0=x_0, velocity=velocity)
|
super().__init__(t_0=t_0, x_0=x_0, velocity=velocity, t_f=t_f, x_f=x_f)
|
||||||
|
|
||||||
self.raw = np.asarray(signal)
|
self.raw = np.asarray(signal)
|
||||||
self.periodic = periodic
|
self.periodic = periodic
|
||||||
|
|
|
@ -11,7 +11,7 @@ class Signal():
|
||||||
|
|
||||||
Super object, cannot be used directly.
|
Super object, cannot be used directly.
|
||||||
"""
|
"""
|
||||||
def __init__(self, t_0 = 0, x_0 = 0, velocity=None):
|
def __init__(self, t_0 = 0, x_0 = 0, velocity=None, t_f = None, x_f = None):
|
||||||
"""
|
"""
|
||||||
Parameters
|
Parameters
|
||||||
----------
|
----------
|
||||||
|
@ -21,12 +21,27 @@ class Signal():
|
||||||
Location that this signal is sent out from.
|
Location that this signal is sent out from.
|
||||||
velocity : float, optional
|
velocity : float, optional
|
||||||
Defaults to the speed of light in m/s.
|
Defaults to the speed of light in m/s.
|
||||||
|
t_f : float, optional
|
||||||
|
Default time that this signal is received.
|
||||||
|
x_f : float, optional
|
||||||
|
Default Location that this signal is received.
|
||||||
"""
|
"""
|
||||||
|
if t_0 is None:
|
||||||
|
raise ValueError("t_0 cannot be None")
|
||||||
|
if x_0 is None:
|
||||||
|
raise ValueError("x_0 cannot be None")
|
||||||
|
|
||||||
|
self.x_0 = np.asarray(x_0) # m
|
||||||
|
self.t_0 = np.asarray(t_0) # s
|
||||||
|
|
||||||
self.velocity = 299792458 if velocity is None else velocity # m / s
|
self.velocity = 299792458 if velocity is None else velocity # m / s
|
||||||
|
|
||||||
self.x_0 = x_0 # m
|
# Default final positions
|
||||||
self.t_0 = t_0 # s
|
t_f = np.asarray(t_f) if t_f is not None else None
|
||||||
|
x_f = np.asarray(x_f) if x_f is not None else None
|
||||||
|
|
||||||
|
self.x_f = x_f
|
||||||
|
self.t_f = t_f
|
||||||
|
|
||||||
def __call__(self, t_f = None, x_f = None, **kwargs):
|
def __call__(self, t_f = None, x_f = None, **kwargs):
|
||||||
"""
|
"""
|
||||||
|
@ -43,7 +58,7 @@ class Signal():
|
||||||
|
|
||||||
raise NotImplementedError
|
raise NotImplementedError
|
||||||
|
|
||||||
def spatial_time_offset(self, x_f, x_0=None, velocity=None):
|
def spatial_time_offset(self, x_f=None, x_0=None, velocity=None):
|
||||||
"""
|
"""
|
||||||
Calculate the time offset caused by a spatial distance.
|
Calculate the time offset caused by a spatial distance.
|
||||||
"""
|
"""
|
||||||
|
@ -52,15 +67,27 @@ class Signal():
|
||||||
|
|
||||||
if x_0 is None:
|
if x_0 is None:
|
||||||
x_0 = self.x_0
|
x_0 = self.x_0
|
||||||
|
if x_f is None:
|
||||||
|
x_f = self.x_f
|
||||||
|
|
||||||
|
## make sure they are arrays
|
||||||
|
x_0 = np.asarray(x_0) if x_0 is not None else None
|
||||||
|
x_f = np.asarray(x_f) if x_f is not None else None
|
||||||
|
|
||||||
return np.sqrt( np.sum((x_f - x_0)**2, axis=-1) )/velocity
|
return np.sqrt( np.sum((x_f - x_0)**2, axis=-1) )/velocity
|
||||||
|
|
||||||
def temporal_time_offset(self, t_f, t_0=None):
|
def temporal_time_offset(self, t_f=None, t_0=None):
|
||||||
"""
|
"""
|
||||||
Calculate the time offset caused by a temporal distance.
|
Calculate the time offset caused by a temporal distance.
|
||||||
"""
|
"""
|
||||||
if t_0 is None:
|
if t_0 is None:
|
||||||
t_0 = self.t_0
|
t_0 = self.t_0
|
||||||
|
if t_f is None:
|
||||||
|
t_f = self.t_f
|
||||||
|
|
||||||
|
## make sure they are arrays
|
||||||
|
t_0 = np.asarray(t_0) if t_0 is not None else None
|
||||||
|
t_f = np.asarray(t_f) if t_f is not None else None
|
||||||
|
|
||||||
return t_f - t_0
|
return t_f - t_0
|
||||||
|
|
||||||
|
@ -76,26 +103,35 @@ class Signal():
|
||||||
Returns:
|
Returns:
|
||||||
the time shift
|
the time shift
|
||||||
"""
|
"""
|
||||||
|
# Get default values
|
||||||
## spatial offset
|
## starting point
|
||||||
if x_f is None:
|
if t_0 is None:
|
||||||
spatial_time_offset = 0
|
t_0 = self.t_0
|
||||||
else:
|
|
||||||
x_f = np.asarray(x_f)
|
|
||||||
if x_0 is None:
|
if x_0 is None:
|
||||||
x_0 = self.x_0
|
x_0 = self.x_0
|
||||||
|
|
||||||
|
## final point
|
||||||
|
if x_f is None:
|
||||||
|
x_f = self.x_f
|
||||||
|
if t_f is None:
|
||||||
|
t_f = self.t_f
|
||||||
|
|
||||||
|
## make sure they are arrays
|
||||||
|
t_0 = np.asarray(t_0) if t_0 is not None else None
|
||||||
|
x_0 = np.asarray(x_0) if x_0 is not None else None
|
||||||
|
t_f = np.asarray(t_f) if t_f is not None else None
|
||||||
|
x_f = np.asarray(x_f) if x_f is not None else None
|
||||||
|
|
||||||
|
# spatial offset
|
||||||
|
if x_f is None:
|
||||||
|
spatial_time_offset = 0
|
||||||
|
else:
|
||||||
spatial_time_offset = self.spatial_time_offset(x_f, x_0=x_0, velocity=velocity)
|
spatial_time_offset = self.spatial_time_offset(x_f, x_0=x_0, velocity=velocity)
|
||||||
|
|
||||||
## temporal offset
|
# temporal offset
|
||||||
if t_f is None:
|
if t_f is None:
|
||||||
temporal_time_offset = 0
|
temporal_time_offset = 0
|
||||||
else:
|
else:
|
||||||
t_f = np.asarray(t_f)
|
|
||||||
|
|
||||||
if t_0 is None:
|
|
||||||
t_0 = self.t_0
|
|
||||||
|
|
||||||
temporal_time_offset = self.temporal_time_offset(t_f, t_0=t_0)
|
temporal_time_offset = self.temporal_time_offset(t_f, t_0=t_0)
|
||||||
|
|
||||||
return temporal_time_offset - spatial_time_offset
|
return temporal_time_offset - spatial_time_offset
|
||||||
|
|
Loading…
Reference in a new issue