Counteracting Beamforming Filter

Started by henrytriff 3 years ago3 replieslatest reply 3 years ago116 views

Hi, I am working on a project that involves beamforming with audio. I have been using matlab to simulate beamforming audio and when analysing the frequency response at 0°, it is clear that it applies a very agressive filter to the audio. For my set up, the filter that is made produces a first-null at around 7400Hz and frequencies below 1900Hz are attenuated and any frequencies between 1900Hz - 5600Hz are amplified. 

I want to apply a filter to the beamformed audio that amplifies the attenuated parts and attenuates the amplified parts, essentially returning the audio to normal.

Is this possible? If so, please can someone explain how its done or point me in the direction of some sources which I can read. 


[ - ]
Reply by Y(J)SMarch 30, 2021

How far away from the array are you from the microphone array? 

(I am assuming that this is a microphone array and by 0 degrees you mean perpendicular, but it really doesn't matter.)

The different amplitude for different frequencies is due to the spacing between elements no longer being lambda or 2 lambda (or whatever you are using). This results in the amplitude at a point at distance N lambda having an amplitude SUM e^(iw * sqrt(N^2 + 2n^2)) (for d = 2*lambda). For large N the contributions dependent on n are negligible.

So I am assuming that you must be very close to the array (in terms of the spacing or lambda).

You can calculate the amplitude as I described (or measure the frequency response), invert, and build a static equalizer. But since the filter depends on the distance from the array this is usually not very useful.


[ - ]
Reply by henrytriffMarch 30, 2021

Hi, Thanks for your reply!

I don't fully understand your answer. 

I want to capture speach which can range from 100Hz to aprox 7000Hz. I understand the distance between the microphones is dependent on half the wavelength of the highest frequency I want to hear however i am also limited on the distance I am able to separate the 2 microphones. I have been simulating it in matlab and altering the distance the audio is from the microphone array has no effect on this filter being applied.

matlab graph_17404.png

I am sampling at 44100 Hz and the distance between the microphones is 3 samples ≈23mm ((1/44100) * 343 * 3 = 0.023m). Also I should have said 90°, I realise convention says 0° is perpendicular (my bad). I also should have said that my beamforming technique is endfire array beamforming. 

Essentially, I have stuck with the frequency response that I am getting so I am wondering how I can design an FIR or IIR filter that can be the "inverse" of the filter that is being applied.



[ - ]
Reply by Y(J)SMarch 30, 2021


Thanks for confirming that this is a microphone array (rather than a loudspeaker array). I understand that it is only 2 microphones (I am used to a much larger number.

If the source lies on the line perpendicular to the line between the two microphones then there should be no filtering effect at all. In that case the distance from the source to both microphones is precisely the same, and thus there is no interference.

Note that to steer to a point on this perpendicular you should not introduce any phase or time-delay shifting of one microphone with respect to the other. If you are adding a constant time delay between the microphones then you are introducing the filtering yourself!