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)
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)
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)
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)')
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()
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)