Dear Here
I give you a sample code for creating the filter
coefficients of a Delay and Sum beamformer. if you
have any question you can contact me on my email
palange@hotmail.fr

Have a nice day.

[code]

c = 340; % m/s

nfft = 128; % nfft length

i_omega
= -i*2*pi/c; % f will be variable

n_mic = 7;

mics = [ (-10*3:10:10*3)' zeros(7,1) ]/100;

source
= [-0.2 0.63]; % to be measured

fs = 22050; %
Sampling Frequency

f = (0:nfft-1)*fs/nfft; %
Frequency bins

W = zeros(n_mic,nfft);

d =
zeros(n_mic,1);

w = zeros(n_mic,1);

r = zeros(n_mic,1);

u = zeros(n_mic,1);

bp = zeros(nfft,181);

bps = zeros(1,181);

% Filter Coef

for
k = 1:n_mic

r(k) = norm( source - mics(k,:));

end

index = 1;

for p=f

d = exp(i_omega*p*r)./r;

w=d.*r;

w=w/abs(w'*d);

W(:,index) = w;

theta_v=[-90:1:90];

source_n=norm(source);

for theta = theta_v

s=[source_n*sin(theta*pi/180)
source_n*cos(theta*pi/180)];

for k=1:n_mic

u(k) = norm(s-mics(k,:));

end

d=exp(i_omega*p*u)./u;

bps(theta+91)=20*log10(abs(w'*d));

end

bp(index,:)=bps;

index = index + 1;

end

% here you can
plot the BP as a function of DoA for any frequency.

% Implementing the Beamforming

start
= 1;

skiprate = nfft/2;

window = triang(nfft)';

num_samples = size(data,2); % data size

num_blocks = ceil((num_samples-nfft)/skiprate);

frame = 1:nfft;

data_frame = zeros(n_mic,nfft);
% frame of data ( from each mic)

data_fft
= zeros(nfft,n_mic); % FFT of the frame

s
= zeros(1,nfft); % frame data (time)

S =
zeros(1,(n_blocks+1)*nfft/2);

for m = 1 :
n_blocks

data_frame = data(:,frame);

data_fft = fft(data_frame');

s = sum(conj(W).*data_fft');

S(frame) = S(frame) + real(ifft(s.*window));

frame = frame + skiprate;

end[\code]