def _filter_transfer_function(cls,
frequencies, filter_values,
frequency_correction=1.):
"""
Transfer function of the inputfilter part of a pid module
"""
frequencies = np.array(frequencies, dtype=np.complex)
module_delay = 0
tf = np.ones(len(frequencies), dtype=complex)
# input filter modelisation
if not isinstance(filter_values, list):
filter_values = list([filter_values])
for f in filter_values:
if f == 0:
continue
elif f > 0: # lowpass
tf /= (1.0 + 1j * frequencies / f)
module_delay += 2 # two cycles extra delay per lowpass
elif f < 0: # highpass
tf /= (1.0 + 1j * f / frequencies)
# plus is correct here since f already has a minus sign
module_delay += 1 # one cycle extra delay per highpass
delay = module_delay * 8e-9 / frequency_correction
tf *= np.exp(-1j * delay * frequencies * 2 * np.pi)
return tf
评论列表
文章目录