
fft beamforming  RF Cafe Forums


Because of the high maintenance needed to monitor and filter spammers from the RF Cafe Forums, I decided that it would
be best to just archive the pages to make all the good information posted in the past available for review. It is unfortunate
that the scumbags of the world ruin an otherwise useful venue for people wanting to exchanged useful ideas and views.
It seems that the more formal social media like Facebook pretty much dominate this kind of venue anymore anyway, so if
you would like to post something on RF Cafe's
Facebook page, please do.
Below are all of the forum threads, including all
the responses to the original posts.
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



