def test_pgc1(): assert nb_channel==1 in_buffer = hls.moving_sinus(length, sample_rate=sample_rate, speed = .5, f1=500., f2=2000., ampl = .8) in_buffer = np.tile(in_buffer[:, None],(1, nb_channel)) loss_params = { 'left' : {'freqs' : [ 125*2**i for i in range(7) ], 'compression_degree': [0]*7, 'passive_loss_db' : [0]*7 } } loss_params['right'] = loss_params['left'] processing_conf = dict(nb_freq_band=5, level_step=10, debug_mode=True, chunksize=chunksize, backward_chunksize=backward_chunksize, loss_params=loss_params) processing, online_arrs = hls.run_class_offline(hls.InvCGC, in_buffer, chunksize, sample_rate, processing_conf=processing_conf, buffersize_margin=backward_chunksize) n = processing.nb_freq_band in_buffer2 = np.tile(in_buffer,(1, processing.nb_freq_band)) online_arr = online_arrs['pgc1'] offline_arr = in_buffer2.copy() for i in range(n): offline_arr[:, i] = scipy.signal.sosfilt(processing.coefficients_pgc[i,:,:], in_buffer2[:,i]) offline_arr = offline_arr[:online_arr.shape[0]] residual = np.abs((online_arr.astype('float64')-offline_arr.astype('float64'))/np.mean(np.abs(offline_arr.astype('float64')))) #~ print(np.max(residual)) freq_band = 4 fig, ax = plt.subplots(nrows = 2, sharex=True) #~ ax[0].plot(in_buffer2[:, freq_band], color = 'k') ax[0].plot(offline_arr[:, freq_band], color = 'g') ax[0].plot(online_arr[:, freq_band], color = 'r', ls='--') ax[1].plot(residual[:, freq_band], color = 'm') for i in range(nloop): ax[1].axvline(i*chunksize) plt.show() assert np.max(residual)<1e-5, 'pgc1 online differt from offline'
def test_invcomp(): #~ in_buffer = hls.moving_erb_noise(length) in_buffer = hls.moving_sinus(length, sample_rate=sample_rate, speed = .5, f1=100., f2=2000., ampl = .8) in_buffer = np.tile(in_buffer[:, None],(1, nb_channel)) #~ print(in_buffer.shape) #~ exit() loss_params = { 'left' : {'freqs' : [ 125*2**i for i in range(7) ], 'compression_degree': [0]*7, 'passive_loss_db' : [0]*7 } } loss_params['right'] = loss_params['left'] processing_conf = dict(nb_freq_band=32, level_step=1., level_max = 100., loss_params=loss_params, low_freq=100., high_freq=15000., debug_mode=True, chunksize=chunksize, backward_chunksize=backward_chunksize) processing, online_arrs = hls.run_class_offline(hls.InvComp, in_buffer, chunksize, sample_rate, processing_conf=processing_conf, buffersize_margin=backward_chunksize) print('nlevel', processing.levels.size, 'nb_freq_band', processing.nb_freq_band) freq_band = 15 fig, ax = plt.subplots(nrows = 7, sharex=True) #, sharey=True) ax[0].plot(in_buffer[:, 0], color = 'k') steps = ['pgc1', 'levels', 'dyngain', 'pgc2', 'passive'] for i, k in enumerate(steps): online_arr = online_arrs[k] print(online_arr.shape) ax[i+1].plot(online_arr[:, freq_band], color = 'b') ax[i+1].set_ylabel(k) #~ ax[0].plot(offline_arr[:, 0], color = 'g') out_buffer = online_arrs['main_output'] ax[-1].plot(out_buffer[:, 0], color = 'k') if nb_channel==2: #test stereo is like mono #~ fig, ax = plt.subplots() #~ ax.plot(out_buffer[:,0], color='b') #~ ax.plot(out_buffer[:,1], color='r') #~ fig, ax = plt.subplots() #~ ax.plot(out_buffer[:,0]-out_buffer[:,1], color='b') #~ plt.show() assert np.all(np.abs(out_buffer[:,0]-out_buffer[:,1])<1e-5) plt.show()
def test_passive_loss(): in_buffer = hls.moving_sinus(length, sample_rate=sample_rate, speed = .5, f1=500., f2=2000., ampl = .8) in_buffer = np.tile(in_buffer[:, None],(1, nb_channel)) loss_params = { 'left' : {'freqs' : [ 125*2**i for i in range(7) ], 'compression_degree': [1.]*7, 'passive_loss_db' : [-20.]*7 } } loss_params['right'] = loss_params['left'] processing_conf = dict(nb_freq_band=32, level_step=10, debug_mode=True, chunksize=chunksize, backward_chunksize=backward_chunksize, loss_params=loss_params) processing, online_arrs = hls.run_class_offline(hls.InvCGC, in_buffer, chunksize, sample_rate, processing_conf=processing_conf, buffersize_margin=backward_chunksize) n = processing.nb_freq_band online_pgc2 = online_arrs['pgc2'] online_passive = online_arrs['passive'] #~ offline_passive = online_pgc2.copy() #~ channels = ('left', 'right')[:nb_channel] #~ for c, chan in enumerate(channels): #~ for i in range(n): #~ offline_passive[:, c*n + i] = processing.passive_gain[c*n + i] * online_pgc2 offline_passive = processing.passive_gain.T * online_pgc2 residual = np.abs((online_passive.astype('float64')-offline_passive.astype('float64'))/np.mean(np.abs(offline_passive.astype('float64')))) print(np.max(residual)) freq_band = 15 fig, ax = plt.subplots(nrows = 2, sharex=True) #~ ax[0].plot(in_buffer2[:, freq_band], color = 'k') ax[0].plot(offline_passive[:, freq_band], color = 'g') ax[0].plot(online_passive[:, freq_band], color = 'r', ls='--') ax[1].plot(residual[:, freq_band], color = 'm') for i in range(nloop): ax[1].axvline(i*chunksize) plt.show() assert np.max(residual)<1e-4, 'passive online differt from offline'