Generate weights for Differential Microphone Arrays (CDMA)[1] in Python.
生成圆阵列DMA算法的波束成形权重,具体设计参考Jacob的Design of circular differential microphone arrays。
cma = circular_microphone_arrays(M=4)
cdma = CDMA(cma, sa=180, null_list=[180 + 135])
- Define
circular_microphone_arrays
base on geometry of your microphone array, eg:r
for radius (cm),M
for the number of microphones. For now, only uniform circular array (UCA) is supported. - Design your CDMA base on your microphone array, including
sa
for steer angle andnull_list
for null point list. The order of CDMA depends onnull_list
.
In test.py
, an example demonstrates how to apply the CDMA built before on speech enhancement task.
_, _, spec_mix_rir = ss.stft(mix_rir, fs, nperseg=(cdma.cma.f_bin - 1) * 2)
_, s_enh = ss.istft(cdma.apply(spec_mix_rir), fs)
Two utterances from THCHS30 are mixed (you need to download the dataset by yourself). And we try to enhance the signal-1 from the mixed signal. The experiment are performed on data generated by pyroomacoustic.
The specgram of clean utterances, mixture and enhanced signal are shown below.
- Any order Hypercardioid, Supercardioid or Cardioid CDMA
- Superdirective, Robust Superdirective with symmetry and null point constraint
- GSC
[1] Benesty, Jacob, Jingdong Chen, and Israel Cohen. Design of circular differential microphone arrays. Vol. 12. Berlin, Germany:: Springer, 2015.
[2] Benesty, Jacob, Jingdong Chen, and Yiteng Huang. Microphone array signal processing. Vol. 1. Springer Science & Business Media, 2008.