In [2]:
%pylab --no-import-all inline
import matplotlib.pyplot as plt

from scikits.talkbox import lpc, segment_axis, lpcres, slfilter
from scipy.io import wavfile
from scipy.signal import lfilter, cwt, ricker
from pylab import specgram
from pywt import wavedec, Wavelet
Populating the interactive namespace from numpy and matplotlib
In [3]:
# Load a test speech file (this one was downloaded from http://freesound.org/people/kenders2000/sounds/175234/)
(fs, s) = wavfile.read('test16k.wav')
In [4]:
plt.plot(s)
Out[4]:
[<matplotlib.lines.Line2D at 0x3234710>]
In [52]:
# Plot 200 time samples
plt.stem(s[16000:16250])
Out[52]:
<Container object of 3 artists>
In [6]:
framelen=int(20e-3*fs)
specgram(s,NFFT=framelen, Fs=fs, noverlap=framelen/2)
Out[6]:
(array([[  3.30201367e-06,   9.18928144e-06,   3.14102310e-08, ...,
           4.24189229e-03,   4.34209426e-04,   1.52872759e-04],
        [  6.69750584e-06,   3.22731931e-05,   2.78532979e-05, ...,
           3.59938235e-02,   1.86911733e-02,   1.75584561e-03],
        [  2.25436683e-06,   4.90477746e-05,   1.86466271e-05, ...,
           1.17649547e-02,   3.60841656e-02,   2.74099922e-03],
        ..., 
        [  2.16373606e-05,   8.76865656e-05,   1.39569527e-05, ...,
           1.27055110e-04,   4.00769755e-06,   7.27515294e-06],
        [  3.11366160e-05,   6.11904946e-05,   2.68151916e-06, ...,
           1.06152112e-04,   3.74404656e-05,   2.62570491e-05],
        [  4.42568862e-06,   2.48328217e-05,   1.43627794e-07, ...,
           1.62956419e-05,   3.97694616e-05,   4.79740256e-08]]),
 array([    0.,    50.,   100.,   150.,   200.,   250.,   300.,   350.,
          400.,   450.,   500.,   550.,   600.,   650.,   700.,   750.,
          800.,   850.,   900.,   950.,  1000.,  1050.,  1100.,  1150.,
         1200.,  1250.,  1300.,  1350.,  1400.,  1450.,  1500.,  1550.,
         1600.,  1650.,  1700.,  1750.,  1800.,  1850.,  1900.,  1950.,
         2000.,  2050.,  2100.,  2150.,  2200.,  2250.,  2300.,  2350.,
         2400.,  2450.,  2500.,  2550.,  2600.,  2650.,  2700.,  2750.,
         2800.,  2850.,  2900.,  2950.,  3000.,  3050.,  3100.,  3150.,
         3200.,  3250.,  3300.,  3350.,  3400.,  3450.,  3500.,  3550.,
         3600.,  3650.,  3700.,  3750.,  3800.,  3850.,  3900.,  3950.,
         4000.,  4050.,  4100.,  4150.,  4200.,  4250.,  4300.,  4350.,
         4400.,  4450.,  4500.,  4550.,  4600.,  4650.,  4700.,  4750.,
         4800.,  4850.,  4900.,  4950.,  5000.,  5050.,  5100.,  5150.,
         5200.,  5250.,  5300.,  5350.,  5400.,  5450.,  5500.,  5550.,
         5600.,  5650.,  5700.,  5750.,  5800.,  5850.,  5900.,  5950.,
         6000.,  6050.,  6100.,  6150.,  6200.,  6250.,  6300.,  6350.,
         6400.,  6450.,  6500.,  6550.,  6600.,  6650.,  6700.,  6750.,
         6800.,  6850.,  6900.,  6950.,  7000.,  7050.,  7100.,  7150.,
         7200.,  7250.,  7300.,  7350.,  7400.,  7450.,  7500.,  7550.,
         7600.,  7650.,  7700.,  7750.,  7800.,  7850.,  7900.,  7950.,
         8000.]),
 array([ 0.01,  0.02,  0.03,  0.04,  0.05,  0.06,  0.07,  0.08,  0.09,
         0.1 ,  0.11,  0.12,  0.13,  0.14,  0.15,  0.16,  0.17,  0.18,
         0.19,  0.2 ,  0.21,  0.22,  0.23,  0.24,  0.25,  0.26,  0.27,
         0.28,  0.29,  0.3 ,  0.31,  0.32,  0.33,  0.34,  0.35,  0.36,
         0.37,  0.38,  0.39,  0.4 ,  0.41,  0.42,  0.43,  0.44,  0.45,
         0.46,  0.47,  0.48,  0.49,  0.5 ,  0.51,  0.52,  0.53,  0.54,
         0.55,  0.56,  0.57,  0.58,  0.59,  0.6 ,  0.61,  0.62,  0.63,
         0.64,  0.65,  0.66,  0.67,  0.68,  0.69,  0.7 ,  0.71,  0.72,
         0.73,  0.74,  0.75,  0.76,  0.77,  0.78,  0.79,  0.8 ,  0.81,
         0.82,  0.83,  0.84,  0.85,  0.86,  0.87,  0.88,  0.89,  0.9 ,
         0.91,  0.92,  0.93,  0.94,  0.95,  0.96,  0.97,  0.98,  0.99,
         1.  ,  1.01,  1.02,  1.03,  1.04,  1.05,  1.06,  1.07,  1.08,
         1.09,  1.1 ,  1.11,  1.12,  1.13,  1.14,  1.15,  1.16,  1.17,
         1.18,  1.19,  1.2 ,  1.21,  1.22,  1.23,  1.24,  1.25,  1.26,
         1.27,  1.28,  1.29,  1.3 ,  1.31,  1.32,  1.33,  1.34,  1.35,
         1.36,  1.37,  1.38,  1.39,  1.4 ,  1.41,  1.42,  1.43,  1.44,
         1.45,  1.46,  1.47,  1.48,  1.49,  1.5 ,  1.51,  1.52,  1.53,
         1.54,  1.55,  1.56,  1.57,  1.58,  1.59,  1.6 ,  1.61,  1.62,
         1.63,  1.64,  1.65,  1.66,  1.67,  1.68,  1.69,  1.7 ,  1.71,
         1.72,  1.73,  1.74,  1.75,  1.76,  1.77,  1.78,  1.79,  1.8 ,
         1.81,  1.82,  1.83,  1.84,  1.85,  1.86,  1.87,  1.88,  1.89,
         1.9 ,  1.91,  1.92,  1.93,  1.94,  1.95,  1.96,  1.97,  1.98,
         1.99,  2.  ,  2.01,  2.02,  2.03,  2.04,  2.05,  2.06,  2.07,
         2.08,  2.09,  2.1 ,  2.11,  2.12,  2.13,  2.14,  2.15,  2.16,
         2.17,  2.18,  2.19,  2.2 ,  2.21,  2.22,  2.23,  2.24,  2.25,
         2.26,  2.27,  2.28,  2.29,  2.3 ,  2.31,  2.32,  2.33,  2.34,
         2.35,  2.36,  2.37,  2.38,  2.39,  2.4 ,  2.41,  2.42,  2.43,
         2.44,  2.45,  2.46,  2.47,  2.48,  2.49,  2.5 ,  2.51,  2.52,
         2.53,  2.54,  2.55,  2.56,  2.57,  2.58,  2.59,  2.6 ,  2.61,
         2.62,  2.63,  2.64,  2.65,  2.66,  2.67,  2.68,  2.69,  2.7 ,
         2.71,  2.72,  2.73,  2.74,  2.75,  2.76,  2.77,  2.78,  2.79,
         2.8 ,  2.81,  2.82,  2.83,  2.84,  2.85,  2.86,  2.87,  2.88,
         2.89,  2.9 ,  2.91,  2.92,  2.93,  2.94,  2.95,  2.96,  2.97,
         2.98,  2.99,  3.  ,  3.01,  3.02,  3.03,  3.04,  3.05,  3.06,
         3.07,  3.08,  3.09,  3.1 ,  3.11,  3.12,  3.13,  3.14,  3.15,
         3.16,  3.17,  3.18,  3.19,  3.2 ,  3.21,  3.22,  3.23,  3.24,
         3.25,  3.26,  3.27,  3.28,  3.29,  3.3 ,  3.31,  3.32,  3.33,
         3.34,  3.35,  3.36,  3.37,  3.38,  3.39,  3.4 ,  3.41,  3.42,
         3.43,  3.44,  3.45,  3.46,  3.47,  3.48,  3.49,  3.5 ,  3.51,
         3.52,  3.53,  3.54,  3.55,  3.56,  3.57,  3.58,  3.59,  3.6 ,
         3.61,  3.62,  3.63,  3.64,  3.65,  3.66,  3.67,  3.68,  3.69,
         3.7 ,  3.71,  3.72,  3.73,  3.74,  3.75,  3.76,  3.77,  3.78,
         3.79,  3.8 ,  3.81,  3.82,  3.83,  3.84,  3.85,  3.86,  3.87,
         3.88,  3.89,  3.9 ,  3.91,  3.92,  3.93,  3.94,  3.95,  3.96,
         3.97,  3.98,  3.99,  4.  ,  4.01,  4.02,  4.03,  4.04,  4.05,
         4.06,  4.07,  4.08,  4.09,  4.1 ,  4.11,  4.12,  4.13,  4.14,
         4.15,  4.16,  4.17,  4.18,  4.19,  4.2 ,  4.21,  4.22,  4.23,
         4.24,  4.25,  4.26,  4.27]),
 <matplotlib.image.AxesImage at 0x17f8ed0>)
