odas icon indicating copy to clipboard operation
odas copied to clipboard

Hardware recommendations

Open prospero12 opened this issue 3 years ago • 16 comments

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.

prospero12 avatar May 18 '21 00:05 prospero12

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 avatar Jun 14 '21 11:06 nyxrobotics

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.

nyxrobotics avatar Jun 18 '21 09:06 nyxrobotics

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.

prospero12 avatar Jun 21 '21 04:06 prospero12

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.

nyxrobotics avatar Jun 28 '21 13:06 nyxrobotics

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?

Femtofirst avatar Jun 23 '23 09:06 Femtofirst

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

nyxrobotics avatar Jun 23 '23 09:06 nyxrobotics

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?

Femtofirst avatar Jun 23 '23 09:06 Femtofirst

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.)

nyxrobotics avatar Jun 23 '23 09:06 nyxrobotics

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?

Femtofirst avatar Jun 23 '23 09:06 Femtofirst

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 avatar Jun 23 '23 09:06 nyxrobotics

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.

nyxrobotics avatar Jun 23 '23 09:06 nyxrobotics

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?

Femtofirst avatar Jun 23 '23 09:06 Femtofirst

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

nyxrobotics avatar Jun 23 '23 09:06 nyxrobotics

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

Femtofirst avatar Jun 23 '23 10:06 Femtofirst

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.

nyxrobotics avatar Jun 23 '23 10:06 nyxrobotics

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

Femtofirst avatar Jun 27 '23 09:06 Femtofirst