Clear Filters
Clear Filters

How to use MVDREstimator2D with real acoustic signals received by rectangle Microphone array ?

2 views (last 30 days)
Hi,I have a microphone array consisting of 8 MEMS microphones, and I recorded an audio piece for testing the MVDREstimator2D.
Before the test, I made a simulation with chirp signal and my array successfully. But what confuses me is that the real signal test result is so bad.
I want to know the reason and how to solve this problem.
My recording code is as follows:
clear; close all; clc;
%The sample rate of my array is 44100
deviceReader = audioDeviceReader('Device','MicArray (YDM8MIC Audio)','ChannelMappingSource','Auto','NumChannels',8);
setup(deviceReader);
fileWriter = dsp.AudioFileWriter('audio_for_test/mySpeech.wav','FileFormat','WAV');
disp('Start...');
tic
while toc < 5 % Record for 5 seconds
acquiredAudio = deviceReader();
fileWriter(acquiredAudio);
end
disp('End');
release(deviceReader)
release(fileWriter)
My estimator code:
close all;clear;
clc;
microphone = phased.OmnidirectionalMicrophoneElement;
array = phased.URA('Size',[2 4],'ElementSpacing',[0.03 0.03],'Element',microphone); % Just as my real array
estimator = phased.MVDREstimator2D('SensorArray',array,...
'DOAOutputPort',true,'NumSignals',1,'OperatingFrequency',44100,'PropagationSpeed',343, ...
'AzimuthScanAngles',-90:90,...
'ElevationScanAngles',-90:90);
[~,doas] = estimator(data); % data is from mySpeech.wav
figure;
plotSpectrum(estimator);
xlabel('Azi(degree)')
ylabel('Ele(degree)')
zlabel('Power(dB)');
My test audio file ‘mySpeech.wav’ is stored in the compressed file attached.

Accepted Answer

George
George on 12 Feb 2024
Hello,
I am not sure what your final goal is with this analysis, because you are using the MVDREstimator2D, I assume that you want to estimate the direction of arrival of your sound source.
The data that you provide appears to be real valued, unmodulated data. I do not see any examples of the MVDREstimator2D being used with this type of data. I recommend you try using one of the estimators that is documented to work with real, unmodulated signals.
For example, you could try the GCC Estimator:
close all;clear;
clc;
microphone = phased.OmnidirectionalMicrophoneElement;
array = phased.URA('Size',[2 4],'ElementSpacing',[0.03 0.03],'Element',microphone); % Just as my real array
data = audioread("mySpeech.wav");
estimator = phased.GCCEstimator('SensorArray',array,...
'PropagationSpeed',343,'SampleRate',44100);
doas = estimator(data);
To see the list of estimators, visit this documentation page:
If the goal of your analysis is actually beamforming - i.e. you want to amplify the sound in the direction of your signal source and suppress noise coming from other directions, you could try using one of the wideband beamformers found here:

More Answers (0)

Products


Release

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!