Bandwidth returns inf with discrete time transfer function
Show older comments
I am trying to find the 3dB frequency of discrete time transfer function using bandwidth but it returns inf. Here is the code:
alpha1=0.9;
ts = 0.1;
z = tf('z',ts);
H = ((1-alpha1)/2)*(1-z)/(1-alpha1*z);
fb = bandwidth(H,-3);
Am I doing anything conceptually wrong?
4 Comments
Mathieu NOE
on 30 Sep 2021
Hi
read the doc
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.
seems that this function cannot be used if you hae a high pass filter behaviour in your tf; because then the dc gain is 0 (-Inf in dB)
you have to write your own function for bandwith that overcomes this limitation
I recognize it's strange that this case is not dealed correctly in the native matlab function (shame on you TMW !)
all the best
Shivanshu Sahoo
on 30 Sep 2021
Mathieu NOE
on 30 Sep 2021
see the results of low pass vs high filters
bandwith works ok only for the low pass case
% high pass digital filter
alpha1=0.9;
ts = 0.1;
z = tf('z',ts);
H = ((1-alpha1)/2)*(1-z)/(1-alpha1*z);
figure(1),bode(H)
fb = bandwidth(H,-3);
% low pass analog filter
sys = tf(1,[1 1]);
fb = bandwidth(sys)
figure(2),bode(sys)
% high pass analog filter
sys = tf([1 0],[1 1]);
fb = bandwidth(sys)
figure(3),bode(sys)
Shivanshu Sahoo
on 30 Sep 2021
Accepted Answer
More Answers (0)
Categories
Find more on Digital Filter Analysis 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!