{"id":20620607,"url":"https://github.com/lcav/frida","last_synced_at":"2026-03-05T21:07:45.075Z","repository":{"id":52075938,"uuid":"78312634","full_name":"LCAV/FRIDA","owner":"LCAV","description":"A high-resolution direction-of-arrival finding algorithm relying on finite rate of innovation sampling with a robust reconstruction algorithm.","archived":false,"fork":false,"pushed_at":"2018-10-16T09:10:49.000Z","size":28777,"stargazers_count":98,"open_issues_count":2,"forks_count":46,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-04-15T12:17:56.406Z","etag":null,"topics":["array-processing","audio","audio-processing","doa","finite-rate-of-innovation"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LCAV.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-01-08T00:37:54.000Z","updated_at":"2025-03-06T04:46:47.000Z","dependencies_parsed_at":"2022-09-06T07:43:48.644Z","dependency_job_id":null,"html_url":"https://github.com/LCAV/FRIDA","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/LCAV/FRIDA","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LCAV%2FFRIDA","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LCAV%2FFRIDA/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LCAV%2FFRIDA/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LCAV%2FFRIDA/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LCAV","download_url":"https://codeload.github.com/LCAV/FRIDA/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LCAV%2FFRIDA/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263480902,"owners_count":23473165,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["array-processing","audio","audio-processing","doa","finite-rate-of-innovation"],"created_at":"2024-11-16T12:14:58.614Z","updated_at":"2026-03-05T21:07:40.012Z","avatar_url":"https://github.com/LCAV.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"FRIDA: FRI-based DOA Estimation for Arbitrary Array Layout\n==================================\n\nThis repository contains all the code to reproduce the results of the paper\n[*FRIDA: FRI-based DOA Estimation for Arbitrary Array Layout*](https://infoscience.epfl.ch/record/223649).\n\n*FRIDA* is a new algorithm for direction of arrival (DOA) estimation\nfor acoustic sources. This repository contains a python implementation\nof the algorithm, as well as five conventional methods: MUSIC, SRP-PHAT, CSSM,\nWAVES, and TOPS (in the `doa` folder).\n\nA number of scripts were written to evaluate the performance of FRIDA and the\nother algorithms in different scenarios. Monte-Carlo simulations were used to\nstudy the noise robustness and the minimum angle of separation for close source\nresolution (`figure_doa_separation.py`, `figure_doa_synthetic.py`).  A number\nof experiment on recorded data were done and the scripts for processing this\ndata are also available (`figure_doa_experiment.py`,\n`figure_doa_9_mics_10_src.py`).\n\nWe are available for any question or request relating to either the code\nor the theory behind it. Just ask!\n\nAbstract\n--------\n\nIn this paper we present FRIDA --- an algorithm for estimating directions of\narrival of multiple wideband sound sources. FRIDA combines multi-band\ninformation coherently and achieves state-of-the-art resolution at extremely\nlow signal-to-noise ratios. It works for arbitrary array layouts, but unlike\nthe various steered response power and subspace methods, it does not require a\ngrid search. FRIDA leverages recent advances in sampling signals with a finite\nrate of innovation. It is based on the insight that for any array layout, the\nentries of the spatial covariance matrix can be linearly transformed into a\nuniformly sampled sum of sinusoids.\n\nAuthors\n-------\n\nHanjie Pan, Robin Scheibler, Eric Bezzam, and Martin Vetterli are with \nAudiovisual Communications Laboratory ([LCAV](http://lcav.epfl.ch)) at \n[EPFL](http://www.epfl.ch).\n\nIvan Dokmanić is with Institut Langevin, CNRS, EsPCI Paris, PSL Research University.\n\n\u003cimg src=\"http://lcav.epfl.ch/files/content/sites/lcav/files/images/Home/LCAV_anim_200.gif\"\u003e\n\n#### Contact\n\n[Robin Scheibler](mailto:robin[dot]scheibler[at]epfl[dot]ch) \u003cbr\u003e\nEPFL-IC-LCAV \u003cbr\u003e\nBC Building \u003cbr\u003e\nStation 14 \u003cbr\u003e\n1015 Lausanne\n\nRecreate the figures and sound samples\n--------------------------------------\n\nThe first step is to make sure that all the dependencies are satisfied.\nCheck this in the Dependencies section or just run the following to check if you are missing something.\n\n    python check_requirements.py\n\nIf some dependencies are missing, they can be installed with `pip install -r requirements.txt`.\n\nSecond, download the recordings data by running the following at the root of the\nrepository\n\n    wget https://zenodo.org/record/345132/files/FRIDA_recordings.tar.gz\n    tar xzfv FRIDA_recordings.tar.gz\n\nFor a quick test that everythin works, you can run the main script in test mode. This will run just one loop\nof every simulation.\n\n    ./make_all_figures.sh -t\n\nFor the real deal, run the same command without any options.\n\n    ./make_all_figures.sh\n\nParallel computation engines can be used by adding `-n X` where X is the number of engines to use. Typically this is the number of cores available minus one.\n\n    ./make_all_figures.sh -n X\n\nAlternatively, start an ipython cluster\n\n    ipcluster start -n \u003cnumber_workers\u003e\n    \nand then type in the following commands in an ipython shell.\n\n    # Simulation with different SNR values\n    %run figure_doa_synthetic.py -f \u003cfilename\u003e\n    %run figure_doa_synthetic_plot.py -f \u003cfilename\u003e\n\n    # Simulation of closely spaced sources\n    %run figure_doa_separation.py -f \u003cfilename\u003e\n    %run figure_doa_separation_plot.py -f \u003cfilename\u003e\n\n    # Experiment on speech recordings\n    %run figure_doa_experiment.py -f \u003cfilename\u003e\n    %run figure_doa_experiment_plot.py -f \u003cfilename\u003e\n\n    # Experiment with 10 loudspeakers and 9 microphones\n    %run figure_doa_9_mics_10_src.py -o \u003cfilename\u003e\n    %run figure_doa_9_mics_10_src_plot.py -f \u003cfilename\u003e\n\nThe data is saved in the `data` folder and the figures generated are collected in `figures`.\n\nData used in the paper\n----------------------\n\nThe output from the simulation and processing that\nwas used for the figures in the paper is stored in\nthe repository in the following files.\n\n    # Simulation with different SNR values\n    data/20160911-035215_doa_synthetic.npz\n    data/20160911-161112_doa_synthetic.npz\n    data/20160911-175127_doa_synthetic.npz\n    data/20160911-192530_doa_synthetic.npz\n    data/20160911-225325_doa_synthetic.npz\n\n    # Simulation of closely spaced sources\n    data/20160910-192848_doa_separation.npz\n\n    # Experiment on speech recordings\n    data/20160909-203344_doa_experiment.npz\n\n    # Experiment with 10 loudspeakers and 9 microphones\n    data/20160913-011415_doa_9_mics_10_src.npz\n\nRecorded Data\n-------------\n\n[![DOI](https://zenodo.org/badge/DOI/10.7910/DVN/SVQBEP.svg)](https://doi.org/10.7910/DVN/SVQBEP)\n\nThe recorded speech and noise samples used in the experiment have been\npublished both in [Dataverse](http://dx.doi.org/10.7910/DVN/SVQBEP) and\n[Zenodo](https://zenodo.org/record/345132#.WLhMfxIrJFx).  The folder containing\nthe recordings should be at the root of the repository and named `recordings`.\nDetailed description and instructions are provided along the data.\n\n    wget https://zenodo.org/record/345132/files/FRIDA_recordings.tar.gz\n    tar xzfv FRIDA_recordings.tar.gz\n\nOverview of results\n-------------------\n\nWe implemented for comparison five algorithms: incoherent MUSIC, SRP-PHAT, CSSM, WAVES, and TOPS.\n\n### Influence of Noise (Fig. 1A)\n\nWe compare the robustness to noise of the different algorithms when a single source is present.\n\n\u003cimg src=\"https://dl.dropboxusercontent.com/u/78009186/images/FRIDA/experiment_snr_synthetic.png\" height=\"300\"\u003e\n\n### Resolving power (Fig. 1B)\n\nWe study the resolution power of the different algorithms. How close can two sources become\nbefore the algorithm breaks down.\n\n\u003cimg src=\"https://dl.dropboxusercontent.com/u/78009186/images/FRIDA/experiment_minimum_separation.png\" height=\"300\"\u003e\n\n### Experiment on speech data (Fig. 2C)\n\nWe record signals from 8 loudspeakers with 1, 2, or 3 sources active simultaneously. We use\nthe algorithm to reconstruct the DOA and plot the statistics of the error.\n\n\u003cimg src=\"https://dl.dropboxusercontent.com/u/78009186/images/FRIDA/experiment_error_box.png\" height=\"300\"\u003e\n\n### Experiment with more sources than microphone (Fig. 2D)\n\nFRIDA can identifies DOA of more sources than it uses microphones. We demonstrate\nthis by playing 10 loudspeakers simultaneously and recovering all DOA with only\n9 microphones.\n\n\u003cimg src=\"https://dl.dropboxusercontent.com/u/78009186/images/FRIDA/experiment_9_mics_10_src.png\" height=\"400\"\u003e\n\n\nDependencies\n------------\n\nFor a quick check of the dependencies, run\n\n    python check_requirements.py\n\nThe script `system_install.sh` was used to install all the required software on a blank UBUNTU Xenial server.\n\n* A working distribution of [Python 2.7](https://www.python.org/downloads/).\n* [Numpy](http://www.numpy.org/), [Scipy](http://www.scipy.org/)\n* We use the distribution [anaconda](https://store.continuum.io/cshop/anaconda/) to simplify the setup of the environment.\n* Computations are very heavy and we use the\n  [MKL](https://store.continuum.io/cshop/mkl-optimizations/) extension of\n  Anaconda to speed things up. There is a [free license](https://store.continuum.io/cshop/academicanaconda) for academics.\n* We used ipyparallel and joblib for parallel computations.\n* [matplotlib](http://matplotlib.org) and [seaborn](https://stanford.edu/~mwaskom/software/seaborn/index.html#) for plotting the results.\n\nThe pyroomacoustics is used for STFT, fractionnal delay filters, microphone arrays generation, and some more.\n\n    pip install git+https://github.com/LCAV/pyroomacoustics\n\nList of standard packages needed\n\n    numpy, scipy, pandas, ipyparallel, seaborn, zmq, joblib\n\nIn addition the two following libraries are not really needed to recreate the figures, but were used to resample and process the recording files\n\n    scikits.audiolab, sickits.samplerate\n\nThey require install of shared libraries\n\n    # Ubuntu code\n    apt-get install libsndfile1 libsndfile1-dev libsamplerate0 libsamplerate0-dev  # Ubuntu\n\n    # OS X install\n    brew install libsndfile\n    brew install libsamplerate\n\n\n\nSystems Tested\n--------------\n\n###Linux\n\n| Machine | ICCLUSTER EPFL                  |\n|---------|---------------------------------|\n| System  | Ubuntu 16.04.5                  |\n| CPU     | Intel Xeon E5-2680 v3 (Haswell) |\n| RAM     | 64 GB                           |\n\n###OS X\n\n| Machine | MacBook Pro Retina 15-inch, Early 2013 |\n|---------|----------------------------------------|\n| System  | OS X Maverick 10.11.6                  |\n| CPU     | Intel Core i7                          |\n| RAM     | 16 GB                                  |\n\n    System Info:\n    ------------\n    Darwin 15.6.0 Darwin Kernel Version 15.6.0: Mon Aug 29 20:21:34 PDT 2016; root:xnu-3248.60.11~1/RELEASE_X86_64 x86_64\n\n    Python Info:\n    ------------\n    Python 2.7.11 :: Anaconda custom (x86_64)\n\n    Python Packages Info (conda)\n    ----------------------------\n    # packages in environment at /Users/scheibler/anaconda:\n    accelerate                2.0.2              np110py27_p0  \n    accelerate_cudalib        2.0                           0  \n    anaconda                  custom                   py27_0  \n    ipyparallel               5.0.1                    py27_0  \n    ipython                   4.2.0                    py27_0  \n    ipython-notebook          4.0.4                    py27_0  \n    ipython-qtconsole         4.0.1                    py27_0  \n    ipython_genutils          0.1.0                    py27_0  \n    joblib                    0.9.4                    py27_0  \n    mkl                       11.3.3                        0  \n    mkl-rt                    11.1                         p0  \n    mkl-service               1.1.2                    py27_2  \n    mklfft                    2.1                np110py27_p0  \n    numpy                     1.11.0                    \u003cpip\u003e\n    numpy                     1.11.1                   py27_0  \n    numpydoc                  0.5                       \u003cpip\u003e\n    pandas                    0.18.1              np111py27_0  \n    pyzmq                     15.2.0                   py27_1  \n    scikits.audiolab          0.11.0                    \u003cpip\u003e\n    scikits.samplerate        0.3.3                     \u003cpip\u003e\n    scipy                     0.17.0                    \u003cpip\u003e\n    scipy                     0.18.0              np111py27_0  \n    seaborn                   0.7.1                    py27_0  \n    seaborn                   0.7.1                     \u003cpip\u003e\n\nLicense\n-------\n\n    Copyright (c) 2016, Hanjie Pan, Robin Scheibler, Eric Bezzam, Ivan Dokmanić, Martin Vetterli\n\n    Permission is hereby granted, free of charge, to any person obtaining a copy\n    of this software and associated documentation files (the \"Software\"), to deal\n    in the Software without restriction, including without limitation the rights\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the Software is\n    furnished to do so, subject to the following conditions:\n\n    The above copyright notice and this permission notice shall be included in all\n    copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n    SOFTWARE.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flcav%2Ffrida","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flcav%2Ffrida","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flcav%2Ffrida/lists"}