Directivity Pattern of microphone array

Directivity pattern of a microphone array is fourier transfrom of microphone weight values. By modifying the amplitude weights, we can modify the shape of the directivity pattern.

I can really see this when all microphone weights are equally valued.
Fourier transform of a rectangle is a sinc func like picture below: Now I believe if I apply a sinc function for my microphone array's element values I should get a rectangular shape in my directivity pattern.

I have a simulation program of my own. Which works when microphone values are equally valued . But I am not getting what I expect(a rectangular pattern) when I give sinc values to microphone array elements.

Am I missing something teorically or it is just my program bugged?

Edit: As requested in comments, weights that I apply can be seen in the graph below. 40 is the microphone count of my array. Sorry for disgusting looking graph it is the output of my C++ program. • Can you show what sinc weightings you are using? Your reasoning seems sound.
– Peter K.
Mar 10 '15 at 20:22
• @PeterK. I added, it is my own C++ program sorry if it does not looks well Mar 10 '15 at 20:54
• remember sinc has an infinite tail, so unless you have infinite microphones, you have to truncate it and the response will not be a perfect rectangle. windowing is probably better than truncation. Mar 11 '15 at 3:21
• You're using the magnitude of a sinc function, not the sinc function itself (which is bipolar). This and the effect of truncating the infinitely long sinc sequence result in the effects you see. Mar 11 '15 at 8:17
• @endolith I am really not expecting a perfect rectangle , something like rectangle will make me happy. I don't care ripples or transaction band for now . Mar 11 '15 at 20:06

As I said in the comment, you sound like you are doing things correctly.

Below are two plots generated by the scilabcode at the end.

The first plot shows two different weightings applied to the sensors. The second plot shows the associated beam patterns. While the $\tt sinc$ one is not "uniform" it is a fair approximation.  EDIT

Changing the code below to cater for an even number of sensors:

NOn2 = 20;
N = 2*NOn2;
w_uniform = ones(1,N);
omega = 2*%pi*([0:N-1] - N/2)/N + 0.0001;
w_sinc = [sin(N/15*omega)./(omega) ]

Then I get the plots below.  The relationship between the weights and the beam pattern is like a Fourier transform: the broader the sinc, the narrower the beam pattern. The narrower the sinc, the wider the beam pattern.

CODE ONLY BELOW

// http://www.astron.nl/other/workshop/MCCT/MondayPatel.pdf
lambda = 1;
d = lambda/3;
theta = [-%pi/2:0.01:%pi/2];

NOn2 = 7;
N = 2*NOn2 + 1;
w_uniform = ones(1,N);
omega = 2*%pi*[-NOn2:NOn2]/N + 0.0001;
w_sinc = [sin(N/4*omega)./(omega) ]

r_uniform = e_to_phi*w_uniform';
r_sinc = e_to_phi*w_sinc';

figure(0);
clf;
plot(theta/%pi*180,abs(r_uniform));
plot(theta/%pi*180,abs(r_sinc),'r.');
title('Uniform weighted (blue solid) and sinc weighted (red dotted) array resposnes');

figure(1);
clf;
plot(w_uniform);
plot(w_sinc,'r.');
title('Uniform weighted (blue solid) and sinc weighted (red dotted) sensor weightings');
• I am sorry that I suck in this subject and thanks and upvote for your great answer. I understand you have 40 tap uniform and sinc weighted taps. And e_to_phi is like sound source(I hope) recieved with a delay in taps. I can't where you are summing the tap amplitudes. Can I ask you that? Mar 11 '15 at 20:16
• The line r_uniform = e_to_phi*w_uniform'; calculates $\sum_{n=0}^{N-1} w_n e^{i2*\pi\frac{d}{\lambda}\sin(\theta) n}$.
– Peter K.
Mar 11 '15 at 20:44
• Thanks a lot, your answers really helps me. I wish I could do more than upvote sometimes. Mar 11 '15 at 21:07