Skip to main content

An image source-based method used to simulate room transfer functions for arbitrary room shapes.

Project description

Diffraction Enhanced Image Source Method - Arbitrary Room Geometry (DEISM-ARG)

DOI Documentation Status PyPI version

The code in this folder is able to solve the following problem:

A source and a receiver transducer with arbitrary directivity are mounted on one/two speakers; The local scattering and diffraction effects around the transducers result in complex directivity patterns. The directivity patterns can be obtained by analytical expressions, numerical simulations or measurements.

In DEISM-ARG, we can model the room transfer function between transducers mounted on one/two speakers using the image source method while incorporating the local diffraction effects around the transducers. The local diffraction effects are captured using spherical-harmonic directivity coefficients obtained on a sphere around the transducers. In addition to DEISM in shoebox rooms, DEISM-ARG can model more complex room shapes. However, for version 2.0, we now only supports convex shapes. In short, DEISM-ARG has the following features:

  1. Arbitrary directivities of the source and receiver
  2. Angle-dependent reflection coefficients, frequency- and wall-dependent impedance definition.
  3. Convex room shapes

image-20240812131054348

📚 Documentation

📖 Read the full documentation on Read the Docs

Preparation and installing

DEISM supports Python versions 3.9, 3.10, and 3.11, and works on Windows, macOS, and Linux. You can install DEISM using either Python virtual environments or Conda.

Check Python Version

First, verify you have Python 3.9, 3.10, or 3.11 installed. Click on your operating system below:

macOS

Open the Terminal by pressing 'Command+Spacebar' and searching for 'Terminal'. Once the Terminal is open, type:

python3 --version

Tip: If you have not used the terminal before, you may be prompted to install Xcode Command Line Tools. Follow the prompts to install the package, then try the command again.

If you don't have Python or have an older version, download and install Python from python.org.

Linux/WSL

In your shell, run:

python3 --version

To check available Python versions for your distribution:

sudo apt update
apt show python3

If you need to install Python, run:

sudo apt install python3 python3-pip python3-venv
Windows

Open PowerShell by typing "PowerShell" in the Windows search bar. Once inside PowerShell, type:

python3 --version

Alternatively, you can type python and press Enter to open the Microsoft Store's installation page for Python.

If you don't have Python or have an older version, download and install Python from python.org.


Installation Method 1: Python Virtual Environment

Install DEISM (End Users)

macOS

In the terminal, run:

# Create virtual environment (recommended location)
python3 -m venv ~/.venv/deism
source ~/.venv/deism/bin/activate

# Install DEISM
pip install --upgrade pip
pip install deism
Linux/WSL

In your shell, run:

# Create virtual environment (recommended location)
python3 -m venv ~/.venv/deism
source ~/.venv/deism/bin/activate

# Install DEISM
pip install --upgrade pip
pip install deism
Windows

In PowerShell, run:

# Create virtual environment (recommended location)
python -m venv C:\Users\<YourUsername>\venvs\deism
C:\Users\<YourUsername>\venvs\deism\Scripts\Activate.ps1

# Install DEISM
python -m pip install --upgrade pip
pip install deism

Tip: If you get an execution policy error, run PowerShell as Administrator and execute:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

Install DEISM (Developers)

macOS

In the terminal, run:

# Clone repository
git clone https://github.com/audiolabs/DEISM.git
cd DEISM

# Create virtual environment (recommended location)
python3 -m venv ~/.venv/deism_dev
source ~/.venv/deism_dev/bin/activate

# Install in editable mode
pip install --upgrade pip
pip install -r requirements.txt
pip install -e .
Linux/WSL

In your shell, run:

# Clone repository
git clone https://github.com/audiolabs/DEISM.git
cd DEISM

# Create virtual environment (recommended location)
python3 -m venv ~/.venv/deism_dev
source ~/.venv/deism_dev/bin/activate

# Install in editable mode
pip install --upgrade pip
pip install -r requirements.txt
pip install -e .
Windows

In PowerShell, run:

# Clone repository
git clone https://github.com/audiolabs/DEISM.git
cd DEISM

# Create virtual environment (recommended location)
python -m venv C:\Users\<YourUsername>\venvs\deism_dev
C:\Users\<YourUsername>\venvs\deism_dev\Scripts\Activate.ps1

# Install in editable mode
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install -e .

Installation Method 2: Conda Environment

Install DEISM (End Users)

All Platforms:

# Create conda environment
conda create -n deism python=3.9
conda activate deism

# Install DEISM
pip install --upgrade pip
pip install deism

Install DEISM (Developers)

All Platforms:

# Clone repository
git clone https://github.com/audiolabs/DEISM.git
cd DEISM

# Create conda environment from file
conda env create -f deism_env.yml
conda activate DEISM

# Install in editable mode
pip install -e .

Alternative: If deism_env.yml doesn't work, try the exact versions file:

conda env create -f deism_env_exact.yml
conda activate DEISM
pip install -e .

Build Tools Requirements

DEISM compiles C++ extensions during installation. You'll need a C++ compiler. Click on your operating system:

macOS

Install Xcode Command Line Tools:

xcode-select --install
Linux/WSL

Ubuntu/Debian:

sudo apt-get update
sudo apt-get install build-essential g++ python3-dev

RHEL/CentOS/Fedora:

sudo yum install gcc-c++ python3-devel
Windows

Option 1: Install MinGW-w64 and add to PATH

Option 2: Install Visual Studio Build Tools (select "C++ build tools" during installation)

Note: If the compiler is missing, DEISM will still install but the optional count_reflections C++ library won't be compiled (Python fallback will be used).


Troubleshooting

PowerShell execution policy error (Windows):

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

"g++: command not found" (Linux/macOS):

  • Linux: sudo apt-get install build-essential
  • macOS: xcode-select --install

"ModuleNotFoundError: No module named 'pybind11'":

pip install pybind11>=2.2
pip install deism  # or pip install -e .

Conda environment issues:

  • If you encounter errors with deism_env.yml, try deism_env_exact.yml which contains exact package versions
  • Ensure conda is up to date: conda update conda

Additional heads up

  • You would need to an external LaTeX installation to render text properly when running the examples, since we enable plt.rcParams["text.usetex"] = True when plotting the simulated room transfer functions. Please refer to this page for more information Matplotlib usetex Documentation.

Running codes

Single set of parameters

The default parameters are defined in file configSingleParam.yml or configSingleParam_ARG.yml, depending on whether you want to run for shoebox rooms or more complicated room shapes. Take DEISM-ARG (configSingleParam_ARG.yml) as an example, there are two ways of running the codes:

  1. You can directly run deism_arg_singleparam_example.py in an IDE, which utilizes the parameters defined in configSingleParam_arg.yml.
  2. You can run deism_arg_singleparam_example.py from the command line after activating the conda environment. In addition, you can access help information quickly by python deism_arg_singleparam_example.py --help. You can then change the parameters based on the instructions from the help message, e.g., python deism_arg_singleparam_example.py -c 350 -zs 20 will change the parameter sound speed and the wall impedance. The new input value of the parameters then overrides the ones in file configSingleParam_arg.yml. After choosing the needed values, you can run the codes using, e.g., python deism_arg_singleparam_example.py -c 350 -zs 20 --run.
  3. You need to specify additionally the following parameters in the function init_parameters of deism_arg_singleparam_example.py:
    1. The vertices of the room
    2. If rotate the room w.r.t the origin. This can be useful if you want to have some comparisons with the rooms created using pyroomacoustics.
    3. The rotation angles of the room if it needs to be rotated.
  4. You can suppress all output information in the command line by adding flag "--quiet" or by setting the first parameters in the configuration.yml file SilentMode to 1.

Examples

DEISM-ARG

  • An example of running DEISM-ARG is examples/deism_arg_single_example.py
    • You can run this from IDEs or via the command line, as introduced in the previous section
  • An example of comparing different versions of DEISM-ARG is given in examples/deism_args_compare.py. A frequency- and wall-dependent impedance definition can also be applied for a convex room. The room transfer functions are compared among:
    • Original version (most computation-costly)
    • LC version (fastest)
    • Mix version (Trade-offs between Original and LC versions): Early reflections up to some changeable order (default is 2) are calculated using the original version and the higher orders are calculated using the LC version.
  • An example of comparing DEISM-ARG and pyroomacoustics is examples/deism_arg_pra_compare.py, Comparisons are done regarding if the following results are identical or mismatched only by a small deviation:
    • number of images
    • the positions of the images

DEISM for shoebox

We provide two examples for running the original DEISM for shoebox rooms

  • An example of running DEISM-shoebox is examples/deism_singleparam_example.py
    • You can either run this from IDEs or via the cmd
  • An example of comparing different DEISM versions are shown in examples/deisms_lc_mix_test.py. In this script, the following methods are compared
    • DEISM - original
    • DEISM - MIX (original + LC vectorized)
    • DEISM - LC vectorized
    • FEM as groundtruth (only for this specific parameter settings)

