Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_allrap(test_jobs):
vecs = spa.grids.load_t_design(degree=5)
hull = spa.decoder.LoudspeakerSetup(*vecs.T)
hull.ambisonics_setup(update_hull=False)
src = np.random.randn(1000, 3)
gains_r = spa.decoder.allrap(src, hull, jobs_count=1)
gains_t = spa.decoder.allrap(src, hull, jobs_count=test_jobs)
assert_allclose(gains_t, gains_r)
def test_allrap(test_jobs):
vecs = spa.grids.load_t_design(degree=5)
hull = spa.decoder.LoudspeakerSetup(*vecs.T)
hull.ambisonics_setup(update_hull=False)
src = np.random.randn(1000, 3)
gains_r = spa.decoder.allrap(src, hull, jobs_count=1)
gains_t = spa.decoder.allrap(src, hull, jobs_count=test_jobs)
assert_allclose(gains_t, gains_r)
# %% VBAP
gains_vbap = decoder.vbap(src, ls_setup)
# %% Ambisonic decoding
# Ambisonic setup
N_e = ls_setup.get_characteristic_order()
ls_setup.ambisonics_setup(update_hull=True, N_kernel=20)
# Show ALLRAP hulls
plots.hull(ls_setup.ambisonics_hull, title='Ambisonic hull')
plots.hull(ls_setup.kernel_hull, mark_invalid=False, title='Kernel hull')
# ALLRAP
gains_allrap = decoder.allrap(src, ls_setup, N_sph=N_e)
# ALLRAP2
gains_allrap2 = decoder.allrap2(src, ls_setup, N_sph=N_e)
# ALLRAD
input_F_nm = sph.sh_matrix(N_e, src_azi, src_colat, 'real').T # SH dirac
out_allrad = decoder.allrad(input_F_nm, ls_setup, N_sph=N_e)
out_allrad2 = decoder.allrad2(input_F_nm, ls_setup, N_sph=N_e)
utils.test_diff(gains_allrap, out_allrad, msg="ALLRAD and ALLRAP:")
utils.test_diff(gains_allrap2, out_allrad2, msg="ALLRAD2 and ALLRAP2:")
# Nearest Loudspeaker
gains_nls = decoder.nearest_loudspeaker(src, ls_setup)
# %% test multiple sources
_grid, _weights = grids.load_Fliege_Maier_nodes(10)
"""
azi_steps = np.deg2rad(azi_steps)
ele_steps = np.deg2rad(ele_steps)
phi_vec = np.arange(-np.pi, np.pi + 2*azi_steps, azi_steps)
theta_vec = np.arange(0., np.pi + 2*ele_steps, ele_steps)
phi_plot, theta_plot = np.meshgrid(phi_vec, theta_vec)
_grid_x, _grid_y, grid_z = utils.sph2cart(phi_plot.ravel(),
theta_plot.ravel())
# Switch renderer
if renderer_type.lower() == 'vbap':
G = decoder.vbap(np.c_[_grid_x, _grid_y, grid_z], hull, **kwargs)
elif renderer_type.lower() == 'vbip':
G = decoder.vbip(np.c_[_grid_x, _grid_y, grid_z], hull, **kwargs)
elif renderer_type.lower() == 'allrap':
G = decoder.allrap(np.c_[_grid_x, _grid_y, grid_z], hull,
**kwargs)
elif renderer_type.lower() == 'allrap2':
G = decoder.allrap2(np.c_[_grid_x, _grid_y, grid_z], hull,
**kwargs)
elif renderer_type.lower() == 'nls':
G = decoder.nearest_loudspeaker(np.c_[_grid_x, _grid_y, grid_z], hull,
**kwargs)
else:
raise ValueError('Unknown renderer_type')
# Measures
E = np.sum(G**2, axis=1) # * (4 * np.pi / G.shape[1]) # (eq. 15)
# project points onto unit sphere
ls_points = hull.points / hull.d[:, np.newaxis]
rE, rE_mag = sph.r_E(ls_points, G / hull.d[np.newaxis, :] ** hull.a)
# Zotter book (eq. 2.11) adds 5/8
# ALLRAD
input_F_nm = sph.sh_matrix(N_e, src_azi, src_colat, 'real').T # SH dirac
out_allrad = decoder.allrad(input_F_nm, ls_setup, N_sph=N_e)
out_allrad2 = decoder.allrad2(input_F_nm, ls_setup, N_sph=N_e)
utils.test_diff(gains_allrap, out_allrad, msg="ALLRAD and ALLRAP:")
utils.test_diff(gains_allrap2, out_allrad2, msg="ALLRAD2 and ALLRAP2:")
# Nearest Loudspeaker
gains_nls = decoder.nearest_loudspeaker(src, ls_setup)
# %% test multiple sources
_grid, _weights = grids.load_Fliege_Maier_nodes(10)
G_vbap = decoder.vbap(_grid, ls_setup)
G_allrap = decoder.allrap(_grid, ls_setup)
G_allrap2 = decoder.allrap2(_grid, ls_setup)
G_vbip = decoder.vbip(_grid, ls_setup)
# %% Look at some performance measures
plots.decoder_performance(ls_setup, 'NLS')
plots.decoder_performance(ls_setup, 'VBAP')
plots.decoder_performance(ls_setup, 'VBAP', retain_outside=True)
plt.suptitle('VBAP with imaginary loudspeaker')
plots.decoder_performance(ls_setup, 'VBIP', retain_outside=True)
plt.suptitle('VBIP with imaginary loudspeaker')
plots.decoder_performance(ls_setup, 'ALLRAP')
plots.decoder_performance(ls_setup, 'ALLRAP2')
# %% Binauralize
fs = 44100
hrirs = IO.load_hrirs(fs)