In [7]:
# Segment the input vector into non-overlapping frames of 20 ms
X = segment_axis(s, framelen)
In [8]:
# Compute the 10th order LPC coefficients (a), the total residual (e), and the reflection coefficients (k) for each frame
(a, e, k) = lpc(X, 20)
# Compute the LPC residual vectors
res = lpcres(X,20)
# Resynthesize first frame
y = lfilter([1.0], a[100], res[100])
In [9]:
plt.subplot(211)
plt.plot(X[100],'b',y,'rx')
plt.subplot(212)
plt.plot((y - X[100])**2)
Out[9]:
[<matplotlib.lines.Line2D at 0x401cb90>]
In [10]:
# Resynthesize the whole file
Y = slfilter(np.ones((len(a),1)),a,X)
yall = np.concatenate(Y)
In [11]:
from audiodisplay import Audio
Audio(data=s, rate=fs)
Out[11]:
In [12]:
Audio(data=(yall/max(abs(yall))*2**15).astype(np.int16), rate=fs)
Out[12]:
In [13]:
plt.plot(np.concatenate(res))
Out[13]:
[<matplotlib.lines.Line2D at 0x429f350>]
In [27]:
# Plotting some Daubechies wavelet functions with different widths
wavelet = Wavelet('db2')

for i in range(5):
    phi, psi, x = wavelet.wavefun(level=i+1)
    plt.subplot(5,2,2*i)
    plt.plot(phi)
    plt.subplot(5,2,2*i+1)
    plt.plot(psi)
In [32]:
# 3 level decomposition of the speech signal
coeffs = wavedec(s, 'db2', level=3)

for i in range(len(coeffs)):
    plt.subplot(len(coeffs),1,i)
    plt.plot(coeffs[i])
In [44]:
Audio(coeffs[3].astype(np.int16), rate=fs/2)
Out[44]:
In [45]:
Audio(coeffs[2].astype(np.int16), rate=fs/4)
Out[45]:
In [46]:
Audio(coeffs[1].astype(np.int16), rate=fs/8)
Out[46]:
In [48]:
Audio(coeffs[0].astype(np.int16), rate=fs/8)
Out[48]:
In [ ]: