In [1]:
%matplotlib inline
import sys
sys.path.append('../../../../')
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf
import gpflow, gpitch
reload(gpitch)
from gpitch.amtgp import logistic
from scipy.fftpack import fft, ifft, ifftshift
from scipy import signal
import time
from gpitch import myplots
import soundfile
import pickle
plt.rcParams['figure.figsize'] = (16, 3) # set plot size
In [2]:
m_60 = pickle.load(open("save_model_rwc_pitch_60.p", "rb"))
m_64 = pickle.load(open("save_model_rwc_pitch_64.p", "rb"))
m_67 = pickle.load(open("save_model_rwc_pitch_67.p", "rb"))
models = [m_60, m_64, m_67]
Load and plot data.
In [3]:
plt.figure(figsize=(16, 9))
plt.title('data')
for i in range(3):
plt.subplot(3, 1, i+1)
plt.plot(models[i].x.value, models[i].y.value, lw=2)
In [4]:
fs = 16000.
for i in range(3):
x = models[i].x.value.copy()
y = models[i].y.value.copy()
z = models[i].z.value.copy()
N = y.size
mean_f, var_f, mean_g, var_g, x_plot = models[i].predict_all(x)
myplots.plot_results(mean_f, var_f, mean_g, var_g, x_plot, y, z, xlim=[0.0, 0.5])
In [5]:
xkernel = np.linspace(0, 10, 10.*fs).reshape(-1, 1)
F = np.linspace(0, fs//2, N//2).reshape(-1, 1)
plt.figure(1)
plt.figure(2)
plt.figure(3, figsize=(16, 6))
for i in range(3):
plt.figure(1)
plt.plot(-np.array(models[i].logf))
plt.xlabel('iteration')
plt.ylabel('ELBO')
plt.figure(2)
k_plot_model = models[i].kern_com.compute_K(xkernel, np.asarray(0.).reshape(-1,1))
plt.plot(xkernel, k_plot_model, lw=2)
k_plot_model = models[i].kern_com.compute_K(x, np.asarray(0.).reshape(-1,1))
Yk1 = fft(k_plot_model.reshape(-1,)) # FFT data
Sk1 = 2./N * np.abs(Yk1[0:N//2]) # spectral density data
S = np.abs(fft(models[i].y.value.reshape(-1,))[:N//2])
plt.figure()
plt.plot(F, S / np.max(np.abs(S)), lw=2)
plt.plot(F, Sk1 / np.max(np.abs(Sk1)), lw=2)
plt.legend([' Spectral density learned component kernel'])
plt.xlabel('Frequency (Hz)')
plt.xlim([0, 8000])
In [6]:
import tensorflow as tf
kern_com_60 = models[0].kern_com
kern_com_64 = models[1].kern_com
kern_com_67 = models[2].kern_com
kern_act_60 = models[0].kern_act
kern_act_64 = models[1].kern_act
kern_act_67 = models[2].kern_act
kern_com_60.fixed = True
kern_com_64.fixed = True
kern_com_67.fixed = True
In [7]:
print ('The ideal natural frequency is ' + str(gpitch.amtgp.midi2frec(60)))
In [8]:
kern_com_60
Out[8]:
In [9]:
print ('The ideal natural frequency is ' + str(gpitch.amtgp.midi2frec(64)))
In [10]:
kern_com_64
Out[10]:
In [11]:
print ('The ideal natural frequency is ' + str(gpitch.amtgp.midi2frec(67)))
In [12]:
kern_com_67
Out[12]:
In [13]:
testfile = '../../../../../datasets/rwc/011PFNOM_mixture.wav'
ytest, fs = soundfile.read(testfile, start=0, frames=None)
ytest = ytest.reshape(-1,1)
ytest /= np.max(np.abs(ytest))
Ntest = ytest.size
xtest = np.linspace(0, (Ntest-1.)/fs, Ntest).reshape(-1, 1)
plt.figure()
plt.plot(xtest, ytest)
print Ntest
In [14]:
kern_loo = kern_com_60 + kern_com_64
kf = [kern_com_67, kern_loo]
kg = [kern_act_67, kern_act_60]
dec = 1120
maxiter = 1000
minibatch_size = 500
learning_rate = 0.01
ztest = xtest[::dec].copy()
ztest.shape
Out[14]:
In [15]:
a, b = 0, Ntest
for i in range(3):
if i == 0:
kern_loo = kern_com_64 + kern_com_67
kf = [kern_com_60, kern_loo]
kg = [kern_act_60, kern_act_64]
if i == 1:
kern_loo = kern_com_60 + kern_com_67
kf = [kern_com_64, kern_loo]
kg = [kern_act_64, kern_act_60]
if i == 2:
kern_loo = kern_com_60 + kern_com_64
kf = [kern_com_67, kern_loo]
kg = [kern_act_67, kern_act_60]
m = gpitch.loogp.LooGP(X=xtest, Y=ytest, kf=kf, kg=kg, Z=ztest, minibatch_size=minibatch_size)
m.optimize_svi(maxiter=maxiter, learning_rate=learning_rate)
mean_f, var_f, mean_g, var_g = m.predict_all(xtest[a:b])
plt.figure()
plt.plot(-np.array(m.logf))
plt.xlabel('iteration')
plt.ylabel('ELBO')
gpitch.myplots.plot_loo(mean_f=mean_f, var_f=var_f, mean_g=mean_g, var_g=var_g,
x_plot=xtest[a:b], y=ytest[a:b], z=m.Z.value, xlim=None)
tf.reset_default_graph()