introlab / odas

ODAS: Open embeddeD Audition System
MIT License
788 stars 251 forks source link

Hardware recommendations #232

Open prospero12 opened 3 years ago

prospero12 commented 3 years ago

Very interested in using ODAS for sound source localisation and tracking in, and across rooms with a fair amount of echo and ambient noise; thus would much appreciate any recommendations on hardware/mic arrays to use. Some options that people seem to have used, are

  1. MATRIX creator
  2. ReSpeaker v2 variants
  3. 16SoundsUSB

Cost may also play a part, but pros and cons, and any recommendations (or reasons to avoid!) would be wonderful. The key purpose (for my personal project) is to know where sound leakage and transfer is occurring.

nyxrobotics commented 3 years ago

I bought XK-USB-MIC-UF216 and Respeaker V2 and UMA-8 and ps3-eye. Between XK-USB-MIC-UF216 and Respeaker V2, XK-USB-MIC-UF216 had better beam forming performance. PS3eye has good sound quality but very poor sound source localization performance. UMA-8 will be tested in the future.

I read this article. https://arxiv.org/pdf/2103.03954.pdf

nyxrobotics commented 3 years ago

The UMA-8 was similar in performance to the XK-USB-MIC-UF216. I ordered MATRIX creator a while ago. I'm looking forward to receiving it.

prospero12 commented 3 years ago

Many thanks @nyxrobotics for the recommendations. I've since bought a ReSpeaker v2, and agree, it doesn't quite achieve what I had intended. Will investigate the UMA-8 if able.

nyxrobotics commented 3 years ago

The MATRIX creator seems to be for use with the Raspberry Pi and does not have a USB connection. It doesn't seem to be suitable for my use. The ReSpeaker v2 and the UMA-8 are quite different in performance, so you may want to try them out.

Femtofirst commented 1 year ago

Hi guys, did you use Raspberry PI or a Linux system to run the UMA-8? Any difference between this 2 options? And did you set up the device before running ODAS?

nyxrobotics commented 1 year ago

Hi guys, did you use Raspberry PI or a Linux system to run the UMA-8? Any difference between this 2 options? And did you set up the device before running ODAS?

You have to write firmware with windows. I referenced this article.

  1. Create account in minidsp website
  2. Download a file name like micArray_VF_v1.3_mac_dfu_v2_20.zip
  3. Install windows DFU driver with Windows_Driver/miniDSP_UAC2_v4.82.0_2020-06-09_setup.exe
  4. Reboot windows
  5. Run miniDSP_UAC2_DFU_Win/miniDSPUAC2Dfu.exe
  6. Brouse -> micArray_vf_raw_v1.3_up.bin
  7. Start
Femtofirst commented 1 year ago

Hi guys, did you use Raspberry PI or a Linux system to run the UMA-8? Any difference between this 2 options? And did you set up the device before running ODAS?

You have to write firmware with windows. I referenced this article.

