forked from ThomasFeher/oms
-
Notifications
You must be signed in to change notification settings - Fork 0
/
beamSteering.m
27 lines (25 loc) · 841 Bytes
/
beamSteering.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
%calculates weights in frequency domain to get a main lobe in certain direction
%input:
% angle: angle of main lobe in degree
% geometry: geometry of microphones, row vector of coordinates (only one
% dimension supported)
% frequencies: vector of frequencies to calculate weights for
% c: speed of sound in m/s
%output:
% W: weight matrix [frequency,mic]
function W = beamSteering(angle,geometry,frequencies,c)
if(~isvector(geometry))
error('geometry must be a vector');
end
if(iscolumn(geometry))
geometry = geometry.';%transpose to row vector
end
if(~isvector(frequencies))
error('frequencies must be a vector');
end
if(isrow(frequencies))
frequencies = frequencies.';
end
angle = angle/180*pi;%transform in radians
directionVector = geometry * sin(angle);
W = exp(-i*2*pi*directionVector.'*frequencies.'/c)/numel(geometry);