Active Noise Reduction
Welcome to the project page for my semester-long exploratory project in Digital Signal Processing!
This page will serve as a blog as I complete this project.
I hope that my experiences completing this project will prepare me well to work in the field of audio electronics and signal processing, as well as introduce me to the applications and real-world computational hardware and software involved in Digital Signal Processing.
Starting off: Research
The fundamentals of this design were inspired by a super helpful Active Noise Control example provided by MathWorks.
Photo from MathWorks.com
The MathWorks example works with a duct, as seen in the image above. The goal is to use information from the error microphone to cancel noise fro the noise source by sending an inverted signal through the ANC loudspeaker and secondary path. As referenced in their article, this problem is fantastic for an introduction to Active Noise Control. The relative simplicity of the system allows for easy high-level understanding of the components at play. Its large size and common components make the design simple to replicate and control. The length of the primary path also plays a critical role in the feasibility of the project. This particular primary path was designed to be 34cm long, meaning it takes sound 1ms to traverse the path. This relatively long travelling period allows for the computations being performed by the DSP to take a relatively long time, allowing for imperfections which are expected from a beginner project.
The Bela (Left) and Bela Mini (Rights) boards
Knowing that I want to base the physical structure of my project on the example above, I began searching for a DSP or MCU that I can code to perform the way I'd like. I ended up looking into the Analog Devices EVAL-ADAU1701MINIZ, which is an evaluation kit meant to be programmed using software called SigmaStudio. The programming is block-based, on a similar level to Simulink. This board would have worked, except it only supports one audio input and output. For this project, I would like to have at least two audio inputs to accommodate the reference and error microphones. During my Music and Technology course in the Spring of 2022, my professor made us aware of an Arduino-like small company that produces audio-specific boards. This is the Bela board, and it has support for the inputs and outputs I would like. It is also designed to process multiple inputs at 44.1kHz for audio-based applications, making it perfect for this project. It is coded using C++.
Experimental Setup and Procedure
I began by constructing the experimental setup from the MathWorks example.
The most important parameter of the active noise cancelling system is the adaptive filter which will approximate the environmental effect of the system before the anti-noise signal combines with it.
On the right is the measured impulse response of the primary path, recorded using a microphone connected to my computer using audacity.
This second photo is the secondary path response, measured using the same methodology as the primary path.
Active noise cancelling will be achieved by passing the recorded input audio through an adaptive filter which predicts the effects of both the primary and secondary paths so that the spectral power of the anti noise and noise signals are matched to achieve maximal cancellation.
The complete system in Simulink is pictured to the right. For initial testing, the signal passed in is simple white noise. The systems efficacy is tested by seeing how much of the input signal remains after the cancellation system acts on it.
The resulting primary path filter's frequency response as approximated by MATLAB is pictured to the left.
The output of the initial system (blue) compared with the input white noise (yellow). The first iteration of the active noise cancellation system showed about 50% ability to cancel input signal.