

FFT Beamforming  RF Cafe Forums

tsuzu 
Post subject: fft beamforming
Posted: Tue Apr 12, 2005 3:09 am



i'm a beginner in this area. i just learned
about the basic algorithm of fft beamforming
from internet.and want to implement the algorithm
by using matlab,but i don't know how to start(ps,i'm
also a new user of matlab).
can anyone
give me some sample souce code, even segments
are okay. I'm really stuck in mud.
thanks in advance.





Manar 
Post subject: Beamformer
Posted: Mon May 09, 2005 5:51 am



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:nfft1)*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(smics(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_samplesnfft)/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]


Posted 11/12/2012



