axel plinge pattern recognition, computer science xii, tu
TRANSCRIPT
Using Python for research and acoustic signal processing
Axel Plinge
Pattern Recognition, Computer Science XII,TU Dortmund University
October 2015
Bar-Ilan University
Axel Plinge Using Python for research and acoustic signalprocessing 1/15
Motivation (1)
Why use Python?
I it’s free
I cross platform (Windows, Linux, MacOS)I clear syntax
I code is easy to readI encapsulation of code in modules & packagesI alows for object oriented programing (OOP)
I powerful languageI functional programing: list comprehension, lambda, . . .I object oriented programingI iteration, slicing, . . .
I powerful libraries – maintained by PhDs :-)I vector and matrix operations (numpy)I MATLAB-like plotting (matplotlib)I probabilistic functions & models (scipy.stats)I machine learing (sklearn, . . . )I signal processing (scipy.signal)I . . .
Axel Plinge Using Python for research and acoustic signalprocessing 2/15
Contents
I MotivationI Installations
I WinPythonI Eclipse IDEI Audio
I LearningI Introductions & TutorialsI Documentation
I ExamplesI InteractiveI MatrixI FunctionsI ModuleI Audio PlaybackI Audio Loopback
Axel Plinge Using Python for research and acoustic signalprocessing 3/15
Motivation (2) Live Demo
live acoustic event detection with visualization coded in Python
Axel Plinge Using Python for research and acoustic signalprocessing 4/15
Installation: Python
I Python installation
+ pre-bulid scientific libraries
+ Qt GUI framework
Hints
1. Python 2.7 recommended, as still more libraries support 2.7 than 3.x
2. Download and unzip to Program Files/WinPython
3. Register using the control panel
Axel Plinge Using Python for research and acoustic signalprocessing 5/15
Installation: IDE
I Comfortable IDE
I Projects
I Debugging
I Version Control integration
Setup
1. Install Java Runtime (JRE) if necessary
2. Download and install Eclipse (current version is ‘Mars’)
3. Go to Help > Install new software and add http://pydev.org/updates
Axel Plinge Using Python for research and acoustic signalprocessing 6/15
Installation: Audio
/ Audio support from scipy is still rudimentary
, Several good projects exists..
Setup
1. open the WinPython console
2. pip install sounddevice --user
3. pip install pysoundfile --user
Axel Plinge Using Python for research and acoustic signalprocessing 7/15
Learning Python
Introductions
I Scipy Lectures introduction toI Python LanguageI Math with numpyI Plotting with matplotlibI Science with scipy
I Python for scientists
I MATLAB commands in Python
Tutorials
I The Python tutorial
I Quickstart numpy
I scipy tutorial
Axel Plinge Using Python for research and acoustic signalprocessing 8/15
Documentation
I Python 2.7
I numpy
I scipy
I matplotlib
Axel Plinge Using Python for research and acoustic signalprocessing 9/15
Interactive example>>> 1+12>>> import math>>> math.pi3.141592653589793>>> math.sin(math.pi/2.0)1.0>>> help(math)Help on built-in module math:
NAMEmath
FILE(built-in)
DESCRIPTIONThis module is always available. It provides access to themathematical functions defined by the C standard.
FUNCTIONSacos(...)
acos(x)Return the arc cosine (measured in radians) of x.
acosh(...)acosh(x)Return the inverse hyperbolic cosine of x.
Axel Plinge Using Python for research and acoustic signalprocessing 10/15
Matrix example
>>> import numpy as np>>> a=np.eye(3)>>> aarray([[ 1., 0., 0.],
[ 0., 1., 0.],[ 0., 0., 1.]])
>>> a[:,2]array([ 0., 0., 1.])>>> a[:,:2]array([[ 1., 0.],
[ 0., 1.],[ 0., 0.]])
>>> a[:2,:2]*5array([[ 5., 0.],
[ 0., 5.]])>>> b=np.array([[1,2,3]])>>> b.shape(1, 3)>>> a.shape(3, 3)>>> a*barray([[ 1., 0., 0.],
[ 0., 2., 0.],[ 0., 0., 3.]])
Axel Plinge Using Python for research and acoustic signalprocessing 11/15
Function example
>>> def doubleit(x):... return x*2...
>>> doubleit(5)10
>>> for i in range(3):... doubleit(i)...024
>>> [doubleit(i) for i in range(3)][0, 2, 4]
>>> a=[doubleit(i) for i in range(3)]>>> for ai in a:... doubleit(ai)...048
Axel Plinge Using Python for research and acoustic signalprocessing 12/15
Module example
A module is a file, it can contain variables, functions and classes
accumen.py’’’ variable is global within this module ’’’accumulator = 0
’’’ define function, global within this module ’’’def accum(x):
’’’ use the global variable ’’’global accumulator
accumulator += xprint accumulatorreturn accumulator
use it from another file or interpreterimport accumen as a
a.accum(1)print a.accumulator
Axel Plinge Using Python for research and acoustic signalprocessing 13/15
Playback example
import soundfileimport sounddevice as sd
data, fs = soundfile.read(’sentence.wav’)sd.play(data,fs)
Axel Plinge Using Python for research and acoustic signalprocessing 14/15
Loopback example
import numpy as npimport sounddevice as sdDURATION = 10 # secondsSAMPLERATE = 48000BLOCKSIZE = 4096
def callback(indata, outdata, frames, time, status):global theFilterif status:
print(status)filtered = theFilter.process(indata)outdata[:,1] = filteredoutdata[:,0] = filtered
ios = sd.Stream(samplerate=SAMPLERATE, channels=2, callback=callback,dtype=np.int16, blocksize=BLOCKSIZE)
ios.start()for i in xrange(10*DURATION):
sd.sleep(100)ios.stop()
Axel Plinge Using Python for research and acoustic signalprocessing 15/15
Overlapp-Add Filterimport numpy as npimport scipy
class OverlapAdd(object):def __init__(self,blocksize,gain):
self.blocksize= blocksizeself.gain = gainself.window = scipy.hanning(blocksize*2)self.lastin = np.zeros((blocksize),dtype=np.int16)self.overlap = np.zeros((blocksize),dtype=np.int16)self.lastout = np.zeros((blocksize),dtype=np.int16)self.inbuf = np.zeros((2*blocksize),dtype=np.int16)
def process(self,indata):self.inbuf[:self.blocksize] = self.lastinself.lastin = indata[:,0] * self.gainself.inbuf[self.blocksize:] = self.lastinself.inbuf = self.inbuf * self.windowself.filtered = scipy.fft(self.inbuf)self.filtered = self.stft_filter(self.filtered)self.filtered = scipy.real(scipy.ifft(self.filtered))self.filtered[:self.blocksize] += self.overlapself.overlap = self.filtered[self.blocksize:]self.lastout = self.filtered[:self.blocksize]return self.lastout