Anonymous
×
Create a new article
Write your page title here:
We currently have 105 articles on MOR Wiki. Type your article name above or click on one of the titles below and start writing!



MOR Wiki

Difference between revisions of "All pass system"

(Fixes, Python code, N->n)
(Edit categories, replace source tags)
Line 2: Line 2:
 
[[Category:procedural]]
 
[[Category:procedural]]
 
[[Category:linear]]
 
[[Category:linear]]
[[Category:first differential order]]
 
 
[[Category:time invariant]]
 
[[Category:time invariant]]
 
[[Category:first differential order]]
  +
[[Category:Sparse]]
 
[[Category:SISO]]
 
[[Category:SISO]]
   
Line 49: Line 50:
   
 
<!-- TODO add unbalancing transformation -->
 
<!-- TODO add unbalancing transformation -->
:<source lang="matlab">
+
:<syntaxhighlight lang="matlab">
 
function [A,B,C,D] = allpass(n)
 
function [A,B,C,D] = allpass(n)
 
% allpass (all-pass system)
 
% allpass (all-pass system)
Line 62: Line 63:
 
D = 1;
 
D = 1;
 
end
 
end
  +
</syntaxhighlight>
</source>
 
   
 
The function call requires one argument; the number of states <math>n</math>.
 
The function call requires one argument; the number of states <math>n</math>.
 
The return value consists of four matrices; the system matrix <math>A</math>, the input matrix <math>B</math>, the output matrix <math>C</math>, and the feed-through matrix <math>D</math>.
 
The return value consists of four matrices; the system matrix <math>A</math>, the input matrix <math>B</math>, the output matrix <math>C</math>, and the feed-through matrix <math>D</math>.
   
:<source lang="matlab">
+
:<syntaxhighlight lang="matlab">
 
[A,B,C,D] = allpass(n);
 
[A,B,C,D] = allpass(n);
  +
</syntaxhighlight>
</source>
 
   
 
An equivalent [https://www.python.org/ Python] code is
 
An equivalent [https://www.python.org/ Python] code is
   
:<source lang="python">
+
:<syntaxhighlight lang="python">
 
from scipy.sparse import diags, lil_matrix
 
from scipy.sparse import diags, lil_matrix
   
Line 86: Line 87:
 
D = 1
 
D = 1
 
return A, B, C, D
 
return A, B, C, D
  +
</syntaxhighlight>
</source>
 
   
 
==Dimensions==
 
==Dimensions==

Revision as of 18:38, 29 August 2023


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 =          {http://modelreduction.org/index.php/All_pass_system},
  year =         {2020}
}

References