DatasetMIRACLE#

DatasetMIRACLE is an experimental (semi-synthetic) microphone array data generator that builds multi-source source cases by convolving synthetic source signals with measured spatial room impulse responses (SRIRs) from the MIRACLE dataset. The workflow is analogous to DatasetSynthetic, but the propagation operator is given by measured SRIRs instead of an analytic free-field model.

Multi-source scenes are realized by superposition of individually convolved source signals. By default, AcouPipe follows the same statistical scene model as in the synthetic generator (Poisson-distributed number of sources, normally distributed source positions, Rayleigh- distributed source strengths).

../../_images/msm_miracle.png

Measurement setup R2 from the MIRACLE dataset (reflective ground plate).#

What the MIRACLE SRIRs represent#

The MIRACLE dataset provides large-scale SRIR measurements acquired with a planar 64-channel array (Vogel spiral, aperture 1.47 m) in the anechoic chamber of TU Berlin. A reflective environment is realized in one scenario by inserting a ground plate between source and array.

In addition to SRIRs, MIRACLE provides metadata relevant for learning and benchmarking, including experimentally obtained loudspeaker directivity information and validated/offset- corrected source positions.

Scenarios#

MIRACLE provides SRIRs for four measurement scenarios. In AcouPipe, the scenario is selected via the scenario parameter of DatasetMIRACLE.

The table below summarizes the spatial sampling and environmental configuration. Note that the number of available single-channel SRIRs per scenario is given by (# sources) × (64 microphones), and the full dataset comprises 856,128 single-channel impulse responses across all scenarios.

Available MIRACLE scenarios (SRIR grids and meta-data)#

Scenario

Environment

c0

# sources

dx = dy

dz

Δx = Δy

Notes

A1

Anechoic

344.8 m/s

64 × 64 = 4096

146.7 cm

73.4 cm

23.3 mm

short distance

D1

Anechoic

345.0 m/s

33 × 33 = 1089

16.0 cm

73.4 cm

5.0 mm

dense local grid

A2

Anechoic

345.3 m/s

64 × 64 = 4096

146.7 cm

146.7 cm

23.3 mm

long distance

R2

Reflective ground plate

345.4 m/s

64 × 64 = 4096

146.7 cm

146.7 cm

23.3 mm

specular reflection

Default FFT parameters#

The underlying default FFT parameters are:

FFT Parameters#

Sampling Rate

fs = 32,000 Hz

Block size

256 samples

Block overlap

50 %

Windowing

von Hann / Hanning

Note

The FFT settings relate to feature extraction (e.g., CSM / beamforming) and can be overridden in your generation pipeline if required.

Randomized properties#

Several properties of the dataset are randomized for each source case when generating data. This includes the number of sources, their positions, and their strengths. By default, source positions are sampled from the discrete source grid of the selected MIRACLE scenario.

Randomized properties (defaults)#

No. of sources

Poisson distributed (\(\lambda = 3\))

Source positions

Bivariate normal distributed (\(\sigma = 0.1688 d_a\))

Source strength (\([{Pa}^2]\) at reference position)

Rayleigh distributed (\(\sigma_R = 5\))

Relative noise variance

Uniform distributed (\(10^{-6}\), \(0.1\))

Example#

The following example script generates sourcemaps for several MIRACLE scenarios and is also used to create the figure below.

Example usage of DatasetMIRACLE#
 1from pathlib import Path
 2
 3import acoular as ac
 4import matplotlib.pyplot as plt
 5
 6from acoupipe.datasets.experimental import DatasetMIRACLE
 7
 8f = 2000
 9
10fig, axs = plt.subplots(1, 3, figsize=(9, 3), sharey=True, sharex=True)
11fig.suptitle(f"Sourcemap ($f={f}$ Hz)", fontsize=12)
12
13for i, scenario in enumerate([ "A1", "A2", "R2"]):
14
15    dataset = DatasetMIRACLE(scenario=scenario, mode="wishart")
16    data_generator = dataset.generate(
17        features=["sourcemap", "loc", "f"],
18        split="training",
19        size=1,
20        f=[f],
21        num=0,
22    )
23    data_sample = next(data_generator)
24
25    extent = dataset.config.grid.extent
26
27    # sound pressure level
28    Lm = ac.L_p(data_sample["sourcemap"]).T
29    if i == 0:
30        Lm_max = Lm.max()
31        Lm_min = Lm.max() - 20
32
33    axs[i].set_title(f"scenario: {scenario}")
34    im = axs[i].imshow(Lm, vmax=Lm_max, vmin=Lm_min, extent=extent, origin="lower",interpolation="bicubic")
35
36    # plot source locations
37    for loc in data_sample["loc"].T:
38        axs[i].scatter(loc[0], loc[1], s=1)
39    axs[i].set_xlabel("x (m)")
40    axs[i].set_ylabel("y (m)")
41
42fig.colorbar(im, label="Sound Pressure Level (dB)", ax=axs[i])
43fig.tight_layout()
44

The generator yields one sample at a time as a dictionary, including helper fields idx and seeds to keep data generation reproducible when running in parallel.

Example sourcemaps#

../../_images/exp_sourcemap_example.png

License and access#

MIRACLE is distributed under CC BY-NC-SA 4.0 (non-commercial). Please ensure your intended use complies with the license terms.