What is the best way to design a band pass filter in the continues domain using modelling toolkit?
Some hints how to do it in Python: Butterworth Bandpass — SciPy Cookbook documentation

Update: OK, I can design a filter with DSP.jl: Filters - filter design and filtering · DSP.jl

But how would I convert such a filter for use with modeling toolkit?

You can `@symbolic_register`

the calls

But a simple second degree band pass filter is just a few differential equations… Why not keep it as symbolic linear equations in modelingtoolkit?

You can design the filter using DSP.jl, convert it to a transfer function from ControlSystemsBase, convert that to a statespace system and then use ControlSystemsMTK to convert that to an ODE system. Make sure to perform balancing on the statespace system using `balance_statespace`

before converting it to an ODESystem.

Here’s an unfinished PR that adds an interface between DSP and ControlSystems

`JuliaControl:dev`

← `JuliaControl:dsp`

opened 06:45AM - 13 May 21 UTC

2 Likes

It would probably be worth adding to the standard library if someone’s up for it.

1 Like

Before doing analog filter design with DSP, beware of analogfilter design seems to be broken · Issue #341 · JuliaDSP/DSP.jl · GitHub
TLDR; analog filter design is quite broken in DSP but the problem can be worked around.

Having said that, here’s how you can convert a filter to an MTK system with the PR #843

```
using DSP, ControlSystemsBase
# Digital filter
fs = 100
df = digitalfilter(Bandpass(5, 10; fs), Butterworth(2))
G = tf(df, 1/fs)
bodeplot(G, xscale=:identity, yscale=:identity, hz=true)
# Analog filter
af = analogfilter(Bandpass(0.05, 0.30), Butterworth(2))
G = tf(af)
bodeplot(G, xscale=:identity, yscale=:identity, hz=true)
# Convert to statespace for simulation with MTK
sys = ss(G) # This performs numerical scaling automatically
using ControlSystemsMTK
odesys = ODESystem(sys; name=:filter)
```

The resulting `odesys`

will have connectors `input::RealInput`

and `output::RealOutput`

from ModelingToolkitStandardLibrary.

2 Likes