# beamforming

Started by April 6, 2005
```I am interested in learning how to do beamforming using quadrature
sampling and/or frequency-domain processing.

A few years ago I implemented a small beamformer that operated completely
in the time domain.  This was for seismic array processing; the beamformer
combined signals for spatially separated sensors.  The 'best beam' was
found by simply trying all wavevectors on a two-dimensional grid,
computing the resulting beam (delay-and-summed) signal, computing the
power of each of these signals, and plotting the resulting signals on the
wavevector grid.  Seismologists sometimes call the whole process "slant
stacking".  This whole process was repeated over successive windows of the
timeseries.

I understand that there is probably a much better way to do this.  I'm
told that I can represent my signals in a "complex baseband"
representation by doing quadrature sampling, making a complex signal with
I and Q components, and then I will be able to perform the "delay"
operation by multiplying by an appropriate phasor.  I'm not sure this is
exactly right.  Another detail is that I would have to generate the
quadrature signals from the pre-existing time series, maybe by calling the
even-numbered samples "I" and the odd-numbered samples "Q"?

I want to generate the 'picture' of beam power versus wave vector -- is
there a better way to do this other than selecting wave vectors and
computing the resulting beam power, and plotting the results?  i.e. I
imagine there might be a way to do this in one powerful step in the
frequency domain.  Here's an example of the sort of 'picture' I have in
mind, although it's not the best plot:

Any hints, references, etc, appreciated.

thanks,
Tobin

http://web.pas.rochester.edu/~tobin/

```
```"Tobin Fricke" <fricke@ocf.berkeley.edu> wrote in message
news:Pine.SOL.4.62.0504061211410.28681@apocalypse.OCF.Berkeley.EDU...
>I am interested in learning how to do beamforming using quadrature
> sampling and/or frequency-domain processing.
>
> A few years ago I implemented a small beamformer that operated completely
> in the time domain.  This was for seismic array processing; the beamformer
> combined signals for spatially separated sensors.  The 'best beam' was
> found by simply trying all wavevectors on a two-dimensional grid,
> computing the resulting beam (delay-and-summed) signal, computing the
> power of each of these signals, and plotting the resulting signals on the
> wavevector grid.  Seismologists sometimes call the whole process "slant
> stacking".  This whole process was repeated over successive windows of the
> timeseries.
>
> I understand that there is probably a much better way to do this.  I'm
> told that I can represent my signals in a "complex baseband"
> representation by doing quadrature sampling, making a complex signal with
> I and Q components, and then I will be able to perform the "delay"
> operation by multiplying by an appropriate phasor.  I'm not sure this is
> exactly right.  Another detail is that I would have to generate the
> quadrature signals from the pre-existing time series, maybe by calling the
> even-numbered samples "I" and the odd-numbered samples "Q"?
>
> I want to generate the 'picture' of beam power versus wave vector -- is
> there a better way to do this other than selecting wave vectors and
> computing the resulting beam power, and plotting the results?  i.e. I
> imagine there might be a way to do this in one powerful step in the
> frequency domain.  Here's an example of the sort of 'picture' I have in
> mind, although it's not the best plot:
>
>

Tobin,

I think of them as two distinct things.  Among other things, I and Q
processing is useful if the center frequency is high and the bandwidth is
relatively low or a lower percentage of the center frequency.  There are
other reasons but I think this is what you meant.

Rick Lyon's book addresses the sampling method you describe.

Frequency domain beamforming might be useful if you're going to do
beamforming and spectrum analysis anyway.  It may be particularly useful if
you only have access to data samples from array elements and no pre-formed
(analog) beams.  From

http://www.ece.utexas.edu/~allen/EE381K-15280-F98/continuous.html
Frequency-Domain Beamforming
Beamforming can also be performed in the frequency domain, where delaying
the signal ri(t) by ti is implemented by multiplying Ri(w) by the phasor
exp(-jwti). However, we do not have access to the entire spectrum Ri(w).
Instead, we transform a segment of ri(t) by applying a finite extent window
and computing the short-time Fourier transform Ri(t,w), an approximation to
Ri(w). Now the frequency-domain beamformer output is:

Note that the frequency-domain beamformer is inherently narrowband. The
exp(-jwti) term performs the time delay, and the exp(jwt) term extracts the
component of the beamformer output b(t) at the frequency w. An approximation
to b(t) could be formed by integrating fd(t,w) over frequency.
...............................................

Either way, you end up with a map of frequency, angle data which would have
to be searched for maxima, etc.  But maybe there's an efficient way to do

Fred

begin 666 freqDomain.gif
M1TE&.#EAG0\$Z`/<``/______S/__F?__9O__,___`/_,___,S/_,F?_,9O_,
M,__,`/^9__^9S/^9F?^99O^9,_^9`/]F__]FS/]FF?]F9O]F,_]F`/\S__\S
MS/\SF?\S9O\S,_\S`/\`__\`S/\`F?\`9O\`,_\``,S__\S_S,S_F<S_9LS_
M,\S_`,S,_\S,S,S,F<S,9LS,,\S,`,R9_\R9S,R9F<R99LR9,\R9`,QF_\QF
MS,QFF<QF9LQF,\QF`,PS_\PSS,PSF<PS9LPS,\PS`,P`_\P`S,P`F<P`9LP`
M,\P``)G__YG_S)G_F9G_9IG_,YG_`)G,_YG,S)G,F9G,9IG,,YG,`)F9_YF9
MS)F9F9F99IF9,YF9`)EF_YEFS)EFF9EF9IEF,YEF`)DS_YDSS)DSF9DS9IDS
M,YDS`)D`_YD`S)D`F9D`9ID`,YD``&;__V;_S&;_F6;_9F;_,V;_`&;,_V;,
MS&;,F6;,9F;,,V;,`&:9_V:9S&:9F6:99F:9,V:9`&9F_V9FS&9FF69F9F9F
M,V9F`&8S_V8SS&8SF68S9F8S,V8S`&8`_V8`S&8`F68`9F8`,V8``#/__S/_
MS#/_F3/_9C/_,S/_`#/,_S/,S#/,F3/,9C/,,S/,`#.9_S.9S#.9F3.99C.9
M,S.9`#-F_S-FS#-FF3-F9C-F,S-F`#,S_S,SS#,SF3,S9C,S,S,S`#,`_S,`
MS#,`F3,`9C,`,S,```#__P#_S #_F0#_9@#_,P#_``#,_P#,S #,F0#,9@#,
M,P#,``"9_P"9S "9F0"99@"9,P"9``!F_P!FS !FF0!F9@!F,P!F```S_P`S
MS `SF0`S9@`S,P`S````_P``S ``F0``9@``,P``````````````````````
M````````````````````````````````````````````````````````````
M````````````````````````````````````````````````````````````
M`````````````````````"'Y! `"````+ ````"=`3H`0 C_``\$('\$BPH,&#
M"!,J7,BPH4.!_R(:C\$C1H<2'&#-JW,BQH\>/(\$.*'\$FRI\$F0_PA63/GPXLF7
M,&/*G\$FSILV;+RGJW,G3)<Z?0(,*':K1YT*C`%@61\$I2J5">1%4Z73HU856F
M(ZOBQ%KSJM:87[E"]'K0)5>Q8Z<:K4AU*-NL+./&;2M5ZM>D3K&BQ:NV+]FQ
M%N\R-7L7H<^W@.TFGIBW)U3&?0U'EKEW8.&6ETLZWJR39F6%@S-##/EYX][2
MR)M+G_Z[,^C9U*];-YR]>U?LWJ^7__T[6G+#M]L1][;*67W'[1QE3Q0__KQY
MANCS/V]=/NUZ_JGM)IM2Z1UV7U&*6>0:?0`69UE8HB%V&%+1J989> GZAQ^\$
M%SX7X809/D@5@7DU2&%C&0U8UX,H+O@1>@R*&-Y6&\$I6XWDWRCCCB.X5!5]S
M%>[H68ZI.2CDD4@FN9Q[V 6IY)-01@F6CDT2*>656&:9(F3'6:GEEV"&*>:8
M9)9)8X\LFJEFEK/I-=])3I*V\$W= G8BA6CEYJ9ISQGW''GMS0I82B#RB::)@
M>K[XHX]L!<K7GP="RN*B]36HHUV-=>:H@XL*"*&+*TYJJ':.27III:&&>E:'
MF68*:FQQ7O\JX5\$]=1FIC9B&N!AG;7WJHJ<APM>HKXJV.9FI1>Z*Z(;':ICJ
M3:.^-]>C'7*YX:WC-?MH:TSV&1JJP*;Y[+#8FE::?#;V..=:@)*8;:MT0MO>
M8_&]F6&M@FZK4KJGI@5O6?Q.*JJ[E(;+8Z[V'NS1NH.A.M.%**V9;(J%7>9E
MHC&F6QG&^P[Y'Z:Q2NQCOR*7;#*0<:)[\LHL#Q<KGBW'+'-NZ@86\LPXYPP7
MNYCI[///=09H*]!\$%PU3BU4:K?32I/7J+[U&,BWUU/:]2BO56&==:,*DWJSU
MUV"'+3;5F^8[]ME90VTUVFS;JY>A'/-&E-H=R\NK:0_K5G:Y+P;_+2A:YY)7
MMTE>Q[>W6\1>VR><<8_\U%7R\DWRK1XVOOCCE-:Y+'[6'HWX4YUK)K>ES\I*
MZ-H.KUVXM-\$JWF_%FV<\<>J64I@JST^3V"*.)V;\K;EW8PNXA[_&'J.PQ#L7
MLLK]T=YZU*4[C+STH%Z4.)7@,3_][,L'3OKKR4,?_8@(.SNY3<\'5K[%N^,H
MN;C^ZFKD9ZN"F[VK`HO[MIS&?I_L[^(['_R*Q"3+V8QPT[(>@%0DO>ME:X&]
MFYUQ]E<\BNF*@10L%NF8Y[P(-L]_I^*@!.=5H6CE2\$(;JUS54 ?!VNGN<DD9
MX/_:Y[YQ-<N!P/M8ZH87J4"=93T>G%8`G5=7PZL9#F9<6Q42N0=\$\@@1@ .S
MH5]L:\$%N]4>\$5UP8@3XXP[RU1"0&;!<)TZ>H,G(--& \6K6&UK3(P5" K.%<
MQ,XTQLQIQDH9'-W"*+/&GL718SH\$8=L89\8GW:Q1U"&BR9872 N=D(R#5*,B
MT_;&2%JR3'C4UB4W":;0E*J%G QE)S,I2%&:<D>>Q!>WPGC*5M+&CEUBI2O#
\$%! `.P``
`
end

```
```Tobin Fricke wrote:
> I am interested in learning how to do beamforming using quadrature
> sampling and/or frequency-domain processing.
>
> A few years ago I implemented a small beamformer that operated
completely
> in the time domain.  This was for seismic array processing; the
beamformer
> combined signals for spatially separated sensors.  The 'best beam'
was
> found by simply trying all wavevectors on a two-dimensional grid,
> computing the resulting beam (delay-and-summed) signal, computing the

> power of each of these signals, and plotting the resulting signals on
the
> wavevector grid.  Seismologists sometimes call the whole process
"slant
> stacking".  This whole process was repeated over successive windows
of the
> timeseries.

Yep. You have described the "brute force approach" to beamforming.

> I understand that there is probably a much better way to do this.
I'm
> told that I can represent my signals in a "complex baseband"
> representation by doing quadrature sampling, making a complex signal
with
> I and Q components, and then I will be able to perform the "delay"
> operation by multiplying by an appropriate phasor.  I'm not sure this
is
> exactly right.

I don't think it's quite that easy. The time delay corresponds to
a phasor for monochromatic (narrow-band) signals. In marine seismics,
to Fourier tranform your time series and apply a phasor to each
frequency bin.

> Another detail is that I would have to generate the
> quadrature signals from the pre-existing time series, maybe by
calling the
> even-numbered samples "I" and the odd-numbered samples "Q"?

You would have to apply some sort of Hilbert transform. With seismic
data
that is processed off-line, that's easy. In matlab:

X=fft(x);      % x is N x 1 time series
N=length(X);
N2=floor(N/2);
xiq=ifft(X(1:N2),N);

Here, xiq is the quadrature sampled time series. You can check that

eps=max(abs(2*real(xiq)-x))

is a vanishing number.

> I want to generate the 'picture' of beam power versus wave vector --
is
> there a better way to do this other than selecting wave vectors and
> computing the resulting beam power, and plotting the results?  i.e. I

> imagine there might be a way to do this in one powerful step in the
> frequency domain.  Here's an example of the sort of 'picture' I have
in
> mind, although it's not the best plot:

You might be able to achieve this by some sort of Fourier transform.
Note that this requires the sampling parameters, both in time and
space,
to be regular. If they are not, or if you need to watch certain
areas of your plot very closely, the FFT approach might not work.

> Any hints, references, etc, appreciated.

Rune

```
```>I am interested in learning how to do beamforming using quadrature
>sampling and/or frequency-domain processing.
>
>A few years ago I implemented a small beamformer that operated completely

>in the time domain.  This was for seismic array processing; the
beamformer
>combined signals for spatially separated sensors.  The 'best beam' was
>found by simply trying all wavevectors on a two-dimensional grid,
>computing the resulting beam (delay-and-summed) signal, computing the
>power of each of these signals, and plotting the resulting signals on the

>wavevector grid.  Seismologists sometimes call the whole process "slant
>stacking".  This whole process was repeated over successive windows of
the
>timeseries.
>
>I understand that there is probably a much better way to do this.  I'm
>told that I can represent my signals in a "complex baseband"
>representation by doing quadrature sampling, making a complex signal with

>I and Q components, and then I will be able to perform the "delay"
>operation by multiplying by an appropriate phasor.  I'm not sure this is

>exactly right.  Another detail is that I would have to generate the
>quadrature signals from the pre-existing time series, maybe by calling
the
>even-numbered samples "I" and the odd-numbered samples "Q"?
>
>I want to generate the 'picture' of beam power versus wave vector -- is
>there a better way to do this other than selecting wave vectors and
>computing the resulting beam power, and plotting the results?  i.e. I
>imagine there might be a way to do this in one powerful step in the
>frequency domain.  Here's an example of the sort of 'picture' I have in
>mind, although it's not the best plot:
>
>
>Any hints, references, etc, appreciated.
>
>thanks,
>Tobin
>
>http://web.pas.rochester.edu/~tobin/
>
>

Depending on how far you want to explore beamforming methods I would
suggest looking into techniques for sonar and acoustical array processing.
Using real array data you can do Bearing-Time Grams (time domain technique
using interpolation delay-and-sum), Conventional Beamforming (CBF)
Bearing-Frequency Grams (narrowband assumption using FFT), Minimum
Variance Distortionless Response (MVDR) Beamformer Bearing-Frequency Grams
(narrowband assumption), and Adaptive Beamforming, etc.  There are many
other variations and techniques but this covers the basics.  Let me know
if you are interested in anything specific and I can share some matlab
code to get you started.

What really gets interesting is dealing with wide-band signals
(acoustical, etc.)  Although you can make a narrowband assumption and get
some work done, it becomes difficult when dealing with multiple sources
and poor SNR.  The following introductory paper and book may be of
interest to you also:

"Beamforming: A Versatile Approach to Spatial Filtering", Van Veen and
Buckley, IEEE ASSP Magazine April 1988

"Statistical and Adaptive Signal Processing", Manolakis, Ingle, Kogon

P.S. Make sure you use the errata with the Manolakis book.  It has some
good stuff on beamforming but it is full of mathematical errors.

I hope this helps.  Have fun!

Dave Ohm
Research Engineer
Vexcel Corporation

This message was sent using the Comp.DSP web interface on
www.DSPRelated.com
```
```Tobin Fricke wrote:
> I am interested in learning how to do beamforming using quadrature
> sampling and/or frequency-domain processing.
>
> A few years ago I implemented a small beamformer that operated
> completely in the time domain.  This was for seismic array processing;
> the beamformer combined signals for spatially separated sensors.  The
> 'best beam' was found by simply trying all wavevectors on a
> two-dimensional grid, computing the resulting beam (delay-and-summed)
> signal, computing the power of each of these signals, and plotting the
> resulting signals on the wavevector grid.  Seismologists sometimes call
> the whole process "slant stacking".  This whole process was repeated
> over successive windows of the timeseries.
>
> I understand that there is probably a much better way to do this.  I'm
> told that I can represent my signals in a "complex baseband"
> representation by doing quadrature sampling, making a complex signal
> with I and Q components, and then I will be able to perform the "delay"
> operation by multiplying by an appropriate phasor.  I'm not sure this is
> exactly right.  Another detail is that I would have to generate the
> quadrature signals from the pre-existing time series, maybe by calling
> the even-numbered samples "I" and the odd-numbered samples "Q"?
>
> I want to generate the 'picture' of beam power versus wave vector -- is
> there a better way to do this other than selecting wave vectors and
> computing the resulting beam power, and plotting the results?  i.e. I
> imagine there might be a way to do this in one powerful step in the
> frequency domain.  Here's an example of the sort of 'picture' I have in
> mind, although it's not the best plot:
>
>
> Any hints, references, etc, appreciated.
>
> thanks,
> Tobin
>
> http://web.pas.rochester.edu/~tobin/
>

By beamforming at one frequency you're basically doing NB beamforming.
How you perform on BB signals will depend on the array geometry, and
frequencies you are using.

Another alternative is to time domain beamform on the I & Q signals.
This is exactly the same as before except you must also compensate with
an (complex) exponential multiply for the phase shift for the original
carrier frequency.

Cheers,
David
```
```On Sat, 9 Apr 2005, David Kirkland wrote:

> Another alternative is to time domain beamform on the I & Q signals.
> This is exactly the same as before except you must also compensate with
> an (complex) exponential multiply for the phase shift for the original
> carrier frequency.

Is there an advantage to doing this, if I don't already have the I & Q
signals?

Tobin
```