Description
This procedural benchmark generates an all-pass SISO system based on [1]. For an all-pass system, the transfer function has the property \(g(s)g(-s) = \sigma^2\), \(\sigma > 0\), or (equivalently) the controllability and observability Gramians are quasi inverse to each other\[W_C W_O = \sigma I\], which means this system has a single Hankel singular value of multiplicity of the system's order. The system matrices are constructed based on the scheme:
\[ \begin{align} A &= \begin{pmatrix} a_{1,1} & -\alpha_1 \\ \alpha_1 & 0 & -\alpha_2 \\ & \alpha_2 & 0 & \ddots \\ & & \ddots & \ddots & -\alpha_{N-1} \\ & & & \alpha_{N-1} & 0 \end{pmatrix}, \\ B &= \begin{pmatrix} b_1 \\ 0 \\ \vdots \\ 0 \end{pmatrix}, \\ C &= \begin{pmatrix} s_1 b_1 & 0 & \cdots & 0 \end{pmatrix}, \\ D &= -s_1 \sigma. \end{align} \]
We choose \(s_1 \in \{-1,1\}\) to be \(s_1 \equiv -1\), as this makes the system state-space-anti-symmetric. Furthermore, \(b_1 = 1\) and \(\sigma = 1\), which makes \(a_{1,1} = -\frac{b_1^2}{2 \sigma} = -\frac{1}{2}\).
Data
This benchmark is procedural and the state dimensions can be chosen. Use the following MATLAB code to generate a random system as described above:
function [A,B,C,D] = allpass(n) % allpass (all-pass system) % by Christian Himpe, 2020 % released under BSD 2-Clause License %* A = gallery('tridiag',n,-1,0,1); A(1,1) = -0.5; B = sparse(1,1,1,n,1); C = -B'; D = 1; end
The function call requires one argument; the number of states \(n\). The return value consists of four matrices; the system matrix \(A\), the input matrix \(B\), the output matrix \(C\), and the feed-through matrix \(D\).
[A,B,C,D] = allpass(n);
An equivalent Python code is
from scipy.sparse import diags, lil_matrix def allpass(n): A = diags([-1, 0, 1], offsets=[-1, 0, 1], shape=(n, n), format='lil') A[0, 0] = -0.5 A = A.tocsc() B = lil_matrix((n, 1)) B[0, 0] = 1 B = B.tocsc() C = -B.T D = 1 return A, B, C, D
Dimensions
\[ \begin{align} \dot{x}(t) &= Ax(t) + Bu(t) \\ y(t) &= Cx(t) + Du(t) \end{align} \]
System dimensions\[A \in \mathbb{R}^{n \times n}\], \(B \in \mathbb{R}^{n \times 1}\), \(C \in \mathbb{R}^{1 \times n}\), \(D \in \mathbb{R}\).
Citation
To cite this benchmark, use the following references:
- For the benchmark itself and its data:
- The MORwiki Community, All-Pass System. MORwiki - Model Order Reduction Wiki, 2020. http://modelreduction.org/index.php/All_pass_system
@MISC{morwiki_allpass,
author = {{The MORwiki Community}},
title = {All-Pass System},
howpublished = {{MORwiki} -- Model Order Reduction Wiki},
url = {https://modelreduction.org/morwiki/index.php/All_pass_system},
year = {2020}
}
References
- ↑ R.J. Ober. "Asymptotically Stable All-Pass Transfer Functions: Canonical Form, Parametrization and Realization", IFAC Proceedings Volumes, 20(5): 181--185, 1987.