Acquire and Analyze Sound Pressure Data From an IEPE Microphone

This example shows how to acquire and display sound pressure data from a PCB® IEPE array microphone, Model 130E20. The sensor is recording sound pressure generated by a tuning fork at Middle C (261.626 Hz) frequency.

Discover Devices That Support Microphones

To discover a device that supports microphone measurements, access the device in the table returned by the daqlist command. For this example, the microphone is connected on channel 0 of National Instruments® device NI 9234 on CompactDAQ Chassis NI cDAQ-9178 with ID cDAQ1Mod3.

d = daqlist("ni")
d =

  12×4 table

     DeviceID                 Description                    Model             DeviceInfo     
    ___________    __________________________________    _____________    ____________________

    "cDAQ1Mod1"    "National Instruments NI 9205"        "NI 9205"        [1×1 daq.DeviceInfo]
    "cDAQ1Mod2"    "National Instruments NI 9263"        "NI 9263"        [1×1 daq.DeviceInfo]
    "cDAQ1Mod3"    "National Instruments NI 9234"        "NI 9234"        [1×1 daq.DeviceInfo]
    "cDAQ1Mod4"    "National Instruments NI 9201"        "NI 9201"        [1×1 daq.DeviceInfo]
    "cDAQ1Mod5"    "National Instruments NI 9402"        "NI 9402"        [1×1 daq.DeviceInfo]
    "cDAQ1Mod6"    "National Instruments NI 9213"        "NI 9213"        [1×1 daq.DeviceInfo]
    "cDAQ1Mod7"    "National Instruments NI 9219"        "NI 9219"        [1×1 daq.DeviceInfo]
    "cDAQ1Mod8"    "National Instruments NI 9265"        "NI 9265"        [1×1 daq.DeviceInfo]
    "Dev1"         "National Instruments PCIe-6363"      "PCIe-6363"      [1×1 daq.DeviceInfo]
    "Dev2"         "National Instruments NI ELVIS II"    "NI ELVIS II"    [1×1 daq.DeviceInfo]
    "Dev3"         "National Instruments PCIe-6363"      "PCIe-6363"      [1×1 daq.DeviceInfo]
    "Dev4"         "National Instruments PCIe-6363"      "PCIe-6363"      [1×1 daq.DeviceInfo]

deviceInfo = d{3, "DeviceInfo"}
deviceInfo = 

ni: National Instruments NI 9234 (Device ID: 'cDAQ1Mod3')
   Analog input supports:
      -5.0 to +5.0 Volts range
      Rates from 1000.0 to 51200.0 scans/sec
      4 channels ('ai0','ai1','ai2','ai3')
      'Voltage','Accelerometer','Microphone','IEPE' measurement types
   
This module is in slot 3 of the 'cDAQ-9178' chassis with the name 'cDAQ1'.


Create a DataAcquisition and Add Microphone Channel

Create a DataAcquisition and add a channel with Microphone measurement type.

dq = daq("ni");
ch = addinput(dq, "cDAQ1Mod3", "ai0", "Microphone");

Set Sensor Properties

Set the microphone channel Sensitivity property to the value specified in the sensor's data sheet. For this sensor, the Sensitivity value is 0.037 Volts/Pascal. Examine the channel properties to see the changes in the device configuration.

ch.Sensitivity = 0.037;
ch
ch = 

    Index    Type      Device       Channel     Measurement Type              Range                  Name      
    _____    ____    ___________    _______    ___________________    ______________________    _______________

      1      "ai"    "cDAQ1Mod3"     "ai0"     "Microphone (Diff)"    "-200 to +200 Pascals"    "cDAQ1Mod3_ai0"

Configure and Start Acquisition

Set the acquisition scan rate to 51200 scans per second, then use read to acquire four seconds of data.

dq.Rate = 51200;
tt = read(dq, seconds(4));
t = tt.Time;
data = tt.cDAQ1Mod3_ai0;

Analyze Data

Use audioplayer to play back the acquired microphone signal

p = audioplayer(data, dq.Rate);
play(p);

Examine the Data in the Time Domain

plot(t, data);
ylabel('Sound Pressure (pascals)');

Examine the Data in the Frequency Domain

Use fft and the following parameters to calculate the single-sided amplitude spectrum of the incoming data:

  • Calculate the length of signal (number of samples or entries in the table)

  • Calculate the nfft

  • Calculate amplitude and frequency

len = height(tt);
nfft = 2^nextpow2(len);
y = fft(data,nfft)/len;
f = dq.Rate/2*linspace(0,1,nfft/2+1);
A = 2*abs(y(1:nfft/2+1));

Plot the Single-Sided Amplitude Spectrum

plot(f,A);
xlim([0 1000]);
xlabel('Frequency (Hz)');
ylabel('Amplitude');

The plot shows a spike at 261.626 Hz. This matches the frequency of the tuning fork.