0
$\begingroup$

I am writing an open source microphone array simulation program:SharpEar. When I give uniform weight to microphone array elements, the result in the angle is a sinc function as expected. There are 41 elements in array, all equally weighted. Room is 20*20 meters.

Room and microphone array

Red point in the picture below is a 1000Hz sin wave. The black areas are filtered by the result of beamforming.

Sound source in the middle of the room and result of beamforming

Now I am trying to achive null steering. What I understand from null steering with my computer science brain is: Microphone array will work as a spatial filter. Fft of the weights of the array will be reflected in angle. That is why result of the uniform weighted microphone array is like the picture above. Now lets say I know there is a noice in -30 degree and the sound that I want to focus is at 0 degree(Angle considered to middle of microphone array red point was at around 0 degree ). And array interests in 90 degrees from -45 to 45. Because I don't want to get anything I am adding a null at -30 degree. And I am having a data like:

0.5, 0.5 , ... , 0 , 0 , 0 , 0.5 ....1, 1, 1, 0.5, 0.5 , 0.5 ... | | | -45 -30 degrees 0 degrees

I believe if I take the inverse fft of the data above and use as weights in my microphone array. I should achive a better focussing in angle domain. But my results are terrible.

I want to ask if my understanding of null steering is correct or am I missing anything?

Ps: Please forgive my lacking descriptions since DSP is not my profession, I am network programmer and trying to run this project in my free time.

$\endgroup$
1
$\begingroup$

I don't understand what you did but I think you didn't understand the idea correctly.
Lets say the weighting vector at a certain frequency is given by $\mathbf{w}^H$ where ${}^H$ is the complex conjugate. That is the elements of $\mathbf{w}^H$ are the weights you apply to each sensor without null steering. And lets say that the array response to the interference is $\mathbf{v}_I$ (which is basically the conjugate of the array weights if you were to point the beamformer to the interference). The simple null steering solves the following optimisation problem: $$ \underset{\mathbf{w}_{d}}{min}\:\left\Vert \mathbf{w}_{d}-\mathbf{w}\right\Vert ^{2}\\ subject\; to\\ \qquad\mathbf{w}_{d}^{H}\mathbf{v}_{I}=0 $$

Using Lagrange multipliers it can be shown that $$ \mathbf{w}_{d}^{H}=\mathbf{w}^{H}\cdot\left(\mathbf{I}_{N}-\frac{1}{N}\mathbf{v}_{I}\mathbf{v}_{I}^{H}\right)$$ where $\mathbf{I}_{N}$ is the identity matrix and $N$ is the number of sensors.

This solution is not very robust to errors in the interference direction.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.