Effacer les filtres
Effacer les filtres

Differential beamforming - audio data processing

3 vues (au cours des 30 derniers jours)
Marko Jankovic
Marko Jankovic le 28 Juin 2023
Dear,
For a long time I have been trying to realize differential beamforming with the microphone array of 3 microphones (uniform linear array) and the diffbfweights function in Matlab.
Unfortunately without success.
The algorithm follows the description from the literature on the basis of which this function was created:
where represet coefficients (complex conjugate of coefficients).
My question is, does the result of the diffbfweights function represent the coefficients with which we need to multiply the frequency bins ?
Does anyone have experience with how to apply the coefficients obtained by the diffbfweights function to the audio signal from the microphones?
I asked similar questions on the forum, but unfortunately without success.
Thanks in advance!

Réponse acceptée

William Rose
William Rose le 29 Juin 2023
When you say you have tried to do differential beamforming without success, what exactly did you do? How do you know you were unsuccessful?
You wrote: "My question is, does the result of the diffbfweights function represent the coefficients with which we need to multiply the frequency bins?"
Yes: the values from diffbfweights() are the complex numbers which you use to multiply the corresponding frequencies from the microphones. I recommend you do it with a regular Fourier transform first, not the time-dependent Fourier transform. Whether you do it with a regular Fourier transform or the STFT, you need to make sure you have weighting factors from diffbfweights() at the same frequencies that are the frequencies in the transform. Remember to apply the multipliers to the positive and negative parts of each frequency.
A differential microphone array maximizes sensitivity in a preferred direction and reduces sensitivity in unwanted directions. The code below creates a linear array of 3 microphones; it uses diffbfweights() to find the weights at the frequencies of interest; it displays the results. Experiment with different values of n, argc (including multiple nulls), etc.
n=3; c=343; % number of mics, speed of sound (m/s)
f=1000:+1000:4000; % frequencies of interest (Hz)
lambda=c./f; % wavelengths (m)
d=0.2*lambda(end); % mic spacing (m)
wts=zeros(n,length(f)); % array for weights
pos=zeros(3,n,length(f)); % array for positions (in wavelength units)
angc=0; % angle for the null
for j=1:length(f)
[wts(:,j),pos(:,:,j)]=diffbfweights(n,d/lambda(j),angc); % compute weights
end
% Compute response at each frequency
angp=-180:180;
for j = 1:length(f)
bp(:,j) = arrayfactor(pos(:,:,j),angp,wts(:,j));
end
% Display results
polarpattern(angp,mag2db(abs(bp)),'NormalizeData',true, ...
'MagnitudeLimMode','manual','MagnitudeLim',[-50 0])
legend(num2str(f'))
I don't have the phased array toolbox, so I cannot experiment with diffbfweights() except in a window like this.
Good luck.

Plus de réponses (0)

Produits


Version

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by