Solving model detection problems

  • emdsyn Exact synthesis of model detection filters.
  • amdsyn Approximate synthesis of model detection filters.
FaultDetectionTools.emdsynFunction
emdsyn(sysm::MDMModel; rdim, MDSelect, nullspace = true, simple = false, minimal = true, 
                       emtest = false, normalize = false, fast = true, 
                       sdeg, smarg, poles, HDesign, MDtol, MDGainTol, MDfreq, 
                       tcond, offset, atol, atol1, atol2, atol3, rtol) 
                       -> (Q::MDFilter, R::MDFilterIF, info)

Solve the exact model detection problem (EMDP) for a given multiple synthesis model sysm::MDMModel. The computed stable and proper filter objects Q and R contain the model detection filter, representing the solution of the EMDP, and its internal form, respectively.

The returned named tuple info, with the components info.tcond, info.degs, info.MDperf, and info.HDesign, contains additional synthesis related information (see below).

For a multiple synthesis model sysm containing N stable component models, the i-th component system sysm.sys[i] has a descriptor realization of the form sysm.sys[i] = (Ai-λEi,Bi,Ci,Di) and the corresponding input-output form is

  yi = Gui(λ)*u + Gdi(λ)*di + Gwi(λ)*wi + Gvi(λ)*vi

with the Laplace- or Z-transformed plant outputs yi, control inputs u, disturbance inputs di, noise inputs wi, and auxiliary inputs vi, and with Gui(λ), Gdi(λ), Gwi(λ) and Gvi(λ), the corresponding transfer function matrices.

The model detection filter object Q, contains in Q.sys the resulting bank of N filters. The i-th filter Q.sys[i] is in a standard state-space form and generates r_i, the i-th component (scalar or vector) of the overall residual vector r := [r_1; r_2; ...; r_N]. The corresponding input-output (implementation) form of the i-th filter is

        r_i = Qyi(λ)*y + Qui(λ)*u   ,

where Qyi(λ) and Qui(λ) are the transfer function matrices from the output and control inputs to the i-th residual component. The dimensions of output and control inputs are contained in the integers Q.ny and Q.mu, respectively.

The model detection filter internal form object R, contains R.sys, the resulting array of N × N internal form of the filters. The (i,j)-th component filter R.sys[i,j] is in a standard state-space form, generates the residual signal r_ij, and corresponds to the input-output form

   r_ij = Ruij(λ)*u + Rdij(λ)*dj + Rwij(λ)*wj + Rvij(λ)*vj ,

where

   | Ruij(λ) Rdij(λ) Rwij(λ) Raij(λ) | := |Qyi(λ) Qui(λ)]*| Guj(λ) Gdj(λ) Gwj(λ) Gaj(λ) |. 
                                                          |   I    0      0      0      |

The solution of the EMDP ensures that for the i-th filter, Ruii(λ) = 0, Rdii(λ) = 0, and [Ruij(λ) Rdij(λ)] $\neq$ 0 for j $\neq$ i.

Various user options can be specified via keyword arguments as follows:

MDSelect = ifilt specifies in the vector ifilt the indices of the desired filters to be designed (default: ifilt = 1:N)

If minimal = true (default), least order filter synthesis is performed to determine each of the component filters Q.sys[i] for i = 1, ...,N and R.sys[i,j] for i, j = 1, ...,N while with minimal = false full order synthesis is performed.

If HDesign = H, then H is an N-dimensional array of full row rank or empty design matrices H = [H_1, ..., H_N], where H_i is the design matrix employed for the synthesis of the i-th component filter (default: HDesign = missing)

rdim = q specifies the vector q, whose i-th component q[i] specifies the number of residual outputs for the i-th component filter Q.sys[i]. If q is a scalar, then a vector rdim with all components equal to q is assumed. The default value of q[i] is chosen as follows: if HDesign = missing or H_i is empty then q[i] = 1, if minimal = true, or q[i] is the number of the nullspace basis vectors used for the synthesis of Q.sys [i], if minimal = false; if H_i specifies a full row rank design matrix, then q[i] is the row dimension of H_i.

