Sound Field Analysis toolbox for Python
The sound_field_analysis toolbox (short: sfa) is a Python port of the Sound Field Analysis Toolbox (SOFiA) toolbox, originally by Benjamin Bernschütz. The main goal of the sfa toolbox is to analyze, visualize and process sound field data recorded by spherical microphone arrays. Furthermore, various types of test-data may be generated to evaluate the implemented functions.
The package is pure python and PEP8 compliant (except line-length). Please expect things to be slow for now and for the API to break, as the development is still very much ongoing.
We use Python 3.5 for development. Chances are that earlier version will work too but this is currently untested.
The following external libraries are required:
You can simply install sfa through pip (
pip install sound_field_analysis).
We highly recommend the Anaconda python environment. Once installed, you can use the following steps to create a new environment with the sfa toolbox.
- Create a new environment:
conda create --name sfa numpy scipy plotly
- Activate this environment:
source activate sfa
- Install from pypi:
pip install sound_field_analysis
Soon, you may also install directly from the conda-forge channel using
conda install -c conda-forge sound_field_analysis.
Please find the full documentation over at https://appliedacousticschalmers.github.io/sound_field_analysis-py/!
Exp1 Ideal plane wave
Ideal unity plane wave simulation and 3D plot.
Exp2: Measured plane wave
A measured plane wave from AZ=180°, EL=90° in the anechoic chamber using a cardioid mic.
Exp3: Import data in SOFA format
- Install dependencies for netCDF4 (see example documentation) (this only worked on Mac OS X):
brew install hdf5
brew install netcdf
- Install additional dependency from pypi:
pip install sound_field_analysis[sofa_import]
Exp4: Binaural rendering
Render a spherical microphone array measurement binaurally
The sound_field_analysis toolbox is based on the Matlab/C++ Sound Field Analysis Toolbox (SOFiA) toolbox by Benjamin Bernschütz. For more information you may refer to the original publication:
The Lebedev grid generation was adapted from an implementation by Richard P. Muller.