Weekly Status Report #8: 11/10

Kevin

Done this week

I started this week off by looking into converting our MATLAB code into C/C++.  I utilized MATLAB coder, however quickly realized that the coder would not provide direct code that we could utilize.  The biggest issue that I came across was that a number of built-in MATLAB functionalities could not be directly converted.  After changin a lot of the MATLAB built-ins to hand-coded functions, I ended up with one final error which was in coder’s conversion of our frostbeamformer.

While waiting for microphones, I also decided to do more research on beamforming.  More specifically, I have not read too much literature on how reverberant noise affects beamforming algorithms.  Below I included some of the notes I took on different online literature in order to keep notes not only for the progress of this project but also for the future report we will have to write.

 

NOTES:

  • What is beamforming
    • Beamforming is achieved by filtering the microphone signals and combining the outputs to extract (by constructive combining) the desired signal and reject (by destructive combining) interfering signals according to their spatial location.
  • How to model reverberant noise
    • MSS (multichannel source separation): process of estimating signals from N unobserved sources, given M microphones
  • Si and xj are the source and mixture signals respectively, hji is a P-point Room Impulse Response (RIR) from source i to microphone j, P is the number of paths between each source-microphone pair and ∆ is the delay of the pth path from source j to microphone i
  • Question: how to model each different path given an unknown room?
  • Time-domain vs. frequency-domain beamforming
    • Broadband speech signals can utilize either beamforming techniques

GOALS FOR NEXT WEEK

  • Frostbeamforming conversion to C-code
  • Start building rig for microphones

Bobbie

Done this week

This week I worked primarily on documenting our existing Matlab code and using Matlab Coder to convert my SDW-MWF implementation into C code. Matlab Coder has certain limitations that make it different from running Matlab directly. For example, system objects cannot take variable length inputs, and variable types must be explicitly declared and cannot change.

The resulting code (excerpt above) is also ugly. This means that it’s more important than ever to have properly documented Matlab source code before generating to C (as comments are preserved).

I also wrote a quick Makefile for actually compiling code which calls into the shared library.
This took an embarrassing amount of time (a few hours) to figure out.

 

I also tweaked the HINT runner to interactively prompt as if a real HINT test is being run, i.e. with binary search on the example tests to find the proper range of SNRs to run it at.

On the chest mount, since our second PCB arrived and was also not correct, I did not have mics to mount. However, the chest mount we ordered did arrive and I took a look at it; it works very well for our purposes and should only require drilling a couple holes to bolt on a rigid surface like polycarbonate to get the microphones on.

Goals for next week

  • Work with Sean to get audio input from our newly ordered mics through the Teensy audio shield.
  • Process the input on the SDW-MWF C code, and evaluate maximum sampling rate for real-time operation.

 

Sean

Done this week

I ordered a few different microphones to try some simple audio input. I ordered some I2S microphones with breakout boards so we can easily get inputs to the board. These microphones have been tested with the Teensy board and there are tutorials on how to set the up with the board. I also ordered breakout board for the current PDM microphones we have, in case we want to go forward with that.

I soldered the board together and got audio output working through the audio shield this week. I also was able to generate a low-jitter 2 MHz clock on the board to a digital pin, which we can use to drive the microphone data. I finished most of the set up code for outputting the clock, left/right select lines, data in lines, and audio output through the audio shield. I’ve also started on processing 4 audio inputs at once.

Goals for next week

Next week, I need to get an audio signal into the board through our microphones. I will test both types of microphones after they come in, and continue to work on C code adaptations of the Matlab algorithms in the meantime. The microphone integration is vital, and I need to get that done as soon as possible after they arrive.

I will also be working on multithreading the audio input on the Teensy board. There are a few ways this can be done, and I’m currently deciding which option to pursue.

Leave a Reply

Your email address will not be published. Required fields are marked *