Main Content

Desktop Real-Time Audio Acceleration with MATLAB Coder

This example shows how to accelerate a real-time audio application using C code generation with MATLAB® Coder™. You must have the MATLAB Coder™ software installed to run this example.

Introduction

Replacing parts of your MATLAB code with an automatically generated MATLAB executable (MEX-function) can speed up simulation. Using MATLAB Coder, you can generate readable and portable C code and compile it into a MEX-function that replaces the equivalent section of your MATLAB algorithm.

This example showcases code generation using an audio notch filtering application.

Notch Filtering

A notch filter is used to eliminate a specific frequency from a signal. Typical filter design parameters for notch filters are the notch center frequency and the 3 dB bandwidth. The center frequency is the frequency at which the filter has a linear gain of zero. The 3 dB bandwidth measures the frequency width of the notch of the filter computed at the half-power or 3 dB attenuation point.

The helper function used in this example is helperAudioToneRemoval. The function reads an audio signal corrupted by a 250 Hz sinusoidal tone from a file. helperAudioToneRemoval uses a notch filter to remove the interfering tone and writes the filtered signal to a file.

You can visualize the corrupted audio signal using a spectrum analyzer.

reader = dsp.AudioFileReader("guitar_plus_tone.ogg");

scope = spectrumAnalyzer(SampleRate=reader.SampleRate, ...
    RBWSource="property",RBW=5, ...
    PlotAsTwoSidedSpectrum=false, ...
    FrequencySpan="start-and-stop-frequencies", ...
    StartFrequency=20, ...
    StopFrequency=1000, ...
    Title="Audio signal corrupted by 250 Hz tone");

while ~isDone(reader)
    audio = reader();
    scope(audio(:,1));
end

C Code Generation Speedup

Measure the time it takes to read the audio file, filter out the interfering tone, and write the filtered output using MATLAB code.

tic
helperAudioToneRemoval
t1 = toc;

fprintf("MATLAB Simulation Time: %d\n",t1)
MATLAB Simulation Time: 2.732519e+00

Next, generate a MEX-function from helperAudioToneRemoval using the MATLAB Coder function, codegen (MATLAB Coder).

codegen helperAudioToneRemoval
Code generation successful.

Measure the time it takes to execute the MEX-function and calculate the speedup gain with a compiled function.

tic
helperAudioToneRemoval_mex
t2 = toc;

fprintf("Code Generation Simulation Time: %d\n",t2)
Code Generation Simulation Time: 9.064711e-01
fprintf("Speedup factor: %6.2f\n",t1/t2)
Speedup factor:   3.01

Related Topics