If emdtest = false (default), only the input channels are used for model detectability tests. If emdtest = true, extended model detectability tests are performed using both control and disturbance input channels.

MDfreq = ω specifies a vector of real frequency values or a scalar real frequency value for strong model detectability checks (default: MDfreq = missing).

If nullspace = false (default), a full-order observer based nullspace basis is used for the synthesis of the i-th filter whenever the i-th component system has no disturbance inputs. Otherwise, minimal proper nullspace bases are used. If nullspace = true, minimal proper nullspace bases are used for the synthesis of the model detection filters.

If simple = true, simple proper nullspace bases are emplyed for synthesis. The orders of the basis vectors employed for the synthesis of the i-th filter are provided in info.deg[i]. If simple = false (default), then no simple bases are computed.

offset = β specifies the boundary offset β to assess the stability of poles. Accordingly, for the stability of a continuous-time system all real parts of poles must be at most , while for the stability of a discrete-time system all moduli of poles must be at most 1-β. The default value used for β is sqrt(ϵ), where ϵ is the working machine precision.

smarg = α specifies the stability margin which defines the stability domain Cs of poles, as follows: for a continuous-time system, Cs is the set of complex numbers with real parts at most α, while for a discrete-time system, Cs is the set of complex numbers with moduli at most α < 1 (i.e., the interior of a disc of radius α centered in the origin). If smarg is missing, then the employed default values are α = -β for a continuous-time system and α = 1-β for a discrete-time system, where β is the boundary offset specified by the keyword argument offset = β.

sdeg = γ is the prescribed stability degree for the poles of the filters Q and R (default: γ = -0.05 for the real parts of poles for a continuous-time system and γ = 0.95 for the magnitudes of poles for a discrete-time system).

poles = v specifies a complex vector v containing a complex conjugate set of desired poles within the stability domain Cs to be assigned for the filters Q and R (default: poles = missing).

tcond = tcmax specifies the maximum alowed condition number tcmax of the employed non-orthogonal transformations (default: tcmax = 1.e4).

MDtol = tol1 specifies the threshold tol1 for model detectability checks (default: tol1 = 0.0001).

MDGainTol = tol2 specifies the threshold tol2 for strong model detectability checks (default: tol2 = 0.01).

If normalize = false (default), the i-th component filter Q.sys[i] is scaled such that the minimum gain of R.sys[i,j] for j = 1, ..., N, j $\neq$ i, is equal to one. If normalize = true, the standard normalization of component filters is performed to ensure equal gains for R.sys[1,j] and R.sys[j,1]. This option is only possible if ifilt[1] = 1 (see MDSelect).

The rank determinations in the performed reductions are based on rank revealing QR-decompositions with column pivoting if fast = true (default) or the more reliable SVD-decompositions if fast = false.

The keyword arguments atol1, atol2 and rtol, specify, respectively, the absolute tolerance for the nonzero elements of the state-space matrices Ai, Bi, Ci and Di, the absolute tolerance for the nonzero elements of Ei, and the relative tolerance for the nonzero elements of all above matrices. The default relative tolerance is ni*ϵ, where ϵ is the working machine epsilon and ni is the orders of the system sysm.sys[i]. The keyword argument atol3 is an absolute tolerance for observability tests (default: internally determined value). The keyword argument atol can be used to simultaneously set atol1 = atol, atol2 = atol and atol3 = atol.

The resulting named tuple info contains (tcond, degs, MDperf, HDesign), where:

info.tcond is the maximum of the condition numbers of the employed non-orthogonal transformation matrices; a warning is issued if info.tcond >= tcmax;

info.degs is an N-dimensional vector, whose i-th component is an integer vector containing the degrees of the basis vectors of the employed simple nullspace basis for the synthesis of the i-th filter component, if simple = true, and the degrees of the basis vectors of an equivalent polynomial nullspace basis, if simple = false;

info.MDperf is an N × N array containing the resulting distance-mapping performance, representing the peak gains of the associated internal representations of the model detection filters. If the (i,j)-th component filter R.sys[i,j] has the input-output form

 rij = Ruij(λ)*u + Rdij(λ)*dj + Rwij(λ)*wj + Rvij(λ)*vj ,

