delay and sum beamforming(in frequency domain)

25 views (last 30 days)
I have 8 microphones (excluding the origin[0;0]) arranged in circular geometry. And I have a sound source placed at a certain location (say 2mts) away from the array. The source should produce signal(say sinusoid) and it should impinge on microphones with certain delays due to its geometry.
Now i need to simulate this idea in MATLAB and plot the beam pattern by performing beamforming for the microphone array.
Here is my code so far:
clc
clear all
close all
Antenna_X_Pos=[-0.0025; 0.1406; -0.0685;-0.1134;0.1160;0.0640;-0.1471;-0.0013];
Antenna_Y_Pos=[0.0546;-0.1323;-0.2277;-0.0053;-0.0069;-0.2296;-0.1289;-0.0949];
Antenna_Z_Pos=[0.3446;0.2975;0.2605;0.2179;0.1770;0.1361; 0.0928 ; 0.2177];
scatter3(Antenna_X_Pos,Antenna_Y_Pos,Antenna_Z_Pos,'filled'),view(-60,60)
for j=1:360
theta(j)=degtorad(j);
[SP_X(j) SP_Y(j)] = pol2cart(theta(j),10);
for i=1:numel(Antenna_X_Pos)
Distance(i,j) = sqrt((Antenna_X_Pos(i) - SP_X(j))^2 +(Antenna_Y_Pos(i) - SP_Y(j))^2);
end
end
%plot(Distance)
Dist_m=Distance(1,:);
mMinusM1 = bsxfun(@minus,Distance,Dist_m);
speed_sound = 340; %speed of sound in meters
Time_delay = (mMinusM1/speed_sound)*10e3; %time delay in milliseconds
max((max(Time_delay)));
plot(Time_delay); % time delay plot for 8 microphones(including the origin of array)
Now how can I place the source(say a sinusoid) at the particular location and perform beamforming using the microphone array from that particular direction where the source is placed?
My final goal is to simulate conventional beamformer (Delay and Sum) algorithm.
am I missing some idea/trick? please help!!

Accepted Answer

Honglei Chen
Honglei Chen on 15 Dec 2011
Hi Zoro,
What you have so far is calculating the delays between the elements. The next steps will be
(1) simulate the received signal at each element. Here you need to use the delay you just calculated to delay the signal at each element accordingly.
(2) You can then use delay and sum beamformer to align the received together and see the combined signal.
(1) and (2) are essentially inverse operations. Because you are dealing with microphone signals, the signal by nature is wideband. So there are two ways you can do it, either you do the delay-and-sum in the time domain or you have to break the signal into narrowbands, do the delay-and-sum in frequency domain at each band and then combine result at each narrowband together to get the final result.
  1 Comment
zozo
zozo on 29 Dec 2011
Hello,
I have succesfully carried out the steps you suggested above and now I have a combined signal of dimensions 1x3001.
Now I would like to plot the beampattern for the signal to check if it localises the source I had placed at (SP_X, SP_Y, SP_Z) that is have my main lobe should be at those angles(azimuth,elevation).
How can I go about doing this from my signal above (1x3001) ?

Sign in to comment.

More Answers (1)

Wayne King
Wayne King on 14 Dec 2011
Edited: John Kelly on 27 May 2014
Hi Zozo, Are you able to use the Phased Array System Toolbox?
The Phased Array System Toolbox has a delay-sum narrowband beamformer (as well as a number of other beamforming algorithms).
See Narrowband (Phase Shift) Beamformer with a ULA for an example.
You can simulate arrays and directional of arrival easily.
  3 Comments
Wayne King
Wayne King on 14 Dec 2011
The Phased Array Toolbox is all written in the MATLAB language. If you own that toolbox, you are able to see the MATLAB code.
zozo
zozo on 14 Dec 2011
yes I know..but i dont have it in my version of MATLAB. :(
I use version 7.10.0(R2010a)

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!