Implement Bandpass Filter on Raspberry Pi
This example shows how to use the Simulink® Support Package for Raspberry Pi® Hardware to design a bandpass filter using DSP System Toolbox™.
Prerequisites
For more information on how to use the Simulink Support Package for Raspberry Pi Hardware to run a Simulink model on Raspberry Pi hardware, see Get Started with Simulink Support Package for Raspberry Pi Hardware.
For more information on how to get started with audio signal processing applications on Raspberry Pi, see Get Started with Audio Signal Processing Using Raspberry Pi.
Required Hardware
Raspberry Pi hardware board
USB microphone
Ethernet cable
Mobile phone or any source of audio that plays the audio in WAV format
Hardware Setup
In the Hardware Setup dialog box, in the Network Settings screen, select
Connect directly to host computer
to avoid network latency.Connect a USB microphone to the Raspberry Pi hardware board.
Configure Simulink Model and Calibrate Parameters
Open the raspberrypi_audio_digitalFilter
Simulink model.
In simulation mode, you can use a Slider to adjust the frequency of the Sine Wave (DSP System Toolbox) from 1000 Hz to 8000 Hz. In code generation mode, you can deploy the Simulink model on your Raspberry Pi hardware and interface a microphone to generate the acoustic sine waves.
Simulation Sources
The Slider dashboard controls the frequency parameter of the Sine Wave block. Configure these parameters in the Slider Block Parameters dialog box.
Connect the Slider to the Sine Wave Frequency parameter.
Set the Maximum and Minimum parameters to
8000
and1000
, respectively.
Configure these parameters in the Sine Wave (DSP System Toolbox) Block Parameters dialog box.
Set Frequency (Hz) to
1000
.Set Sample time to
1/44100
.Set Samples per frame to
4410
. This value is usually the 1/10 of the value set in the Sample time parameter.
Raspberry Pi Sensors and Inputs
You can use the ALSA Audio Capture to interface a microphone with your Raspberry Pi hardware board to capture the audio signal. Configure these parameters in the ALSA Audio Capture Block Parameters dialog box.
1. Enter the Device name of the USB microphone interfaced with the Raspberry Pi hardware. To find your device name, execute these commands in the MATLAB® Command Window.
a. Establish a connection with the Raspberry Pi hardware.
r = raspberrypi('Raspberry Pi IP address','Username','Password');
b. List input devices connected to the Raspberry Pi hardware.
a = r.listAudioDevices('capture')
a =
struct with fields:
Name: 'USB-Audio-USBPnPSoundDevice ' Device: '2,0' Channels: {'1'} BitDepth: {'16-bit integer'} SamplingRate: {'44100' '48000'}
The Device field of the a
output is the device identifier.
Use this format to enter the Device name.
'plughw:<Device ID>'
For example, if the Device field is 2,0, enter 'plughw:2,0'
.
The plug plugin converts the rate, format, and channel specified in the ALSA Audio Capture Block Parameters dialog box and makes them compatible with the output of the audio device.
2. Specify the data type in which the audio device reads or sends data by selecting a value from the Device Bit Depth drop-down. From the
function, you can select the parameter value specified in the listAudioDevices
BitDepth
field.
3. Enter the Number of Channel (C) supported for the audio device. From the
function, you can select the parameter value specified in the listAudioDevices
Channels
field.
Algorithm
The default position of the Manual Switch is on the sine wave data received from the Simulation Sources area.
Design a bandpass filter using the Digital Filter Design (DSP System Toolbox) block. This filter has an order of 260 and allows a range of frequencies to pass above 3500 Hz and below 5500 Hz.
Configure these parameters in the Digital Filter Design (DSP System Toolbox) Block Parameters dialog box.
1. In the Response section, select Bandpass
.
2. In the Frequency Specifications section, set these parameters.
a. Units to Hz
b. Fs to 44100
c. Fstop1 to 3000
d. Fpass1 to 3500
e. Fpass2 to 5500
f. Fstop2 to 6000
3. In the Magnitude Specifications section, set these parameters.
a. Astop1 to 95
b. Apass to 1
c. Astop2 to 95
The Current Filter Information section shows the details for the structure, order, stability, and source for the designed filter. The Magnitude Response (dB) section shows the filter corresponding to the above specifications.
The Subsystem block in the Algorithm area receives the Filtered and the Original frequencies as inputs. This subsystem compares the amplitudes of the Original and Filtered signals and outputs a logical 1 for frequencies that lie within the bandpass range.
Display and Visualization
In the Display and Visualization area, you can view the original signal and the filtered signal on the time scope and spectrum analyzer.
Raspberry Pi Actuators and Outputs
The output of the Subsystem block in the Algorithm area is an input to the LED block in the Raspberry Pi Actuators and Outputs area. The Lamp is also connected to the input received from the LED. The lamp glows if the relative magnitude of the filtered signal is greater than 0.75, which occurs for signals with a frequency lying in the bandpass filter frequency range of the filter.
Run Simulink Model with Pacing
1. Position the Manual Switch in the Simulation Sources area to receive the simulation output from the Sine Wave (DSP System Toolbox) block.
2. On the Simulation tab of the Simulink model, select Run > Simulation Pacing.
3. In the Simulation Pacing Options dialog, select Enable pacing to slow down simulation. When you select this option, the specified pace automatically applies to the simulation.
4. Select the pace at which the model runs by using the slider or entering the pace in the Simulation time per wall clock second field.
5. Click Run.
6. Change the frequency of the Sine Wave by moving the Slider and observe the Spectrum Analyzer and Time Scope.
a. Set the frequency of the Sine Wave (DSP System Toolbox) to value below 3000 Hz, for example, 2400 Hz. Observe the output of the Spectrum Analyzer Original, Time Scope, and Spectrum Analyzer Filtered blocks. The signal does not pass through the bandpass filter. No output is visible in second port of the Time Scope block. The Lamp does not glow.
b. Set the frequency of the Sine Wave (DSP System Toolbox) to any frequency above 5500 Hz, for example, 6500 Hz. Observe the output of the Spectrum Analyzer Original, Time Scope, and Spectrum Analyzer Filtered blocks. The signal does not pass through the bandpass filter. No output is visible is in second port of the Time Scope block. The Lamp does not glow.
c. Set the frequency of the Sine Wave (DSP System Toolbox) to any frequency between 3000 Hz and 5500 Hz, for example, 4000 Hz. Observe the output of the Spectrum Analyzer Original, Time Scope, and Spectrum Analyzer Filtered blocks. The signal passes through the bandpass filter and the Lamp glows.
Simulink Model in Simulation Mode
Spectrum Analyzer Original Output
Spectrum Analyzer Filtered Output
Observe the peak at 4000 Hz.
Time Scope Output
Generate WAV Files Using createAudio
Function
Generate three audio signals at 1000 Hz, 4000 Hz, and 8000 Hz using the createAudio
function. For more information on the createAudio
function, see the Generate .wav File Using createAudio Function section in the Get Started with Audio Signal Processing Using Raspberry Pi example.
1. Create an audio signal with a frequency of 1000 Hz, signal duration of 60 seconds, and sampling frequency of 44100 Hz.
createAudio(1000,1000,60,44100)
The createAudio
function generates a WAV file in the current directory of the example with the name 1000Hz_1000Hz_60sec.wav.
2. Create an audio signal with a frequency of 4000 Hz, signal duration of 60 seconds, and sampling frequency of 44100 Hz.
createAudio(4000,4000,60,44100)
The createAudio
function generates a WAV file in the current directory of the example with the name 4000Hz_4000Hz_60sec.wav.
3. Create an audio signal with a frequency of 8000 Hz, signal duration of 60 seconds, and sampling frequency of 44100 Hz.
createAudio(8000,8000,60,44100)
The createAudio
function generates a WAV file in the current directory of the example with the name 8000Hz_8000Hz_60sec.wav.
Transfer the 1000Hz_1000Hz_60sec.wav, 4000Hz_4000Hz_60sec.wav, and 8000Hz_8000Hz_60sec.wav files to your mobile phone.
Deploy Simulink Model on Raspberry Pi Hardware
1. Position the Manual Switch in the Algorithm area to receive the output from the ALSA Audio Capture block in the Raspberry Pi Sensors and Inputs area.
2. On the Hardware tab of the Simulink model, in the Mode section, select Run on board and then click Monitor & Tune.
3. Play the 1000Hz_1000Hz_60sec.wav file on your mobile phone and place it close to the USB microphone interfaced with the Raspberry Pi hardware board.
You can observe this audio signal on the Spectrum Analyzer.
4. Observe the output on the Spectrum Analyzer and Time Scope blocks.
Spectrum Analyzer Filtered Output
The signal is attenuated and not passed through the bandpass filter and the lamp does not glow.
Time Scope Output
5. Play the 4000Hz_4000Hz_60sec.wav file on your mobile phone and place it close to the USB microphone interfaced with the Raspberry Pi hardware board.
You can observe this audio signal on the Spectrum Analyzer.
6. Observe the output on the Spectrum Analyzer and Time Scope blocks.
Spectrum Analyzer Filtered Output
The signal passes through the bandpass filter and a peak is present at 4000 Hz and the lamp glows.
Time Scope Output
7. Play the 8000Hz_8000Hz_60sec.wav file on your mobile phone and place it close to the USB microphone interfaced with the Raspberry Pi hardware board.
Observe the audio signal on the Spectrum Analyzer.
8. Observe the output on the Spectrum Analyzer and Time Scope blocks.
Spectrum Analyzer Filtered Output
The signal is attenuated and not passed through the bandpass filter and the lamp does not glow.
Time Scope Output
Other Things to Try
Design a filter other than a bandpass filter using the Digital Filter Design (DSP System Toolbox) block.
Design a filter with different stop and pass frequencies for the bandpass filter.
Change the order of the bandpass filter and observe the output on spectrum analyzer and time scope for different input frequencies.