Hoping to find a quick answer to a question of frequency response of multiple band-pass filters in closed loop, I opened up Mathematica,and entered the first set of equations as follows

bandPassOL[omega_, k_] := Module[{a, b, c, d},
a = {{0, -omega}, {omega, 0}};
b = {{omega*k}, {0}}; 
c = {{1, 0}, {0, 1}};
d = {{0}, {0}};
StateSpaceModel[{a, b, c, d}]](*Module*)
sys1CL = SystemsModelFeedbackConnect[bandPassOL[omega1,k1],{1,1}]

Plotting frequency response with BodePlot

BodePlot[sys1CL /. {k1 -> 0.1, omega1 -> 2 Pi 500}, {10^0, 10^5},
GridLines -> Automatic, PlotLayout -> "Magnitude"]

gave the expected result, as shown in the figure below

enter image description here

So far so good. I was ready for the next step. Connect two such resonators, sum in-phase outputs and feed them back to the input with negative feedback

sys2OL = SystemsModelParallelConnect[bandPassOL[omega1, k1],
bandPassOL[omega2, k2], All, None]
sys2CL = SystemsModelFeedbackConnect[sys2OL, {{1, 1}, {3, 1}}]

Resulting in expected state-space model. Now starts troubling part. Trying to plot frequency response of the sys2CL, the function BodePlot started acting strangely. I started first with the following parameters {omega1->2*Pi*50,k1->1,omega2->2*Pi*500,k2->1}, which, again, gave the expected result.

BodePlot[sys2CL /. {omega1->2*Pi*50,k1->1,omega2->2*Pi*500,k2->1}, {10^2, 10^4},
GridLines -> Automatic, PlotLayout -> "Magnitude"]

enter image description here

Now, I changed parameters to {omega1->2*Pi*50,k1->.5,omega2->2*Pi*500,k2->1} which yielded with the following plot

BodePlot[sys2CL /. {omega1->2*Pi*50,k1->0.5,omega2->2*Pi*500,k2->1}, {10^2, 10^4},
GridLines -> Automatic, PlotLayout -> "Magnitude"]

enter image description here

Which gave me complete garbage. I tried several more combinations and each time one (or both) of parameters k1 and k2 were less than 1, the result was wrong.

I tried increasing number of points and RecursionLimit but without improvement. Any suggestions are welcome.

Finally, I have "11.2.0 for Microsoft Windows (64-bit) (September 11, 2017)"


I've installed MMA 10.2 (this was the only version besides 11.2 accessible to me) to try. I got the following result.

BodePlot[sys2CL /. {omega1->2*Pi*50,k1->0.5,omega2->2*Pi*500,k2->0.5}, {10^2, 10^4},
GridLines -> Automatic, PlotLayout -> "Magnitude"]

enter image description here

Basically, $\alpha_1$ and $\beta_1$ are expected to have gain of 0dB at the frequency $\omega_1$ (as in the second plot, for $k1=k2=1$). When I plot in Matlab I get the expected result.

Curiously enough, if I change parameters and plot the following

BodePlot[sys2CL /. {omega1->2*Pi*50,k1->0.05,omega2->2*Pi*500,k2->0.05}, {10^2, 10^4},
GridLines -> Automatic, PlotLayout -> "Magnitude"]

The following result is obtained

enter image description here

Expected Results

For $\alpha_1$ and $\beta_1$ 0dB gain is expected at frequency $\omega_1$ and infinite attenuation at angular frequency $\omega_2$. Similarly, for $\alpha_2$ and $\beta_2$ 0dB gain is expected at $\omega_2$ and infinite attenuation at $\omega_1$. Parameters $k_1$ and $k_2$ only affect selectivity of the transfer functions around the resonant points.

Clearly BodePlot is giving wrong result. I suspect it has to do something with number of initial points. However, I tried changing PlotPoints and MaxRecursion parameters without noticeable effect.

Update 2

It appears that the source of the problem is BodePlot function. The correct result is obtained if, instead of StateSpaceModel the TransferFunctionModel is submitted to the BodePlot function.

BodePlot[sys2CLTFM/. {omega1->2*Pi*50,k1->0.05,omega2->2*Pi*500,k2->0.05}, {10^2, 10^4},
        GridLines -> Automatic, PlotLayout -> "Magnitude"]

Giving the expected result.

enter image description here

Should this be considered a bug?

  • $\begingroup$ Hm. Interesting. Apparently, this problem does not arise in version 11.3 for macOS. Maybe it has already been fixed? $\endgroup$ – Henrik Schumacher Oct 1 '18 at 21:22
  • 2
    $\begingroup$ I checked on Mathematica 11.01, 11.3. Everything works correctly. The author does not provide a line of code that, in his opinion, gives an erroneous plot. $\endgroup$ – Alex Trounev Oct 2 '18 at 2:26
  • $\begingroup$ @AlexTrounev I updated the question. Thanks for pointing out missing elements. $\endgroup$ – ercegovac Oct 2 '18 at 8:19

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.