Comparing FIR1 bultiin function for generating coefficients with my Function.

1 view (last 30 days)
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']
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,

Accepted Answer

Kaashyap Pappu
Kaashyap Pappu 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.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!