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: object

Complementary 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 noise1 and noise2 as the transfer function models for the sensor noises, and specify weight1 and weight2 as 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