Tips

The example code only provides essential functionalities based on DEISM. For more complex scenarios, please contact the authors (zeyu.xu@audiolabs-erlangen.de) for support. In the following, a few important tips might be helpful for you:

  • If you want to simulate the scenario where both the source and receiver are positioned on the same speaker, you need to run DEISM for all reflection path except for the direct path.
  • It is recommended to set the distance at least 1m between the transducers and the walls.

Directivities

Modeling the directivities of the source and receiver in the room acoustics simulation is receiving increasing attention. The directivities of the source or receiver can include both the transducer directional properties and the local diffraction and scatterring effects caused by the enclosure where the transducers are mounted. Modern smart speakers are typical embodiments of such scenarios. Human heads are also a very common case.

Simple directivities

  • Monopole

Arbitrary directivities

Some key information should be provided if you want to include your own directivity data:

  1. Frequencies at which the directivities are simulated or measured. A 1D array.
  2. The spherical sampling directions around the transducer: azimuth from $0$ ( $+x$ direction) to $2 \pi$, inclination angle from $0$ ($+z$ direction) to $\pi$. A 2D array with size (number of directions, 2).
  3. The sampled pressure field at the specified directions and frequencies. A 2D array with size (number of frequencies, number of directions).
  4. The radius of the sampling sphere. A 1D array or float number.

For more information about directivity definition used in DEISM and DEISM-ARG, please refer to the following publication:

Zeyu Xu, Adrian Herzog, Alexander Lodermeyer, Emanuël A. P. Habets, Albert G. Prinn; Acoustic reciprocity in the spherical harmonic domain: A formulation for directional sources and receivers. JASA Express Lett. 1 December 2022; 2 (12): 124801. https://doi.org/10.1121/10.0016542

Contributors

  • M. Sc. Zeyu Xu
  • Songjiang Tan
  • M. Sc. Hasan Nazım Biçer
  • Dr. Albert Prinn
  • Prof. Dr. ir. Emanuël Habets
  • Anjana Rajasekhar

Academic publications

If you use this package in your research, please cite our paper:

Zeyu Xu, Adrian Herzog, Alexander Lodermeyer, Emanuël A. P. Habets, Albert G. Prinn; Simulating room transfer functions between transducers mounted on audio devices using a modified image source method. J. Acoust. Soc. Am. 1 January 2024; 155 (1): 343–357. https://doi.org/10.1121/10.0023935

Z. Xu, E.A.P. Habets and A.G. Prinn; Simulating sound fields in rooms with arbitrary geometries using the diffraction-enhanced image source method, Proc. of International Workshop on Acoustic Signal Enhancement (IWAENC), 2024.

Description of the codes and functions

configSingleParam_ARG.yml

In this file you define the default parameters for DEISM-ARG to run. Note that this file is different from the configSingleParam.yml on these parameters:

  • The dimensions are defined separately in the example script.
  • You also need to specify if you want to rotate the room, and the rotation angles as well.

configSingleParam.yml

In this file you define the default parameters for DEISM-shoebox to run.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

