This package contains basic continuous input/output blocks.
Copyright © 1999-2002, Modelica Association and DLR.
This package is free software; it can be redistributed and/or modified under the terms of the Modelica license, see the license conditions and the accompanying disclaimer in the documentation of package Modelica in file "Modelica/package.mo".
This block defines the transfer function between the input u=inPort.signal[1] and the output y=outPort.signal[1] as an n-th order low pass filter with Butterworth characteristics and cut-off frequency f. It is implemented as a series of second order filters and a first order filter.
If transients at the simulation start shall be avoided the states x1 and xr need to be initialized with the start value of the input signal and the states x2 need to be initialized with zeros.
y = PT21*PT22*...*PT2(n/2)*PT1 u
Release Notes:
Name | Default | Description |
---|---|---|
n | 2 | Order of filter |
f | 1 | Cut-off frequency [Hz] |
block ButterLow "Output the input signal filtered with a low pass Butterworth filter of any order" import Modelica.Math.*; extends Modelica.Blocks.Interfaces.SISO; parameter Integer n(min=1) = 2 "Order of filter"; parameter SI.Frequency f=1 "Cut-off frequency"; output Real x1[m] "states 1 of second order filters (der(x1) = x2)"; output Real x2[m] "states 2 of second order filters"; output Real xr "state of real pole for uneven order otherwise dummy"; protected Real z[m + 1]; Real polereal[m]; Real poleimag[m]; Real realpol; Real k2[m]; Real D[m]; Real w0[m]; Real k1; Real T; constant Real pi=Modelica.Constants.pi; parameter Integer m=integer(n/2); parameter Real w=2*pi*f; equation k2 = ones(m); k1 = 1; z[1] = u; // calculate filter parameters for i in 1:m loop // poles of prototype lowpass polereal[i] = cos(pi/2 + pi/n*(i - 0.5)); poleimag[i] = sin(pi/2 + pi/n*(i - 0.5)); // scaling and calculation of secon order filter coefficients w0[i] = (polereal[i]^2 + poleimag[i]^2)*w; D[i] = -polereal[i]/w0[i]*w; end for; realpol = 1*w; T = 1/realpol; // calculate second order filters for i in 1:m loop der(x1[i]) = x2[i]; der(x2[i]) = k2[i]*w0[i]^2*z[i] - 2*D[i]*w0[i]*x2[i] - w0[i]^2*x1[i]; z[i + 1] = x1[i]; end for; // calculate first order filter if necessary if 2*m == n then // even order xr = 0; y = z[m + 1]; else // uneven order der(xr) = (k1*z[m + 1] - xr)/T; y = xr; end if; end ButterLow;
This block defines the transfer function between the input u=inPort.signal[1] and the output y=outPort.signal[1] as an n-th order filter with critical damping characteristics and cut-off frequency f=1/T. It is implemented as a series of first order filters.
If transients at the simulation start shall be avoided the states x need to be initialized with the start value of the input.
k y = ------------- * u (T * s + 1)^n
Release Notes:
Name | Default | Description |
---|---|---|
n | 2 | Order of filter |
f | 1 | Cut-off frequency [Hz] |
block CritDamping "Output the input signal filtered with an n-th order filter with critical damping" extends Modelica.Blocks.Interfaces.SISO; parameter Integer n=2 "Order of filter"; parameter SI.Frequency f=1 "Cut-off frequency"; output Real x[n + 1]; protected constant Real pi=Modelica.Constants.pi; parameter Real w=2*pi*f; equation x[1] = u; for i in 2:n + 1 loop der(x[i]) = (x[i - 1] - x[i])*w/(2*pi); end for; y = x[n + 1]; end CritDamping;