Comparing FIR1 bultiin function for generating coefficients with my Function.

Asked by Ahsen Noor Subhopoto

Ahsen Noor Subhopoto (view profile)

on 11 Jul 2019
Latest activity Commented on by Ahsen Noor Subhopoto

Ahsen Noor Subhopoto (view profile)

on 3 Aug 2019
Accepted Answer by Kaashyap Pappu

Kaashyap Pappu (view profile)

Hi, I am trying to create my own FIR1 by using Window functions but somehow I am not getting the exact results. I have shared the codes with corresponding outputs here;
%Window function is Rectangl, W(n) = 1;%
order = 10;
L = order + 1; %length of a Window
Tau = ceil((order-1)/2); % Tau = 5
Fc = 0.99 %for simplicity that is close to 1
%Builtin Function%
Rectangl = fir1(order,Fc,'low',rectwin(L));
%My function%
n = 0:1:order;
Hd_n = (sin((n-Tau)*Fc))./(pi*(n-Tau));
Hd_n(Tau+1) = Fc/pi;
[Hd_n' Rectangl']
%end
Output:
Both outputs are different. Like, Hd_n(1) = -0.0619, whereas Reactangl(1) = 0.0099.
Am I doing something wrong ? Your suggestions and debugging will be helpful for me.
Thank you,

Release

R2019a

Answer by Kaashyap Pappu

Kaashyap Pappu (view profile)

on 26 Jul 2019

The difference between the 2 filter coefficients arises for the following reasons:
1. fir1” normalizes the coefficients as described here . Adding another argument to function changes this: fir1(order,Fc,'low',rectwin(L),'noscale').
2. The Hd_n vector has coefficients can be corrected by changing (sin((n-Tau)*Fc)) to (sin(pi*(n-Tau)*Fc)). The lack of pi expands the area under curve.
3. Hd_n(Tau+1) = Fc corrects the magnitude at center frequency.

1 Comment

Ahsen Noor Subhopoto

Ahsen Noor Subhopoto (view profile)

on 3 Aug 2019
Thank you, it really solved the problem.