1. Create account in [minidsp](https://www.minidsp.com/userdownloads/usb-mic-array-series) website

2. Download a file name like `micArray_VF_v1.3_mac_dfu_v2_20.zip`

3. Install windows DFU driver with `Windows_Driver/miniDSP_UAC2_v4.82.0_2020-06-09_setup.exe`

4. Reboot windows

5. Run `miniDSP_UAC2_DFU_Win/miniDSPUAC2Dfu.exe`

6. `Brouse -> micArray_vf_raw_v1.3_up.bin`

7. Start

Thanks a lot! I am new to this so here is another question - after writing the firmware with windows, can I unplug it and use it on another Ubuntu computer? - Will the settings remain in the device and wont be affected by the change of the system?

nyxrobotics commented 1 year ago

Thanks a lot! I am new to this so here is another question - after writing the firmware with windows, can I unplug it and use it on another Ubuntu computer? - Will the settings remain in the device and wont be affected by the change of the system?

Yes. It is successful if the 8ch microphone device is recognized when connected to ubuntu. (I haven't tried the Raspberry pi.)

Femtofirst commented 1 year ago

Thanks a lot! I am new to this so here is another question - after writing the firmware with windows, can I unplug it and use it on another Ubuntu computer? - Will the settings remain in the device and wont be affected by the change of the system?

Yes. It is successful if the 8ch microphone device is recognized when connected to ubuntu.

Thank you so much! I am also using Ubuntu instead of raspberry PI - it's weird that my device is recognized when connected to the pc, but when I was trying to run ODAS with minidsp.cfg the system says 'Source hops: Cannot set sample format: Invalid argument'.

Do you maybe know what is the problem? And which configuration file did you use to run odas?

nyxrobotics commented 1 year ago

My config here. Please copy and paste it.

minidsp_uma8.cfg ``` # Configuration file for XMOS circular sound card version = "2.1"; # Raw raw: { fS = 48000; hopSize = 512; nBits = 32; nChannels = 8; # Input with raw signal from microphones interface: { type = "soundcard"; card = 2; device = 0; } } # Mapping mapping: { map: (1, 2, 3, 4, 5, 6, 7); } # General general: { epsilon = 1E-20; size: { hopSize = 128; frameSize = 256; }; samplerate: { mu = 16000; sigma2 = 0.01; }; speedofsound: { mu = 343.0; sigma2 = 25.0; }; mics = ( # Microphone 0 { mu = ( +0.000, +0.000, +0.000 ); sigma2 = ( +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000 ); direction = ( +0.000, +0.000, +1.000 ); angle = ( 90.0, 100.0 ); }, # Microphone 1 { mu = ( +0.000, +0.043, +0.000 ); sigma2 = ( +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000 ); direction = ( +0.000, +0.000, +1.000 ); angle = ( 90.0, 100.0 ); }, # Microphone 2 { mu = ( +0.037, +0.021, +0.000 ); sigma2 = ( +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000 ); direction = ( +0.000, +0.000, +1.000 ); angle = ( 90.0, 100.0 ); }, # Microphone 3 { mu = ( +0.037, -0.021, +0.000 ); sigma2 = ( +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000 ); direction = ( +0.000, +0.000, +1.000 ); angle = ( 90.0, 100.0 ); }, # Microphone 4 { mu = ( +0.000, -0.043, +0.000 ); sigma2 = ( +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000 ); direction = ( +0.000, +0.000, +1.000 ); angle = ( 90.0, 100.0 ); }, # Microphone 5 { mu = ( -0.037, -0.021, +0.000 ); sigma2 = ( +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000 ); direction = ( +0.000, +0.000, +1.000 ); angle = ( 90.0, 100.0 ); }, # Microphone 6 { mu = ( -0.037, +0.021, +0.000 ); sigma2 = ( +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000, +0.000 ); direction = ( +0.000, +0.000, +1.000 ); angle = ( 90.0, 100.0 ); } ); # Spatial filters to include only a range of direction if required # (may be useful to remove false detections from the floor, or # limit the space search to a restricted region) spatialfilters = ( { direction = ( +0.000, +0.000, +1.000 ); angle = (90.0, 95.0); } ); nThetas = 181; gainMin = 0.25; }; # Stationnary noise estimation sne: { b = 3; alphaS = 0.1; L = 150; delta = 3.0; alphaD = 0.1; }; # Sound Source Localization ssl: { nPots = 4; nMatches = 10; probMin = 0.5; nRefinedLevels = 1; interpRate = 4; # Number of scans: level is the resolution of the sphere # and delta is the size of the maximum sliding window # (delta = -1 means the size is automatically computed) scans = ( { level = 2; delta = -1; }, { level = 4; delta = -1; } ); # Output to export potential sources potential: { format = "json"; interface: { type = "socket"; ip = "127.0.0.1"; port = 9001; }; }; }; # Sound Source Tracking sst: { # Mode is either "kalman" or "particle" mode = "kalman"; # Add is either "static" or "dynamic" add = "dynamic"; # Parameters used by both the Kalman and particle filter active = ( { weight = 1.0; mu = 0.4; sigma2 = 0.0025 } ); inactive = ( { weight = 1.0; mu = 0.25; sigma2 = 0.0025 } ); sigmaR2_prob = 0.0025; sigmaR2_active = 0.0225; sigmaR2_target = 0.0025; Pfalse = 0.1; Pnew = 0.1; Ptrack = 0.8; theta_new = 0.3; N_prob = 5; theta_prob = 0.8; N_inactive = ( 150, 150, 150, 150 ); theta_inactive = 0.9; # Parameters used by the Kalman filter only kalman: { sigmaQ = 0.001; }; # Parameters used by the particle filter only particle: { nParticles = 1000; st_alpha = 2.0; st_beta = 0.04; st_ratio = 0.5; ve_alpha = 0.05; ve_beta = 0.2; ve_ratio = 0.3; ac_alpha = 0.5; ac_beta = 0.2; ac_ratio = 0.2; Nmin = 0.7; }; target: (); # Output to export tracked sources tracked: { format = "json"; interface: { type = "socket"; ip = "127.0.0.1"; port = 9000; }; }; }; sss: { # Mode is either "dds", "dgss" or "dmvdr" mode_sep = "dds"; mode_pf = "ss"; gain_sep = 1.0; gain_pf = 10.0; dds: { }; dgss: { mu = 0.01; lambda = 0.5; }; dmvdr: { }; ms: { alphaPmin = 0.07; eta = 0.5; alphaZ = 0.8; thetaWin = 0.3; alphaWin = 0.3; maxAbsenceProb = 0.9; Gmin = 0.01; winSizeLocal = 3; winSizeGlobal = 23; winSizeFrame = 256; }; ss: { Gmin = 0.01; Gmid = 0.5; Gslope = 10.0; } separated: { fS = 16000; hopSize = 128; nBits = 16; format = "json"; interface: { type = "socket"; ip = "127.0.0.1"; port = 10000; }; }; postfiltered: { fS = 16000; hopSize = 128; nBits = 16; gain = 10.0; format = "json"; interface: { type = "socket"; ip = "127.0.0.1"; port = 10010; }; }; }; classify: { frameSize = 4096; winSize = 3; tauMin = 88; tauMax = 551; deltaTauMax = 20; alpha = 0.3; gamma = 0.05; phiMin = 0.5; r0 = 0.2; category: { format = "undefined"; interface: { type = "blackhole"; } } }; ```
nyxrobotics commented 1 year ago

The pactl list sources command can be used to check the number of channels, data format (16bit/32bit), and sampling rate of the sound card being used. This should be reflected in the configuration file.

Femtofirst commented 1 year ago

Thank you so much! That is very helpful! I have followed your tutorial and now it reports something different:

Sink pots: Cannot connect to server Sink tracks: Cannot connect to server

Guess it is some kind of network error?

nyxrobotics commented 1 year ago

Thank you so much! That is very helpful! I have followed your tutorial and now it reports something different:

Sink pots: Cannot connect to server Sink tracks: Cannot connect to server

Guess it is some kind of network error?

odaslive doesn't work with that error. Let me know if it works. In the meantime, you can try odas_web.

cd odas_web
npm install
npm start
Femtofirst commented 1 year ago

Thanks a lot! I will do that and let you know if the problem is solved later <3

nyxrobotics commented 1 year ago

In the configuration file, you need to specify the port on which the sound card is recognized. Use the arecord -l command to see which port the device is recognized on and edit the number in interface.

Femtofirst commented 1 year ago

In the configuration file, you need to specify the port on which the sound card is recognized. Use the arecord -l command to see which port the device is recognized on and edit the number in interface.

Thank you! Finally odas is running! Now I just need to get the GUI work