The MFAS algorithm for continuous-wave lidar Doppler sensing
Wind speed and direction can be found from a set of Doppler lidar measurements, even if each single measurement provides only single-axis (line-of-sight) information. One “wind vector algorithm”, popular from the early days of both CW and pulsed scanning lidars, fits a sine wave to a series of Doppler frequency estimates obtained at different view angles and (usually) different times [1]. For pulsed lidars another method, using a “maximum function of the accumulated spectrum” (MFAS for short), was examined by Banakh and Smalikho [2], [3], and a variant was recommended by Augère et al. [4]. Weighted and/or iterative fitting routines and probabilistic algorithms need increased computing power, and are often trial-and-error or proprietary, but there are recent relatively explicit examples for sine-fitting [5]. In this note we illustrate MFAS for both wind estimation and target Doppler signal estimation, for CW lidars.
Wind vector estimation
We assume for the moment that the wind is horizontal and homogeneous and described by a vector V. Its component VLOS along the lidar line-of-sight (LOS) is the scalar
VLOS = |V| sin(φ) cos(θi-θ)
where the lidar cone angle is φ, the lidar azimuth scan angle is θi, and the wind angle is θ.
Suppose that lidar “spectra” (accumulations of many consecutive short-term |DFT|2 outputs) are obtained at different scan angles θi (i = 1, 2, 3,…) with fixed cone angle φ [6]. In each spectrum we expect a peak according to the Doppler relation fi = 2VLOS/λ, where the peak’s frequency fi depends on scan angle:
|V| = λfi/ [2 |sin(φ) cos(θi-θ)|]
With V unknown in practice, the MFAS method starts with a guess or hypothetical wind vector Vguess. This represents a point in a 2D grid (Vx, Vy), or equivalently a magnitude (Vx2 + Vy2)1/2 and a direction θguess = tan-1(Vy, Vx).
Let us assume that the lidar is not direction-sensitive (ZephIR is an example): although VLOS may be positive or negative, the measured frequencies are non-negative.
If θguess = θ (i.e. the guess is correct in angle), then a spectral peak is expected at a frequency
(2/λ)|V||sin(φ) cos(θi-θ)|
and the spectral peaks for different scan angles should appear at a common frequency if each spectrum is rescaled by dividing all the bin frequencies by |cos(θi-θ)|. The spectral peaks will not all coincide if the angle is wrongly guessed. Thus, if for each different θguess in our grid we “stack” or accumulate the rescaled spectra by summing over all θi, we expect the peak bin of the stack to be highest for a narrow range of θguess near the true value θ.
A peak is expected at some frequency of the stack whenever θ is correctly guessed, but not at the true Doppler frequency unless |Vguess|is also correct. So we do not need to seek for each guess (Vx, Vy) the maximum of the entire accumulated stack (that is, all frequency bins, each containing the sum of the powers from all the rescaled spectra). Instead we find for each guess (Vx, Vy) the sum of powers in only the narrow region near the expected peak. In this sense the name “maximum function of accumulated spectra” needs qualification.
DFTs have discrete frequency points (bins), but |V| and the scan angle are in effect continuous variables, so the exact expected frequency (2/λ)|V||sin(φ)cos(θi-θ)| will generally fall between two DFT points, and some approximation or interpolation will be involved. We may choose, according to judgement and experience, only one DFT point, or a value interpolated (as in Banakh/Smalikho) between the nearest two, or some other smoothed estimate. We may iterate the MFAS algorithm, finding an improved estimate by searching through a smaller more densely sampled grid around the current estimate.
Interpolation of the entire frequency scale is convenient for showing complete spectrograms. But, given the assumptions of the algorithm, including the existence of a reasonably homogeneous atmosphere in steady horizontal flow, we need in practice to store, scale, and accumulate the spectra in only a small region (at most a few DFT points or bins) at or near (2/λ)|Vguess||sin(φ)|, as said above.
Note the implications if we think of MFAS as compensating for φ and θ to recover an estimate of what the Doppler spectrum would look like with the LOS parallel with the wind vector. For example, is the wind flow “homogeneous”, and to what extent is the observed “Doppler” spectrum determined by non-homogeneous movement (e.g. turbulence) and other factors such as modulation? The expected or hypothetical shape of the Doppler spectrum depends on our answers and may or may not be given by a simple rescaling.
If we “stretch” the frequency scale by the factor 1/|cos(θi-θ)|, the apparent power densities are altered, as they would be if we observed a moving mass of air (with significant Doppler spread) from varying angles. We can then conserve the total power in the measurement bandwidth (another point that is sometimes not explicit in the literature) by dividing the bin heights by the same factor.
There are other possible approaches, such as a uniform shift of all frequencies by an amount equal to the shift expected for the wind Doppler peak. Note that, with “circular” DFT conventions, frequencies shifted beyond one edge of the band set by the sampling frequency reappear at the other edge.
A “best” approach cannot be decided without further information, and several aspects must be balanced:
- The scaling becomes unrealistic at angles θi nearly normal to the wind (θ ± π/2), although in practice this “blow up” may not matter because the default processing excludes a small range of near-DC Doppler where instrumental and detector noise can dominate any desired signal.
- We may expect the spectrum of the lidar atmospheric return to depend on angle, but we do not usually expect the spectrum of detector shot noise to depend on angle; yet both are likely to be significant at the medium or low signal-to-noise for which MFAS is recommended.
- The apparent spectral width of the lidar atmospheric return, even if it can be well characterised by a single number (such as the width of a Gaussian “spectral bump”), is a result of several filtering and convolution processes. These include the isolation of short (~5 μs) segments of time series for the |DFT|2 routine – which creates the bin width (DFT point spacing) of ~ 200 kHz, for any scan angle and no matter how wide or narrow the range of frequencies in the detector output [6].
Thus some factors or features in the presented “spectra” may depend strongly on scan angle, and others may not, and a single rescaling choice will not treat them all equally.
In our MATLAB examples each “spectrum” Si, meaning the set of frequency bin contents obtained by summing many consecutive short-time |DFT)|2 at a fixed (or nearly fixed) scan angle θi, is “rescaled” by dividing all the bin frequencies by |cos(θi-θ)|. The rescaled spectrum is interpolated by MATLAB’s pchip function, yielding new frequency points from DC up to some reasonable maximum wind speed; typically we choose 100 equally spaced points from DC to 20 ms-1. Several of these rescaled spectra, typically 10-40 covering a substantial fraction of one complete azimuthal scan (50 scans/second), are stacked.
Below is an example of MFAS applied to CW lidar data from airport trials, similar to those in [7] and chosen to show a fairly clear Doppler track with moderately high carrier-to-noise and without severe distortions caused by e.g. wake turbulence.