then, the (i,j)-th performance gain is evaluated as info.MDperf[i,j] = ||Ruij(λ)||∞ if emdtest = false (default) or info.MDperf[i,j] = ||[Ruij(λ) Rdij(λ)]||∞ if emdtest = true. If MDfreq = ω, then each gain info.MDperf[i,j] represents the maximum of 2-norm pointwise gains evaluated for all frequencies in ω.

info.HDesign is an N-dimensional vector, whose i-th component is the design matrix H_i employed for the synthesis of the i-th model detection filter.

Method: The Procedure EMD from [1] is implemented to solve the exact model detection problem. For more details on the least order synthesis of model detection filters see [2].

References:

[1] A. Varga, Solving Fault Diagnosis Problems - Linear Synthesis Techniques. Springer Verlag, 2017; sec. 5.2.

[2] A. Varga, Least order fault and model detection using multi-models. IEEE CDC'09, Shanghai, China, 2009.

FaultDetectionTools.amdsynFunction
amdsyn(sysm::MDMModel; rdim, MDSelect, nullspace = true, simple = false, minimal = true, 
                       emtest = false, normalize = false, fast = true, 
                       sdeg, smarg, poles, HDesign, MDtol, MDGainTol, MDfreq, 
                       epsreg = 0.1, sdegzer, nonstd = 1, rtolinf= 0.0001, 
                       tcond, offset, atol, atol1, atol2, atol3, rtol) 
                       -> (Q::MDFilter, R::MDFilterIF, info)

Solve the approximate model detection problem (AMDP) for a given multiple synthesis model sysm::MDMModel. The computed stable and proper filter objects Q and R contain the model detection filter, representing the solution of the AMDP, and its internal form, respectively.

The returned named tuple info, with the components info.tcond, info.degs, info.MDperf, info.MDgap, info.HDesign and info.nonstandard, contains additional synthesis related information (see below).

For a multiple synthesis model sysm containing N stable component models, the i-th component system sysm.sys[i] has a descriptor realization of the form sysm.sys[i] = (Ai-λEi,Bi,Ci,Di) and the corresponding input-output form is

  yi = Gui(λ)*u + Gdi(λ)*di + Gwi(λ)*wi + Gvi(λ)*vi

with the Laplace- or Z-transformed plant outputs yi, control inputs u, disturbance inputs di, noise inputs wi, and auxiliary inputs vi, and with Gui(λ), Gdi(λ), Gwi(λ) and Gvi(λ), the corresponding transfer function matrices.

The model detection filter object Q, contains in Q.sys the resulting bank of N filters. The i-th filter Q.sys[i] is in a standard state-space form and generates r_i, the i-th component (scalar or vector) of the overall residual vector r := [r_1; r_2; ...; r_N]. The corresponding input-output (implementation) form of the i-th filter is

        r_i = Qyi(λ)*y + Qui(λ)*u ,

where Qyi(λ) and Qui(λ) are the transfer function matrices from the measured outputs and control inputs to the i-th residual component. The dimensions of measured outputs and control inputs are contained in the integers Q.ny and Q.mu, respectively.

The model detection filter internal form object R, contains R.sys, the resulting array of N × N internal form filters. The (i,j)-th component filter R.sys[i,j] is in a standard state-space form, generates the residual signal r_ij, and corresponds to the input-output form

   r_ij = Ruij(λ)*u + Rdij(λ)*dj + Rwij(λ)*wj + Rvij(λ)*vj ,

where

   | Ruij(λ) Rdij(λ) Rwij(λ) Raij(λ) | := |Qyi(λ) Qui(λ)]*| Guj(λ) Gdj(λ) Gwj(λ) Gaj(λ) |. 
                                                          |   I    0      0      0      |

The solution of the AMDP ensures that for the i-th filter, Ruii(λ) = 0, Rdii(λ) = 0, [Ruij(λ) Rdij(λ)] $\neq$ 0 for j $\neq$ i, and, additionally, the maximization of the achieved gaps (see description of info.MDgap).

