DC gain discrete-time transfer function error

5 ビュー (過去 30 日間)
Francesco Laezza
Francesco Laezza 2021 年 6 月 15 日
コメント済み: Francesco Laezza 2021 年 6 月 16 日
Hello everyone,
I'm trying to plot the trasfer function of a CIC filter and I think I'm getting an error in DC gain. The code I'm using is shown here:
M = 8; %Decimation factor
N = 1; %Order of the filter
fs = 25e6; %Sampling frequency
T = 1/fs; %Sampling period
z = tf('z',T);
gain = 1/(M);
num_tf = 1-z^(-M);
den_tf = 1-z^(-1);
tf_tf = (gain*num_tf/den_tf)^N;
figure(1)
plot_tf=bodeplot(tf_tf);
setoptions(plot_tf,'FreqUnits','Hz');
dcgain(tf_tf)
The printed bodeplot is:
that shows a DC gain grather than 1 while the line
dcgain(tf_tf)
gives 1 as result (which should be the right one). What am I doing wrong? Why am I finding thi misbehaviour og bodeplot function?
Thanks in advance

採用された回答

Paul
Paul 2021 年 6 月 15 日
編集済み: Paul 2021 年 6 月 15 日
I think the problem is just inaccuracy of the numerical computation of the freuqency response at very small frequencies. Keep in mind that tf_tf, as it's defined, would evaluate to 0/0 at z = exp(j*w) = 1 and that tf_tf as a pole/zero cancellation at z = 1. I don't think (don't know for sure) that bode() tries to deal with pole/zero cancellation. However, i think dcgain does try to deal with that, so it gives the expected answer. The desired, or expected, Bode plot can be obtained by using minreal() on tf_tf to remove the common pole and zero at z = 1
M = 8; %Decimation factor
N = 1; %Order of the filter
fs = 25e6; %Sampling frequency
T = 1/fs; %Sampling period
z = tf('z',T);
gain = 1/(M);
num_tf = 1-z^(-M);
den_tf = 1-z^(-1);
tf_tf = (gain*num_tf/den_tf)^N
tf_tf = 0.125 z^9 - 0.125 z ------------------- z^9 - z^8 Sample time: 4e-08 seconds Discrete-time transfer function.
mrtf_tf = minreal(tf_tf)
mrtf_tf = 0.125 z^7 + 0.125 z^6 + 0.125 z^5 + 0.125 z^4 + 0.125 z^3 + 0.125 z^2 + 0.125 z + 0.125 --------------------------------------------------------------------------------------- z^7 Sample time: 4e-08 seconds Discrete-time transfer function.
bode(tf_tf,mrtf_tf)
  1 件のコメント
Francesco Laezza
Francesco Laezza 2021 年 6 月 16 日
Thank you very much for your explanation

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangePlot Customization についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by