Source code for acoustics.ambisonics
"""
Ambisonics
==========
"""
import numpy as np
from scipy.misc import factorial
[docs]def acn(order=1):
"""Spherical harmonic degree `n` and order `m` for ambisonics order `order`.
:param order: Ambisonics order.
Yields tuples `(n, m)` where `n` is the degree and `m` the order.
Follows ACN.
=== == == ======
ACN n m letter
=== == == ======
0 0 0 W
--- -- -- ------
1 1 -1 Y
--- -- -- ------
2 1 0 Z
--- -- -- ------
3 1 +1 X
=== == == ======
"""
for n in range(order + 1):
for m in range(-n, n + 1):
yield (n, m)
[docs]def sn3d(m, n):
"""SN3D or Schmidt semi-normalisation
:param m: order `n`
:param n: degree `m`
http://en.wikipedia.org/wiki/Ambisonic_data_exchange_formats#SN3D
"""
m = np.atleast_1d(m)
n = np.atleast_1d(n)
d = np.logical_not(m.astype(bool))
out = np.sqrt((2.0 - d) / (4.0 * np.pi) * factorial(n - np.abs(m)) / factorial(n + np.abs(m)))
return out
[docs]def n3d(m, n):
"""N3D or full three-D normalisation
:param m: order `n`
:param n: degree `m`
http://en.wikipedia.org/wiki/Ambisonic_data_exchange_formats#N3D
"""
n = np.atleast_1d(n)
return sn3d(m, n) * np.sqrt(2 * n + 1)
__all__ = ['acn', 'sn3d', 'n3d']