bandwidth returns inf on transfer function
Show older comments
I have a tf object
tf1 =
From input "u1" to output "y1":
0.3645 s + 0.0003711
--------------------------
s^2 + 0.3928 s + 0.0003717
which gives me a bandwidth(tf1) = 0.3353
When I use a different tf object of lower order, but with almost the same impulse response
tf2 =
From input "u1" to output "y1":
0.9236 s + 0.001036
-------------------
s + 0.001038
bandwidth(tf2) = Inf
Also, If I look at the bode plots of both transfer functions, I can see that the left one (tf1) shows the full frequency range, while the plot for tf2 right on the right "stops" at 10e-2.

I am wondering, what is the reason for that and does it have other implications besides "bandwidth" is not working?
Answers (1)
From the documentation —
‘fb = bandwidth(sys) returns the bandwidth of the SISO dynamic system model sys. The bandwidth is the first frequency where the gain drops below 70.79% (-3 dB) of its DC value.’
However it never gets to -3 dB. It is asymptotic at about -0.7 dB from about 0.1 to
. I suspect that is the problem.
s = tf('s');
tf2 = (0.9236*s + 0.001036) / (s + 0.001038)
win = logspace(-4,4,150);
figure
h = bodeplot(tf2,win);
opts = getoptions(h);
opts.Grid = 'on';
setoptions(h,opts)
.
2 Comments
Michael Budach
on 12 Aug 2021
Star Strider
on 12 Aug 2021
I am not certain of the reason it sets that limit (it chooses the limit based on the system characteristics, so it may set that on the basis of the system becoming asymptotic at about that frequency), however that can easily be overridden by providing the frequency vector as an additional argument, as my Answer demonstrates.
.
Categories
Find more on Dynamic System Models in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!