Various user options can be specified via keyword arguments as follows:

MDSelect = ifilt specifies in the vector ifilt the indices of the desired filters to be designed (default: ifilt = 1:N)

If minimal = true (default), least order filter synthesis is performed to determine each of the component filters Q.sys[i] for i = 1, ...,N and R.sys[i,j] for i, j = 1, ...,N while with minimal = false full order synthesis is performed.

If HDesign = H, then H is an N-dimensional array of full row rank or empty design matrices H = [H_1, ..., H_N], where H_i is the design matrix employed for the synthesis of the i-th component filter (default: HDesign = missing)

rdim = q specifies the vector q, whose i-th component q[i] specifies the number of residual outputs for the i-th component filter Q.sys[i]. If q is a scalar, then a vector rdim with all components equal to q is assumed. The default value of q[i] is chosen as follows: if HDesign = missing or H_i is empty then q[i] = 1, if minimal = true, or q[i] is the number of the nullspace basis vectors used for the synthesis of Q.sys [i], if minimal = false; if H_i specifies a full row rank design matrix, then q[i] is the row dimension of H_i.

If emdtest = false (default), only the input channels are used for model detectability tests. If emdtest = true, extended model detectability tests are performed using both control and disturbance input channels.

MDfreq = ω specifies a vector of real frequency values or a scalar real frequency value for strong model detectability checks (default: MDfreq = missing).

If nullspace = false (default), a full-order observer based nullspace basis is used for the synthesis of the i-th filter whenever the i-th component system has no disturbance inputs. Otherwise, minimal proper nullspace bases are used. If nullspace = true, minimal proper nullspace bases are used for the synthesis of the model detection filters.

If simple = true, simple proper nullspace bases are emplyed for synthesis. The orders of the basis vectors employed for the synthesis of the i-th filter are provided in info.deg[i]. If simple = false (default), then no simple bases are computed.

offset = β specifies the boundary offset β to assess the stability of poles. Accordingly, for the stability of a continuous-time system all real parts of poles must be at most , while for the stability of a discrete-time system all moduli of poles must be at most 1-β. The default value used for β is sqrt(ϵ), where ϵ is the working machine precision.

smarg = α specifies the stability margin which defines the stability domain Cs of poles, as follows: for a continuous-time system, Cs is the set of complex numbers with real parts at most α, while for a discrete-time system, Cs is the set of complex numbers with moduli at most α < 1 (i.e., the interior of a disc of radius α centered in the origin). If smarg is missing, then the employed default values are α = -β for a continuous-time system and α = 1-β for a discrete-time system, where β is the boundary offset specified by the keyword argument offset = β.

sdeg = γ is the prescribed stability degree for the poles of the filters Q and R (default: γ = -0.05 for the real parts of poles for a continuous-time system and γ = 0.95 for the magnitudes of poles for a discrete-time system).

poles = v specifies a complex vector v containing a complex conjugate set of desired poles within the stability domain Cs to be assigned for the filters Q and R (default: poles = missing).

tcond = tcmax specifies the maximum alowed condition number tcmax of the employed non-orthogonal transformations (default: tcmax = 1.e4).

MDtol = tol1 specifies the threshold tol1 for model detectability checks (default: tol1 = 0.0001).

MDGainTol = tol2 specifies the threshold tol2 for strong model detectability checks (default: tol2 = 0.01).

If normalize = false (default), the i-th component filter Q.sys[i] is scaled such that the minimum gain of R.sys[i,j] for j = 1, ..., N, j $\neq$ i, is equal to one. If normalize = true, the standard normalization of component filters is performed to ensure equal gains for R.sys[1,j] and R.sys[j,1]. This option is only possible if ifilt[1] = 1 (see MDSelect).

epsreg = ϵ specifies the value of the regularization parameter ϵ (default: ϵ = 0.1)

sdegzer = δ specifies the prescribed stability degree δ for zeros shifting (default: δ = −0.05 for a continuous-time system sysf.sys and δ = 0.95 for a discrete-time system sysf.sys).

