Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cyclic multichannel Wiener filter (cMWF) for acoustic beamforming

Introduction

This code accompanies the paper "Cyclic multichannel Wiener filter for acoustic beamforming", accepted in WASPAA 2025 (arXiv: https://arxiv.org/abs/2507.10159).

Check also our follow-up work, where almost-periodic noises are suppressed using a cyclic MVDR: https://github.com/Screeen/cmvdr.

Overview of results on synthetic data

The paper proposes a new beamforming method leveraging the cyclostationarity of voiced speech signals.
By exploiting correlations across microphones and frequency components, the cyclic multichannel Wiener filter (cMWF) improves noise reduction in low-SNR scenarios.


Installation and first run

Prerequisites

  • Python 3.9 (for compatibility with librosa)
  • Tested on macOS 14.4.1 but should run on most Linux systems.

Setup

  1. Clone the repository:
   git clone git@github.com:Screeen/cyclicMWF.git
   cd cyclicMWF
  1. Create and activate a Python virtual environment:
   python3.9 -m venv .venv
   source .venv/bin/activate
  1. Install required packages:
   pip install --upgrade pip
   uv sync  # requires the `uv` package for managing virtual environments
   # (or if you prefer:)
   # pip install -r requirements.txt

fast_nls_src compilation

We use the fastF0Nls library for pitch estimation, which requires compilation. See https://github.com/jkjaer/fastF0Nls for instructions.


Running experiments

Configurations

Experiment parameters are controlled via YAML files in the configs/ folder. Edit default.yaml and cmwf.yaml to set your desired parameters such as:

  • data_type (choose from 'synthetic', 'instruments', or 'speech')
  • num_montecarlo_simulations
  • ...

Example runs

Run synthetic data experiments:

python main.py

Notes

Troubleshooting

If you get

ImportError: cannot import name 'kaiser' from 'scipy.signal' (.../.venv/lib/python3.X/site-packages/scipy/signal/__init__.py). Did you mean: 'kaiserord'?

Open the file

nano .../SVD-direct/env/lib/python3.X/site-packages/pysepm/util.py

and replace

from scipy.signal import firls,kaiser,upfirdn

with

from scipy.signal import firls,upfirdn
from scipy.signal.windows import kaiser

Note

Feedback and questions welcome: G.Bologni@tudelft.nl. Enjoy experimenting with cMWF!

About

Official repo for paper "Cyclic multichannel Wiener filter for acoustic beamforming".

Topics

Resources

Stars

14 stars

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages