How to use frost beamformer using "external" signal ?

1 view (last 30 days)
Hello, I am trying to use Frost Beamformer based on phased array tool box.
The experiment includes 8 microphone spaced at : 3cm, liniary arranged.
The results of the beam-former are poor and it seems that I guess there is an error in the way i use it.
1) I record the signal using an array and then define a "new" array in the code using ULA, Is it a source for a problem ?
2) Does the tool box supports "External signal" ? close all; clear all;clc;
FirLen=10; % Post Beamforming Filter Length
spacing=0.03; % Spacing between microphones [m]
c = 340; % sound speed, in m/s
ang_dft = [0;0];
fs = 15625; % Sampling Frequncy
sigArray=[rmic1,emic1,rmic2,emic2,rmic3,emic3,rmic4,emic4];
Nele=size(sigArray,2);
[FrostENG,FrostDLENG,FrostOut,FrostOut_dl]=FrostBeamFormer(sigArray,FirLen,Nele,spacing,c,ang_dft,fs);
function [agFrost,agFrost2_dl,FrostOut,FrostOut2_dl]=FrostBeamFormer(sigArray, FirLen,Nele,spacing,c,ang_dft,fs)
hmic = phased.OmnidirectionalMicrophoneElement; % Microphone type
ha = phased.ULA(Nele,spacing,'Element',hmic); % Microphone array
ha.Element.FrequencyRange = [20 20000]; NSampPerFrame = size(sigArray,1);
hsig = dsp.SignalReader('Signal',sigArray,'SamplesPerFrame',NSampPerFrame);
hbf = phased.FrostBeamformer('SensorArray',ha,'SampleRate',fs,... 'PropagationSpeed',c,'FilterLength',FirLen,'DirectionSource','Input port','WeightsOutputPort',true);
reset(hsig);
[FrostOut,W] = step(hbf,step(hsig),ang_dft);
plotResponse(ha,fs,c,'RespCut','Az','Format','Polar'); % Polar plot
release(hbf);
release(hsig);
Best Regards, Tamir
  2 Comments
Ashwini Srivastava
Ashwini Srivastava on 31 Aug 2015
Were you able to solve this problem using external signal ?
Honglei Chen
Honglei Chen on 2 Sep 2015
Could you clarify you question? What do you mean the result is poor? Does the setting of ULA match what you use to record the signal?

Sign in to comment.

Answers (1)

Carey Bunks
Carey Bunks on 28 Jan 2019
Edited: Carey Bunks on 28 Jan 2019
I have experimented with several beamforming examples available on the Mathworks website using real audio waveforms but with simulated antenna responses (using the phased.WidebandCollector object). Under these conditions, the Frost beamformer produces very good results. That's to say the power output of the array shows peaks at the correct simulated angular positions for each source, and the beamformer signal output properly separates the sources when the array is steered to the appropriate angular directions.
That said, I have found several PhD theses and other references on the web that report the Matlab Frost beamformer implementation gives poor results when used with a real acoustic antenna array. For example, see Section 7.3.3 in this dissertation:
Of course a simulated antenna array and a real one have the important difference in that the former is an idealized model, and for the latter there are likely small inconsitencies that will crop up in the steering vector. For example, he relative positions of the antenna elements may be irregular or have other small errors. The individual sensor beam patterns may not be perfectly omnidirectional. Nevertheless, as discussed in Section 6 of Frost's original paper, his beamformer has a built in feature that is supposed to be robust to small errors.
This suggests that the Mathworks' Frost beamformer may have some implementation errors. I'll know more in a couple of weeks after I've coded my own version of the Frost beamformer. In another thread I've asked whether it is possible to see the internal code for the Mathworks' toolkit objectt.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!