Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
Colatitude.
SH_type : 'complex' or 'real' spherical harmonics.
weights : (Q,) array_like, optional
Quadrature weights.
Returns
-------
Ymn : (Q, (N+1)**2) numpy.ndarray
Matrix of spherical harmonics.
Notes
-----
The convention used here is also known as N3D-ACN.
"""
azi = utils.asarray_1d(azi)
colat = utils.asarray_1d(colat)
if azi.ndim == 0:
Q = 1
else:
Q = len(azi)
if weights is None:
weights = np.ones(Q)
if SH_type == 'complex':
Ymn = np.zeros([Q, (N+1)**2], dtype=complex)
elif SH_type == 'real':
Ymn = np.zeros([Q, (N+1)**2], dtype=float)
else:
raise ValueError('SH_type unknown.')
i = 0
for n in range(N+1):
try:
isImaginary = np.array([ls['IsImaginary'] for ls in ls_data])
except KeyError as e:
warn('KeyError : {}, will return all False!'.format(e))
isImaginary = np.full_like(azi, False, dtype=bool)
# first extract real loudspeakers
ls_x, ls_y, ls_z = utils.sph2cart(utils.deg2rad(azi[~isImaginary]),
utils.deg2rad(90-ele[~isImaginary]),
r[~isImaginary])
ls_layout = decoder.LoudspeakerSetup(ls_x, ls_y, ls_z,
listener_position=listener_position)
# then add imaginary loudspeakers to ambisonics setup
imag_x, imag_y, imag_z = utils.sph2cart(utils.deg2rad(azi[isImaginary]),
utils.deg2rad(90-ele[isImaginary]),
r[isImaginary])
imag_pos = np.c_[imag_x, imag_y, imag_z]
ls_layout.ambisonics_setup(N_kernel=N_kernel, update_hull=True,
imaginary_ls=imag_pos)
return ls_layout
def calculate_face_areas(hull):
"""Calculate area for each simplex."""
face_areas = np.zeros(len(hull.simplices))
for face_i, face in enumerate(hull.simplices):
v = hull.points[face, :]
face_areas[face_i] = utils.area_triangle(v[0, :], v[1, :], v[2, :])
return face_areas
def __init__(self, x, y, z, listener_position=None):
"""
Parameters
----------
x : array_like
y : array_like
z : array_like
listener_position : (3,), optional
Offset, will be substracted from the loudspeaker positions.
"""
self.x = utils.asarray_1d(x)
self.y = utils.asarray_1d(y)
self.z = utils.asarray_1d(z)
if listener_position is None:
listener_position = [0, 0, 0]
self.listener_position = np.asarray(listener_position)
# Listener position as origin
self.x -= listener_position[0]
self.y -= listener_position[1]
self.z -= listener_position[2]
# TODO: Better handling of this:
self.listener_position -= self.listener_position
_, _, self.d = utils.cart2sph(self.x, self.y, self.z)
# amplitude decay exponent
self.a = 1
----------
f : frequency array
amp : array_like, list of array_like
"""
if not isinstance(amp, (list, tuple)):
amp = [amp]
if labels is not None:
if not isinstance(labels, (list, tuple)):
labels = [labels]
assert(all(len(a) == len(freq) for a in amp))
if to_db:
# Avoid zeros in spec for dB
amp = [utils.db(np.clip(a, 10e-15, None)) for a in amp]
if smoothing_n is not None:
smoothed = []
for a in amp:
smooth = np.zeros_like(a)
for idx in range(len(a)):
k_lo = idx / (2**(1/(2*smoothing_n)))
k_hi = idx * (2**(1/(2*smoothing_n)))
smooth[idx] = np.mean(a[np.floor(k_lo).astype(int):
np.ceil(k_hi).astype(int) + 1])
smoothed.append(smooth)
amp = smoothed
fig, ax = plt.subplots()
[ax.semilogx(freq, a.flat) for a in amp]