nonstd = job specifies the option to handle nonstandard optimization problems as follows:

  job = 1 – use the quasi-co-outer–co-inner factorization (default);
  job = 2 – use the modified co-outer–co-inner factorization with the
            regularization parameter `ϵ`;
  job = 3 – use the Wiener-Hopf type co-outer–co-inner factorization;
  job = 4 – use the Wiener-Hopf type co-outer-co-inner factorization with
            zero shifting of the non-minimum phase factor using the
            stabilization parameter `δ`;
  job = 5 – use the Wiener-Hopf type co-outer-co-inner factorization with
            the regularization of the non-minimum phase factor using the
            regularization parameter `ϵ`.

The rank determinations in the performed reductions are based on rank revealing QR-decompositions with column pivoting if fast = true (default) or the more reliable SVD-decompositions if fast = false.

The keyword arguments atol1, atol2 and rtol, specify, respectively, the absolute tolerance for the nonzero elements of the state-space matrices Ai, Bi, Ci and Di, the absolute tolerance for the nonzero elements of Ei, and the relative tolerance for the nonzero elements of all above matrices. The default relative tolerance is ni*ϵ, where ϵ is the working machine epsilon and ni is the orders of the system sysm.sys[i]. The keyword argument atol3 is an absolute tolerance for observability tests (default: internally determined value). The keyword argument atol can be used to simultaneously set atol1 = atol, atol2 = atol and atol3 = atol.

The resulting named tuple info contains (tcond, degs, MDperf, MDgap, HDesign, nonstandard), where:

info.tcond is the maximum of the condition numbers of the employed non-orthogonal transformation matrices; a warning is issued if info.tcond >= tcmax;

info.degs is an N-dimensional vector, whose i-th component is an integer vector containing the degrees of the basis vectors of the employed simple nullspace basis for the synthesis of the i-th filter component, if simple = true, and the degrees of the basis vectors of an equivalent polynomial nullspace basis, if simple = false;

info.MDperf is an N × N array containing the resulting distance-mapping performance, representing the peak gains of the associated internal representations of the model detection filters. If the (i,j)-th component filter R.sys[i,j] has the input-output form

 rij = Ruij(λ)*u + Rdij(λ)*dj + Rwij(λ)*wj + Rvij(λ)*vj ,

then, the (i,j)-th performance gain is evaluated as info.MDperf[i,j] = ||Ruij(λ)||∞ if emdtest = false (default) or info.MDperf[i,j] = ||[Ruij(λ) Rdij(λ)]||∞ if emdtest = true. If MDfreq = ω, then each gain info.MDperf[i,j] represents the maximum of 2-norm pointwise gains evaluated for all frequencies in ω.

info.MDgap is an N-dimensional vector of achieved noise gaps, where the i-th gap is computed as info.MDgap[i] = β[i]/γ[i], where β[i] = min(||Rij(λ)||∞ for i $\neq$ j) and γ[i] = ||Rwii(λ)||∞. Rij(λ) is defined as Rij(λ) = Ruij(λ) if emtest = false (default) or Rij(λ) = [Ruij(λ) Rdij(λ)] if emtest = true. If MDfreq = ω, where ω is a given vector of real frequency values, then each gain β[i] represents the minimum of the maximum of 2-norm pointwise gains evaluated for all frequencies in ω.

info.HDesign is an N-dimensional vector, whose i-th component is the design matrix H_i employed for the synthesis of the i-th model detection filter.

info.nonstandard is an N-dimensional vector, whose i-th component is true if the synthesis of the i-th filter involved a nonstandard optimization problem and is false otherwise.

Method: An extension of the Procedure AMD from [1] is implemented to solve the approximate model detection problem. This procedure relies on the nullspace-based synthesis method of model detection filters proposed in [2].

References:

[1] A. Varga, Solving Fault Diagnosis Problems - Linear Synthesis Techniques. Springer Verlag, 2017; sec. 5.2.

[2] A. Varga, Least order fault and model detection using multi-models. IEEE CDC'09, Shanghai, China, 2009.