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