# Using Python to design FIR filter Scientific calculation in python is easy and effective. With matplotlib and numpy, we have some powerful tools to visualize and calculate.

In this example python and pylab (which includes matplotlib and numpy) is used to calculate coefficients for a FIR filter and afterwards the results are plotted.

To design the filter the window method is used. In our example we design a typ 1 filter. So first we calculate our coefficients with the approach that we want to get an ideal rectangle in the frequency domain. This rectangle transformed into the time domain is the sinc function. See formula 1. Now we sample this function for the number of tabs with our sample frequency to get our coefficients. The calculation in the code is separated in a function, which returns x and y values for the time plot.

(1) Now we add a hamming window to smooth the time domain. And get less overshoot in the frequency domain.

To get the frequency domain we do a fft and show the result in a subplot.

 Source code   #Author: Tobias Markus
import pylab as p

def calcCoef(fg,fs,tabs):
x = p.linspace(-(tabs-1)/2.0,(tabs-1)/2.0,tabs)*2.0/p.double(fs)
y = p.sinc(p.double(fg)*p.double(x))
y = y/sum(y)
return x,y

# parameters for the FIR filter
fg = 1500
fs = 10000
tabs = 101

# get x and y values of the time domain
x = calcCoef(fg,fs,tabs)
y = calcCoef(fg,fs,tabs)

y = y*p.hamming(tabs)

# calculate frequency domain
y_fft = abs(p.fft(y,fs))[0:fs/2.0]

# setting up the plots
p.subplot(2,1,1)
p.plot(x,y,"b*")
p.ylabel("amplitude")
p.xlabel("time in s")
p.title("time domain")

p.subplot(2,1,2)
p.semilogy(y_fft,"b")
p.ylabel("magnitude in dB")
p.xlabel("frequency in Hz")
p.title("frequency domain")

p.show()