fft beamforming - RF Cafe Forums

RF Cafe Forums closed its virtual doors in late 2012 mainly due to other social media platforms dominating public commenting venues. RF Cafe Forums began sometime around August of 2003 and was quite well-attended for many years. By 2012, Facebook and Twitter were overwhelmingly dominating online personal interaction, and RF Cafe Forums activity dropped off precipitously. Regardless, there are still lots of great posts in the archive that ware worth looking at. Below are the old forum threads, including responses to the original posts. Here is the full original RF Cafe Forums on Archive.org

-- Amateur Radio

-- Anecdotes, Gripes, & Humor

-- Antennas

-- CAE, CAD, & Software

-- Circuits & Components

-- Employment & Interviews

-- Miscellany

-- Swap Shop

-- Systems

-- Test & Measurement

-- Webmaster

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: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]

Posted  11/12/2012