Esempio n. 1
0
import sys
import math

sys.path.append('../../../software/models/')

import waveIO as WIO
import dftAnal as DF

(fs, x) = WIO.wavread('../../../sounds/violin-B3.wav')
w = np.hamming(1024)
N = 1024
pin = 5000
hM1 = int(math.floor((w.size+1)/2)) 
hM2 = int(math.floor(w.size/2))  
x1 = x[pin-hM1:pin+hM2]
mX, pX = DF.dftAnal(x1, w, N)

plt.figure(1, figsize=(9.5, 5))
plt.subplot(311)
plt.plot(np.arange(-hM1, hM2), x1, lw=1.5)
plt.axis([-hM1, hM2, min(x1), max(x1)])
plt.ylabel('amplitude')
plt.title('x (violin-B3.wav)')

plt.subplot(3,1,2)
plt.plot(np.arange(N/2), mX, 'r', lw=1.5)
plt.axis([0,N/2,-90,max(mX)])
plt.title ('magnitude spectrum: mX = 20*log10(abs(X))')
plt.ylabel('amplitude (dB)')

plt.subplot(3,1,3)
Esempio n. 2
0
import sys
import math

sys.path.append('../../../software/models/')

import waveIO as WIO
import dftAnal as DF

(fs, x) = WIO.wavread('../../../sounds/violin-B3.wav')
w = np.hamming(1024)
N = 1024
pin = 5000
hM1 = int(math.floor((w.size + 1) / 2))
hM2 = int(math.floor(w.size / 2))
x1 = x[pin - hM1:pin + hM2]
mX, pX = DF.dftAnal(x1, w, N)

plt.figure(1, figsize=(9.5, 5))
plt.subplot(311)
plt.plot(np.arange(-hM1, hM2), x1, lw=1.5)
plt.axis([-hM1, hM2, min(x1), max(x1)])
plt.ylabel('amplitude')
plt.title('x (violin-B3.wav)')

plt.subplot(3, 1, 2)
plt.plot(np.arange(N / 2), mX, 'r', lw=1.5)
plt.axis([0, N / 2, -90, max(mX)])
plt.title('magnitude spectrum: mX = 20*log10(abs(X))')
plt.ylabel('amplitude (dB)')

plt.subplot(3, 1, 3)
Esempio n. 3
0
import matplotlib.pyplot as plt
import numpy as np
import sys

sys.path.append('../../software/basicFunctions/')
sys.path.append('../../software/models/')

import dftAnal, dftSynth
import math

k0 = 8.5
N = 64
w = np.ones(N)
x = np.cos(2 * np.pi * k0 / N * np.arange(-N / 2, N / 2))
mX, pX = dftAnal.dftAnal(x, w, N)
y = dftSynth.dftSynth(mX, pX, N)

plt.figure(1, figsize=(9.5, 5))
plt.subplot(311)
plt.title('positive freq. magnitude spectrum in dB: mX')
plt.plot(np.arange(0, N / 2), mX, 'r', lw=1.5)
plt.axis([0, N / 2, min(mX), max(mX) + 1])

plt.subplot(312)
plt.title('positive freq. phase spectrum: pX')
plt.plot(np.arange(0, N / 2), pX, 'c', lw=1.5)
plt.axis([0, N / 2, -np.pi, np.pi])

plt.subplot(313)
plt.title('inverse spectrum: IDFT(X)')
plt.plot(np.arange(-N / 2, N / 2), y, 'b', lw=1.5)
Esempio n. 4
0
  f0index = np.argmin(Error)                       # get the smallest error
  f0 = f0c[f0index]                                # f0 with the smallest error

  return f0, ErrorPM, ErrorMP, Error

(fs, x) = WIO.wavread('../../../sounds/piano.wav')
start = .3*fs
N = 2048
hN = N/2
M = 1501
t = -70
minf0 = 50
maxf0 = 800
w = blackman (M)
x1 = x[start:start+M]
mX, pX = dftAnal.dftAnal(x1, w, N)          
ploc = PP.peakDetection(mX, hN, t)    
iploc, ipmag, ipphase = PP.peakInterp(mX, pX, ploc) 
ipfreq = fs * iploc/N
f0cand = np.arange(minf0, maxf0, 1.0)
maxnpeaks = 10
f0, ErrorPM, ErrorMP, Error = TWM (ipfreq, ipmag, maxnpeaks, f0cand)
freqaxis = fs*np.arange(N/2)/float(N)

plt.figure(1)
plt.subplot (2,1,1)
plt.plot(freqaxis,mX,'r')
plt.axis([100,5000,-90,max(mX)+1])
plt.plot(fs * iploc / N, ipmag, marker='x', color='b', linestyle='') 
plt.title('Magnitude spectrum + peaks (piano.wav)')   
Esempio n. 5
0
  Y = np.zeros(N, dtype = complex)
  Y[:hN] = 10**(mY/20) * np.exp(1j*pY)                   # generate positive freq.
  Y[hN+1:] = 10**(mY[:0:-1]/20) * np.exp(-1j*pY[:0:-1])  # generate negative freq.
  fftbuffer = np.real( ifft(Y) )                         # inverse FFT
  y = fftbuffer*N/2                                  
  return mX, pX, mY, pY, y
    
    
# example call of stochasticModel function
if __name__ == '__main__':
  (fs, x) = WIO.wavread('../../../sounds/ocean.wav')
  w = np.hanning(512)
  N = 512
  stocf = .1
  envSize = (N * stocf) // 2
  maxFreq = 10000.0
  lastbin = N*maxFreq/fs
  first = 4000
  last = first+w.size
  mX, pX = dftAnal.dftAnal(x[first:last], w, N)
  mXenv = resample(np.maximum(-200, mX), envSize)
  mY = resample(mXenv, N/2)
  plt.figure(1)
  plt.plot(float(fs)*np.arange(0, N/2)/N, mX, 'r', label=r'$a$')
  plt.plot(float(fs/2.0)*np.arange(0, envSize)/envSize, mXenv, color='k', label=r'$\tilde a$')
  plt.plot(float(fs)*np.arange(0, N/2)/N, mY, 'g', label=r'$b$')
  plt.legend()
  plt.axis([0, maxFreq, -80, max(mX)+3])
  plt.title('envelope approximation')
  plt.show()
Esempio n. 6
0
import matplotlib.pyplot as plt
import numpy as np
import sys

sys.path.append('../../software/basicFunctions/')
sys.path.append('../../software/models/')

import dftAnal, dftSynth
import math

k0 = 8.5
N = 64
w = np.ones(N)
x = np.cos(2*np.pi*k0/N*np.arange(-N/2,N/2))
mX, pX = dftAnal.dftAnal(x, w, N)
y = dftSynth.dftSynth(mX, pX, N)

plt.figure(1, figsize=(9.5, 5))
plt.subplot(311)
plt.title('positive freq. magnitude spectrum in dB: mX')
plt.plot(np.arange(0, N/2), mX, 'r', lw=1.5)
plt.axis([0,N/2,min(mX),max(mX)+1])

plt.subplot(312)
plt.title('positive freq. phase spectrum: pX')
plt.plot(np.arange(0, N/2), pX, 'c', lw=1.5)
plt.axis([0,N/2,-np.pi,np.pi])

plt.subplot(313)
plt.title('inverse spectrum: IDFT(X)')
plt.plot(np.arange(-N/2, N/2), y,'b', lw=1.5)