kontrol.complementary_filter
Primary modules
kontrol.complementary_filter.complementary_filter
Complementary filter class for sythesis
- class kontrol.complementary_filter.complementary_filter.ComplementaryFilter(noise1=None, noise2=None, weight1=None, weight2=None, filter1=None, filter2=None, f=None)
Bases:
objectComplementary filter synthesis class.
- Parameters
noise1 (TransferFunction) – Sensor noise 1 transfer function model. A transfer function that has magnitude response matching the amplitude spectral density of noise 1.
noise2 (TransferFunction) – Sensor noise 2 transfer function model. A transfer function that has magnitude response matching the amplitude spectral density of noise 2.
weight1 (TransferFunction, optional) – Weighting function 1. Frequency dependent specification for noise 1. Defaults None.
weight2 (TransferFunction, optional) – Weighting function 2. Frequency dependent specification for noise 2. Defaults None.
filter1 (TransferFunction, optional) – The complementary filter for noise 1. Defaults None.
filter2 (TransferFunction, optional) – The complementary filter for noise 2. Defaults None.
f (array, optional) – The frequency axis in Hz for evaluating the super sensor noise. Defaults None.
- h2synthesis()
Complementary filter synthesis that minimizes the \(\mathcal{H}_2\)-norm of the super sensor noise. The noise must be specified before using this method.
- hinfsynthesis()
Complementary filter synthesis that minimizes the \(\mathcal{H}_\infty\)-norm of the super sensor noise. The noise must be specified before using this method.
Notes
This is a utility class for complementary filter synthesis, sensor noise estimation and analysis. To use synthesis methods, specify
noise1andnoise2as the transfer function models for the sensor noises, and specifyweight1andweight2as the frequency-dependent specifications for the two sensor noises.References
- 1
T. T. L. Tsang, T. G. F. Li, T. Dehaeze, C. Collette. Optimal Sensor Fusion Method for Active Vibration Isolation Systems in Ground-Based Gravitational-Wave Detectors. https://arxiv.org/pdf/2111.14355.pdf
- property f
The frequency axis in Hz.
- property filter1
First complementary filter.
- property filter2
Second complementary filter.
- h2synthesis(clean_filter=True, **kwargs)
Synthesize complementary filters using H2 synthesis.
- Returns
filter1 (TransferFunction) – The complementary filter filtering noise 1.
filter2 (TransferFunction) – The complementary filter filtering noise 2.
clean_filter (boolean, optional) – Remove small outlier coefficients from filters. Defaults True.
**kwargs – Keyword arguments passed to kontrol.TransferFunction.clean()
- hinfsynthesis(clean_filter=True, **kwargs)
Synthesize complementary filters using H-inifinity synthesis.
- Returns
filter1 (TransferFunction) – The complementary filter filtering noise 1.
filter2 (TransferFunction) – The complementary filter filtering noise 2.
clean_filter (boolean, optional) – Remove small outlier coefficients from filters. Defaults True.
**kwargs – Keyword arguments passed to kontrol.TransferFunction.clean()
- property noise1
Transfer function model of sensor noise 1.
- property noise2
Transfer function model of sensor noise 2.
- noise_super(f=None, noise1=None, noise2=None, filter1=None, filter2=None)
Compute and return predicted the ASD of the super sensor noise
Parameter
- farray, optional
The frequency axis in Hz. Use self.f if None. Defaults None.
- noise1array, optional
The amplitude spectral density of noise 1. Use self.noise1 and self.f to estimate if None. Defaults None.
- noise2array, optional
The amplitude spectral density of noise 2. Use self.noise1 and self.f to estimate if None. Defaults None.
- filter1TransferFunction, optional
The complementary filter for filtering noise1 Use self.filter1 if not specified. Defaults None
- filter2TransferFunction, optional
The complementary filter for filtering noise1 Use self.filter2 if not specified. Defaults None
- returns
The amplitude spectral density of the super sensor noise.
- rtype
array
Secondary modules
kontrol.complementary_filter.predefined
Some predefined complementary filters
- kontrol.complementary_filter.predefined.generalized_sekiguchi(fb, order_low_pass, order_high_pass)
Generalized Sekiguchi Filter
- Parameters
fb (float) – Blending frequency in Hz.
order_low_pass (int) – Order of roll-off of the low-pass filter
order_high_pass (int) – Order of roll-off of the high-pass filter
- Returns
lpf (kontrol.TransferFunction) – The low-pass filter
hpf (kontrol.TransferFunction) – The high-pass filter
- kontrol.complementary_filter.predefined.lucia(coefs)
Lucia Trozzo’s complementary filter
- Parameters
coefs (list of float or numpy.ndarray of floats) – Takes 7 parameters, in specification order: \(p_1\), \(p_ 2\), \(z_1\), \(w_1\), \(q_1\), \(w_2\), \(q_2\) . See notes for the meaning of the parameters.
- Returns
lpf (control.xferfcn.TransferFunction) – Complementary low-pass filter
hpf (control.xferfcn.Transferfunction) – Complementary high-pass filter
Notes
The modified Sekiguchi complemetary filter is structured as:
\[H = K\frac{s^3(s+z_1)(s^2+w_1/q_1\,s+w_1^2)(s^2+w_2/q_2\,s+w_2^2)} {(s+p_1)^5(s+p_2)^3}\]where \(K\) is a constant normalizing the filter at high frequency.
- kontrol.complementary_filter.predefined.modified_sekiguchi(coefs)
Modified Sekiguchi Filter with guaranteed 4th-order high-pass.
- Parameters
coefs (list of (int or float) or numpy.ndarray) – 4 coefficients defining the modified Sekiguchi filter.
- Returns
lpf (control.xferfcn.TransferFunction) – Complementary low-pass filter
hpf (control.xferfcn.Transferfunction) – Complementary high-pass filter
Notes
The modified Sekiguchi complemetary filter is structured as:
\[H = \frac{s^7 + 7a_1s^6 + 21a_2^2s^5 + 35a_3^3s^4}{(s+a_4)^7}\]where \(a_1\), \(a_2\), \(a_3\), \(a_4\) are some parameters that defines the filter.
- kontrol.complementary_filter.predefined.sekiguchi(coefs)
4th-order complementary filters specified by the blending frequencies.
- Parameters
coefs (float) – Blending frequency of the filter in [rad/s]
- Returns
lpf (control.xferfcn.TransferFunction) – Complementary low pass-filter
hpf (control.xferfcn.Transferfunction) – Complementary high pass-filter
Notes
4th-order complemetary filter used in Sekiguchi’s thesis [1]_ whose high-pass is structured as:
\[H = \frac{s^7 + 7w_bs^6 + 21w_b^2s^5 + 35w_b^3s^4}{(s+w_b)^7}\]where \(w_b\) is the blending frequency in [rad/s].
References
- 1
T. Sekiguchi, A Study of Low Frequency Vibration Isolation System for Large Scale Gravitational Wave Detectors
kontrol.complementary_filter.synthesis
Filter synthesis functions.
- kontrol.complementary_filter.synthesis.generalized_plant(noise1, noise2, weight1, weight2)
Return the generalized plant of a 2 complementary filter system
- Parameters
noise1 (TransferFunction) – Sensor noise 1 transfer function model. A transfer function that has magnitude response matching the amplitude spectral density of noise 1.
noise2 (TransferFunction) – Sensor noise 2 transfer function model. A transfer function that has magnitude response matching the amplitude spectral density of noise 2.
weight1 (TransferFunction) – Weighting function 1. Frequency dependent specification for noise 1.
weight2 (TransferFunction) – Weighting function 2. Frequency dependent specification for noise 2.
- Returns
The plant.
- Return type
control.xferfcn.TransferFunction
- kontrol.complementary_filter.synthesis.h2complementary(noise1, noise2, weight1=None, weight2=None)
H2 optimal complementary filter synthesis
- Parameters
noise1 (TransferFunction) – Sensor noise 1 transfer function model. A transfer function that has magnitude response matching the amplitude spectral density of noise 1.
noise2 (TransferFunction) – Sensor noise 2 transfer function model. A transfer function that has magnitude response matching the amplitude spectral density of noise 2.
weight1 (TransferFunction, optional) – Weighting function 1. Frequency dependent specification for noise 1. Defaults None.
weight2 (TransferFunction, optional) – Weighting function 2. Frequency dependent specification for noise 2.
- Returns
filter1 (TransferFunction) – The complementary filter filtering noise1.
filter2 (TransferFunction) – The complementary filter filtering noise2.
Notes
This function ultilizes control.robust.h2syn() which depends on the slycot module. If you are using under a conda virtual environment, the slycot module can be installed easily from conda-forge. Using pip to install slycot is a bit more involved (I have yet to suceed installing slycot in my Windows machine). Please refer to the python-control package for further instructions.
It is possible that h2syn yields no solution for some tricky noise profiles . Try adjusting the noise profiles at some irrelevant frequencies.
Thomas Dehaeze [1]_ had the idea first so credits goes to him. (Properly cite when the paper is published.)
References
- 1
Dehaeze, T. https://tdehaeze.github.io/dehaeze20_optim_robus_compl_filte/matlab/index.html
- 2
T. T. L. Tsang, T. G. F. Li, T. Dehaeze, C. Collette. Optimal Sensor Fusion Method for Active Vibration Isolation Systems in Ground-Based Gravitational-Wave Detectors. https://arxiv.org/pdf/2111.14355.pdf
- kontrol.complementary_filter.synthesis.hinfcomplementary(noise1, noise2, weight1=None, weight2=None)
H-infinity optimal complementary filter synthesis
- Parameters
noise1 (TransferFunction) – Sensor noise 1 transfer function model. A transfer function that has magnitude response matching the amplitude spectral density of noise 1.
noise2 (TransferFunction) – Sensor noise 2 transfer function model. A transfer function that has magnitude response matching the amplitude spectral density of noise 2.
weight1 (TransferFunction, optional) – Weighting function 1. Frequency dependent specification for noise 1. Defaults None.
weight2 (TransferFunction, optional) – Weighting function 2. Frequency dependent specification for noise 2.
- Returns
filter1 (TransferFunction) – The complementary filter filtering noise1.
filter2 (TransferFunction) – The complementary filter filtering noise2.
Notes
This function ultilizes control.robust.hinfsyn() which depends on the slycot module. If you are using under a conda virtual environment, the slycot module can be installed easily from conda-forge. Using pip to install slycot is a bit more involved (I have yet to suceed installing slycot in my Windows machine). Please refer to the python-control package for further instructions.
Thomas Dehaeze [1]_ had the idea first so credits goes to him. (Properly cite when the paper is published.)
References
- 1
Dehaeze, T. https://tdehaeze.github.io/dehaeze20_optim_robus_compl_filte/matlab/index.html
- 2
T. T. L. Tsang, T. G. F. Li, T. Dehaeze, C. Collette. Optimal Sensor Fusion Method for Active Vibration Isolation Systems in Ground-Based Gravitational-Wave Detectors. https://arxiv.org/pdf/2111.14355.pdf