Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

DZone's Guide to

# Computing Convolution using Numpy's Kaiser Windows

· Web Dev Zone ·
Free Resource

Comment (0)

Save
{{ articles[0].views | formatCount}} Views

Jumpstart your Angular applications with Indigo.Design, a unified platform for visual design, UX prototyping, code generation, and app development.

A convolution is a way to combine two sequences, x and w, to get a third sequence, y, that is a filtered version of x. The convolution of the sample x t is computed as follows:

It is the mean of the weighted summation over a window of length k and w t are the weights. Usually, the sequence w is generated using a window function. Numpy has a number of window functions already implemented: bartlett, blackman, hamming, hanning and kaiser. So, let's plot some Kaiser windows varying the parameter beta:

```import numpy
import pylab

beta = [2,4,16,32]

pylab.figure()
for b in beta:
w = numpy.kaiser(101,b)
pylab.plot(range(len(w)),w,label="beta = "+str(b))
pylab.xlabel('n')
pylab.ylabel('W_K')
pylab.legend()
pylab.show()```

The graph would appear as follows:

And now, we can use the function convolve(...) to compute the convolution between a vector x and one of the Kaiser window we have seen above:

```def smooth(x,beta):
""" kaiser window smoothing """
window_len=11
# extending the data at beginning and at the end
# to apply the window at the borders
s = numpy.r_[x[window_len-1:0:-1],x,x[-1:-window_len:-1]]
w = numpy.kaiser(window_len,beta)
y = numpy.convolve(w/w.sum(),s,mode='valid')
return y[5:len(y)-5]```

Let's test it on a random sequence:

```# random data generation
y = numpy.random.random(100)*100
for i in range(100):
y[i]=y[i]+i**((150-i)/80.0) # modifies the trend

# smoothing the data
pylab.figure(1)
pylab.plot(y,'-k',label="original signal",alpha=.3)
for b in beta:
yy = smooth(y,b)
pylab.plot(yy,label="filtered (beta = "+str(b)+")")
pylab.legend()
pylab.show()```

The program would have an output similar to the following:

As we can see, the original sequence have been smoothed by the windows.

Source: http://glowingpython.blogspot.com/2012/02/convolution-with-numpy.html

Take a look at the Indigo.Design sample applications to learn more about how apps are created with design to code software.

Topics:

Comment (0)

Save
{{ articles[0].views | formatCount}} Views

Opinions expressed by DZone contributors are their own.

### {{ parent.tldr }}

{{ parent.urlSource.name }}