WOLFRAM SYSTEM MODELER

# bandPass

Return band pass filter roots as needed for block for given cut-off frequency

# Wolfram Language

In[1]:=
`SystemModel["Modelica.Blocks.Continuous.Internal.Filter.roots.bandPass"]`
Out[1]:=

# Information

This information is part of the Modelica Standard Library maintained by the Modelica Association.

The goal is to implement the filter in the following form:

```// complex conjugate poles:
der(x1) = a*x1 - b*x2 + ku*u;
der(x2) = b*x1 + a*x2;
y  = k1*x1 + k2*x2;

ku = (a^2 + b^2)/b
k1 = cn/ku
k2 = cn*a/(b*ku)
```

This representation has the following transfer function:

```// complex conjugate poles
s*x2 =  a*x2 + b*x1
s*x1 = -b*x2 + a*x1 + ku*u
or
(s-a)*x2               = b*x1  ->  x2 = b/(s-a)*x1
(s + b^2/(s-a) - a)*x1 = ku*u  ->  (s(s-a) + b^2 - a*(s-a))*x1  = ku*(s-a)*u
->  (s^2 - 2*a*s + a^2 + b^2)*x1 = ku*(s-a)*u
or
x1 = ku*(s-a)/(s^2 - 2*a*s + a^2 + b^2)*u
x2 = b/(s-a)*ku*(s-a)/(s^2 - 2*a*s + a^2 + b^2)*u
= b*ku/(s^2 - 2*a*s + a^2 + b^2)*u
y  = k1*x1 + k2*x2
= (k1*ku*(s-a) + k2*b*ku) / (s^2 - 2*a*s + a^2 + b^2)*u
= (k1*ku*s + k2*b*ku - k1*ku*a) / (s^2 - 2*a*s + a^2 + b^2)*u
= (cn*s + cn*a - cn*a) / (s^2 - 2*a*s + a^2 + b^2)*u
= cn*s / (s^2 - 2*a*s + a^2 + b^2)*u

comparing coefficients with
y = cn*s / (s^2 + c1*s + c0)*u  ->  a = -c1/2
b = sqrt(c0 - a^2)

comparing with eigenvalue representation:
(s - (a+jb))*(s - (a-jb)) = s^2 -2*a*s + a^2 + b^2
shows that:
a: real part of eigenvalue
b: imaginary part of eigenvalue
```

# Syntax

(a, b, ku, k1, k2) = bandPass(cr_in, c0_in, c1_in, f_min, f_max)

# Inputs (5)

cr_in Type: Real[:] Description: Coefficients of real poles of base filter Type: Real[:] Description: Coefficients of s^0 term of base filter if conjugate complex pole Type: Real[size(c0_in, 1)] Description: Coefficients of s^1 term of base filter if conjugate complex pole Type: Frequency (Hz) Description: Band of band pass filter is f_min (A=-3db) .. f_max (A=-3db) Type: Frequency (Hz) Description: Upper band frequency

# Outputs (5)

a Type: Real[size(cr_in, 1) + 2 * size(c0_in, 1)] Description: Real parts of complex conjugate eigenvalues Type: Real[size(cr_in, 1) + 2 * size(c0_in, 1)] Description: Imaginary parts of complex conjugate eigenvalues Type: Real[size(cr_in, 1) + 2 * size(c0_in, 1)] Description: Gains of input terms Type: Real[size(cr_in, 1) + 2 * size(c0_in, 1)] Description: Gains of y = k1*x1 + k2*x Type: Real[size(cr_in, 1) + 2 * size(c0_in, 1)] Description: Gains of y = k1*x1 + k2*x