# Trying to plot frequency response of a filter Transfer Function in MATLAB, it looks wrong

I have the transfer function below which is for a IIR filter and trying to plot its frequency response for omega<pi. r=0.99 and theta=pi/3: Here is my attempt at implementing it in MATLAB:

N=5000;
W=(0:pi/(N-1):pi);
r1=0.99;
theta=pi/3;
z= exp(j*W);

num= (1-r1);
den= (1-2*r1*cos(theta)*z.^(-1)+r1^(2)*z.^(-2));
TF=num./den;
TFdb= 20*log10(TF);
plot(W,TFdb)


Here is what I get: Apparently it should look like this: I am very new to this and can't tell what I'm doing wrong, would appreciate if anyone can help.

How did you derive the second figure? I got the different result using the following code:

b = 1 - r1;
a = [1, -2*r1*cos(theta), r1^(2)];
figure; freqz(b, a)


The only problme I can find in your code is that

TFdb= 20*log10(TF);

should be

TFdb= 20*log10(abs(TF));

Did you take the wrong sign of $$a_1$$ when calculating second transfer function?

b = 1 - r1;
a = [1, 2*r1*cos(theta), r1^(2)];


The above code generates the second figure.

• Right the second one must be wrong then, that now gives me a notch filter using abs, what's the reason the response using freqz command looks so different ? The filtered frequency is 1.04 radian but that appears to be different in the freqz plot ? Thanks a lot for helping May 17, 2021 at 6:09
• Yes ! I did check that now and that's indeed the problem with the second plot, however I'm still confused about the first plot as mention in my above comment. May 17, 2021 at 6:14
• @BigRedMachine Note that the x axis in the freqz plot is normalized frequency, in my plot it's $0.334 \times \pi$ radian which is equal to 1.047 radian. May 17, 2021 at 6:17
• Oh ok, got it now, thanks a lot ! May 17, 2021 at 6:19