deism-2.2.1.12.tar.gz (2.7 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

deism-2.2.1.12-cp311-cp311-win_amd64.whl (3.7 MB view details)

Uploaded CPython 3.11Windows x86-64

deism-2.2.1.12-cp311-cp311-manylinux_2_39_x86_64.whl (18.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.39+ x86-64

deism-2.2.1.12-cp311-cp311-macosx_15_0_universal2.whl (3.8 MB view details)

Uploaded CPython 3.11macOS 15.0+ universal2 (ARM64, x86-64)

deism-2.2.1.12-cp310-cp310-win_amd64.whl (3.7 MB view details)

Uploaded CPython 3.10Windows x86-64

deism-2.2.1.12-cp310-cp310-manylinux_2_39_x86_64.whl (17.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.39+ x86-64

deism-2.2.1.12-cp310-cp310-macosx_15_0_universal2.whl (3.8 MB view details)

Uploaded CPython 3.10macOS 15.0+ universal2 (ARM64, x86-64)

deism-2.2.1.12-cp39-cp39-win_amd64.whl (3.8 MB view details)

Uploaded CPython 3.9Windows x86-64

deism-2.2.1.12-cp39-cp39-manylinux_2_39_x86_64.whl (18.0 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.39+ x86-64

File details

Details for the file deism-2.2.1.12.tar.gz.

File metadata

  • Download URL: deism-2.2.1.12.tar.gz
  • Upload date:
  • Size: 2.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for deism-2.2.1.12.tar.gz
Algorithm Hash digest
SHA256 31ec62aebfa88b76ca0be571f5599f96acb36a8a3cda5499c0703a162ce3d9f2
MD5 72d756b67b9ce7b9c00db78f19639ceb
BLAKE2b-256 d579426c90d39ae78c50a6cd09456190bc1c47d18615f4c5c395f83ac1983186

See more details on using hashes here.

File details

Details for the file deism-2.2.1.12-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: deism-2.2.1.12-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 3.7 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for deism-2.2.1.12-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 39ee3d92ff34592bbbdb47db8771ecddfbb7b2ffb4f16e13b29471a1bc5495ac
MD5 3fa0d041651c1949a8e514da3e2b6a04
BLAKE2b-256 88b53758abbfd5cd6b2487e3c8a5f372d805ff1cfda4cb27e0486b31d3e7bdaa

See more details on using hashes here.

File details

Details for the file deism-2.2.1.12-cp311-cp311-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for deism-2.2.1.12-cp311-cp311-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 b99c6c1e7eab6da6b08eabe9f6e8eed2d905408ff61660b1c6e10b3c975ee31d
MD5 3d5d6e5f82853e04b2fa4d0390e3e412
BLAKE2b-256 651d624952363a3b58020cce66a6f96d3ddc79bb0e5367d2e40d9b97e9e391fb

See more details on using hashes here.

File details

Details for the file deism-2.2.1.12-cp311-cp311-macosx_15_0_universal2.whl.

File metadata

File hashes

Hashes for deism-2.2.1.12-cp311-cp311-macosx_15_0_universal2.whl
Algorithm Hash digest
SHA256 308573043ab0126f438fab3e9fe2bd6e12d33d8e0417e0373d2f616f506dffb0
MD5 86d47d969755eeb3deed547b3673aa82
BLAKE2b-256 8e689cca924be9da65b905379ee94f052f8e9200e321f7be8c0598fce2f099e8

See more details on using hashes here.

File details

Details for the file deism-2.2.1.12-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: deism-2.2.1.12-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 3.7 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.11

File hashes

Hashes for deism-2.2.1.12-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 ed2071012929387114dcdcb6395690cc1c0a229615b213fdca9b4a2a6001afab
MD5 1d76234c7e32fb9237fc1a6de6ca0fe5
BLAKE2b-256 5aeb81e3f1e03619ab85fd182c9bb799106df596525bad0c7ce6ccf568a594f2

See more details on using hashes here.

File details

Details for the file deism-2.2.1.12-cp310-cp310-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for deism-2.2.1.12-cp310-cp310-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 55c091355cd2b2b86a10ec246f608b64f6a11d4258c43e82deb9b52d71563269
MD5 f3e5ff601b81b9813cb34a8a67bf3e9d
BLAKE2b-256 95fa3da0dc6944cb54c60a304316edc03938898a4b49542bab1eec832a9b3eb2

See more details on using hashes here.

File details

Details for the file deism-2.2.1.12-cp310-cp310-macosx_15_0_universal2.whl.

File metadata

File hashes

Hashes for deism-2.2.1.12-cp310-cp310-macosx_15_0_universal2.whl
Algorithm Hash digest
SHA256 f1bc0e29fefd8d997e698c90a71d8ed721135172ceaef8aa23fe158c2e593a4d
MD5 1f9915d2c7e60c03a7dff84a09020c8e
BLAKE2b-256 0dd055e8e0974ac7a3d85e38bc809b37da4772042ad4185fed145517ac4699cc

See more details on using hashes here.

File details

Details for the file deism-2.2.1.12-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: deism-2.2.1.12-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 3.8 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.13

File hashes

Hashes for deism-2.2.1.12-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 6b1dc217e1c411dd14448a28f297633e6d97de8aded48bc91f0ed2584f2d28d8
MD5 b00967dbcfa0054c1b4661d0d2f69d44
BLAKE2b-256 a95116974ac994c2762af89662429026f6efc89ce15e222baef61424677909a2

See more details on using hashes here.

File details

Details for the file deism-2.2.1.12-cp39-cp39-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for deism-2.2.1.12-cp39-cp39-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 1d4fa095b85d5924a942852c71f2ac67c6e8347196309975ef280c9b0e9f63d0
MD5 2ba6496cffcab4ecf1565a99ddf7e740
BLAKE2b-256 383d2f495ae1f2fa81722c11a5d55af4071ff36251bc52d02ed5a7d9090c0a64

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page