Bobbie
Done this week
This week I wrote a program for interactively running HINT tests. It requires pre-generated audio at varying SNRs, but this helps make the program more portable (as opposed to generating noise at runtime using Matlab).
The chest harness did not arrive until very late in the week, so I did not make any progress on that front.
Last week we had issues with getting a usable and relatively clean signal out of the electret microphones from Professor Sullivan. I worked on an amplification circuit to bring the voltage values to the range of the Teensy’s ADC, but the signal was incredibly noisy so this was unsuccessful. I did consider building a more complex circuit to try and filter out the largest frequency component of the noise (60 Hz), but I thought this would be not worth the time, as Sean put in the redesigned PCB order so we should have it early next week.
I also walked Kevin through some of the utility code for generating test signals that I had written earlier in the semester. This highlighted the fact that a lot of the code I had written was not very well documented, so that is something I will work on going forwards.
Goals for next week
- Build mount for microphones to attach to the purchased chest harness
- Document existing Matlab utility code
- Convert SDW-MWF Matlab code to C using Matlab Coder and adjust for inputs and outputs to be taken in real-time
Kevin
Done this week
This week I worked on refining the matlab code for adaptive beamforming. The matlab implementation uses frost beamforming and is now successfully able to take a linear, uniform array of microphones of arbitrary elements n and implement frost beamforming on multiple voice inputs. The code in the link given below is able to take a specific “steering angle”, in our case 0 degrees because the signal of interest is targeted to be directly in front of our user, and reduce the signal inputs coming from other directions.
The link to the matlab file is the following: https://drive.google.com/drive/folders/1E8JMs5zqOZoTGYU2UY8XqLxLb3x19juc?usp=sharing
If you download and run the file, you should be able to hear two different audio outputs. The first one is the sound from all three audio files. You will notice that the laughter noise drowns out almost all other noise, making the speech files inaudible. The second audio output is after frost beamforming is applied. You will notice that the speech file is very audible.
Goals for next week
There are several elements of the code that need to be further explored. First, I utilized diagonal loading which is a MATLAB built-in that I read can help robustness of beamforming. I noticed that utilizing this helped make the output audios more clear and understandable. My goal is to look deeper and understand what diagonal loading does and how it improves robustness. Additionally, we have yet to receive our new PCB boards, so the goal is to test this code on real microphone inputs once we build our microphone circuits.
Sean
Done this Week
This week, we realized our PCBs for our microphones wouldn’t work due to some of the traces overlapping with a ground pad, so I redesigned the PCB to have a via through to the other side of the board to avoid this issue. I soldered the audio shield to the Teensy board, and got audio output working through the shield to headphones.
I tried to get audio working with the mics professor Sullivan gave us, and the audio input on the Teensy worked, but the mics were too noisy to get any meaningful audio from them.
I also got a 3.072 MHz clock output from the Teensy that we can use to drive the data input from the surface mount microphones.
Goals for Next Week
Once we get our second iteration of the PCBs, I will start to get audio input from them onto the Teensy.
I will work with Kevin and Bobbie to convert their working audio processing functions into C/Arduino code that we can put on the Teensy.