# 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 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 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 at 6:17
• Oh ok, got it now, thanks a lot ! May 17 at 6:19