WiPPR Images of Convective Boundary Layer Turbulence

Source Notebook

Images of turbulent wind motions moving through a near vertical beam of an FMCW radar recorded near Palm Canyon Arizona

Details

The data set contains 129 images of echoes of turbulence moving through the radar beam of an early prototype version of the WiPPR radar. WiPPR is a low noise, high dynamic range radar specifically designed to measure the wind profile in the convective boundary layer. These data were recorded on the afternoon of 23 March 2012 near the entrance to Palm Canyon just south of Quartzsite, Arizona. Skies were absolutely clear during the recording period. Images are indexed by altitude with the largest index corresponding to the maximum altitude of 800 meters.
Each individual image spans -8.57 m/s to 8.57 m/s in Doppler velocity and approximately 0 to 18.3 seconds in time. Image data is in signal-to-noise ratio (SNR) on a decibel scale.
This prototype version of the WiPPR system continuously recorded the received echoes from the wind. The carrier frequency, bandwidth and pulse length of the transmit signal were respectively 33.4 GHz, 24 MHz and 262.144 μsec. The recorded frequency modulated continuous wave (FMCW) data was processed using fast time-slow time Fast Fourier Transform (FFT) algorithms to produce range velocity matrices. These were in turn converted to SNR using a form of constant false alarm rate processing to produce the images included here.
During the time period of data recording wind conditions were very gusty and the convective boundary layer was extremely turbulent. This turbulence modulates the index of refraction of light speed at microwave frequencies. The WiPPR radar is sensitive enough to detect the echoes from these modulations. The radar beam on which these data were recorded was pointed towards the north at a vertical angle of 10 deg.
In addition to the radar images the following supplementary material is available:
"CarrierFrequency"radar carrier frequency (GHz)
"CandWidth"radar bandwidth (MHz)
"PulseLength"radar pulse length (sec)
"θVertical"radar angle with respect to the vertical (deg)
"MaxDopplerVelocity"maximum Doppler velocity (m/s)
"MaxAltitude"max altitude sampled by radar (m)
"MaxSlowTime"time span of radar images (sec)

Examples

Basic Examples (3) 

Retrieve the data at a particular altitude:

In[1]:=
nz = 100;
images = ResourceData[\!\(\*
TagBox["\"\<WiPPR Images of Convective Boundary Layer Turbulence\>\"",
#& ,
BoxID -> "ResourceTag-WiPPR Images of Convective Boundary Layer Turbulence-Input",
AutoDelete->True]\)];
image = images[[nz]]
Out[3]=

Display top 30 db range of data at an altitude with slow time (recording time) increasing from bottom of image to the top:

In[4]:=
datadb = ImageData[image];
{mindb, maxdb} = MinMax[datadb];
vmax = ResourceData[\!\(\*
TagBox["\"\<WiPPR Images of Convective Boundary Layer Turbulence\>\"",
#& ,
BoxID -> "ResourceTag-WiPPR Images of Convective Boundary Layer Turbulence-Input",
AutoDelete->True]\), "MaxDopplerVelocity"];
tmax = ResourceData[\!\(\*
TagBox["\"\<WiPPR Images of Convective Boundary Layer Turbulence\>\"",
#& ,
BoxID -> "ResourceTag-WiPPR Images of Convective Boundary Layer Turbulence-Input",
AutoDelete->True]\), "MaxSlowTime"];
ReliefPlot[datadb, PlotRange -> {maxdb - 30, maxdb}, Sequence[
 LightingAngle -> None, FrameTicks -> True, DataRange -> {{-vmax, vmax}, {0, tmax}}, FrameLabel -> {"Doppler velocity (m/s)", "slow time (sec)"}]]
Out[5]=

Set an SNR threshold and use morphological processing to clean the image up:

In[6]:=
SNRThresholdDB = 7.0;
SmallComponentSize = 10;
binaryImage = Binarize[Image[datadb], SNRThresholdDB];
mask = DeleteSmallComponents[binaryImage, SmallComponentSize];
datadbClean = ImageData[mask] datadb;
ReliefPlot[datadbClean, PlotRange -> {maxdb - 30, maxdb}, Sequence[
 LightingAngle -> None, FrameTicks -> True, DataRange -> {{-vmax, vmax}, {0, tmax}}, FrameLabel -> {"Doppler velocity (m/s)", "slow time (sec)"}]]
Out[7]=

Scope & Additional Elements (2) 

Marginalize (sum binary images) across altitude to summarize the temporal structure of the turbulence:

In[8]:=
imagenames = ResourceData[\!\(\*
TagBox["\"\<WiPPR Images of Convective Boundary Layer Turbulence\>\"",
#& ,
BoxID -> "ResourceTag-WiPPR Images of Convective Boundary Layer Turbulence-Input",
AutoDelete->True]\)];
vmax = ResourceData[\!\(\*
TagBox["\"\<WiPPR Images of Convective Boundary Layer Turbulence\>\"",
#& ,
BoxID -> "ResourceTag-WiPPR Images of Convective Boundary Layer Turbulence-Input",
AutoDelete->True]\), "MaxDopplerVelocity"];
tmax = ResourceData[\!\(\*
TagBox["\"\<WiPPR Images of Convective Boundary Layer Turbulence\>\"",
#& ,
BoxID -> "ResourceTag-WiPPR Images of Convective Boundary Layer Turbulence-Input",
AutoDelete->True]\), "MaxSlowTime"];
SNRThresholdDB = 10.0;
SmallComponentSize = 10;
altitudeMarginalization = Sum[
   datadb = ImageData[imagenames[[nz]]];
   binaryImage = Binarize[Image[datadb], SNRThresholdDB];
   mask = DeleteSmallComponents[binaryImage, SmallComponentSize];
   ImageData[mask], {nz, 4, 124, 4}];
ReliefPlot[altitudeMarginalization, Sequence[PlotRange -> {1, 
Max[altitudeMarginalization]}, LightingAngle -> None, FrameLabel -> {"Doppler velocity (m/s)", "slow time (sec)"}, BaseStyle -> {FontFamily -> "Arial", FontSize -> 12}, DataRange -> {{-vmax, vmax}, {0, tmax}}, FrameTicks -> True, ImageSize -> 400, AspectRatio -> 1, ClippingStyle -> {Black, Red}, PlotLegends -> BarLegend[
   Automatic, LegendLabel -> Style["count", FontSize -> 10]]]]
Out[9]=

Marginalize across slow time to reveal the wind profile:

In[10]:=
SNRThresholdDB = 10.0;
SmallComponentSize = 10;
zmax = ResourceData[\!\(\*
TagBox["\"\<WiPPR Images of Convective Boundary Layer Turbulence\>\"",
#& ,
BoxID -> "ResourceTag-WiPPR Images of Convective Boundary Layer Turbulence-Input",
AutoDelete->True]\), "MaxAltitude"];
datacube = Table[
   datadb = ImageData[imagenames[[nz]]];
   binaryImage = Binarize[Image[datadb], SNRThresholdDB];
   mask = DeleteSmallComponents[binaryImage, SmallComponentSize];
   ImageData[mask], {nz, 1, 129, 3}];
datacube = Transpose[datacube];
slowtimeMarginalization = Sum[datacube[[nt]], {nt, 1, Length[datacube]}];
ReliefPlot[slowtimeMarginalization, Sequence[PlotRange -> {1, 
Max[slowtimeMarginalization]}, LightingAngle -> None, BaseStyle -> {FontFamily -> "Arial", FontSize -> 12}, AspectRatio -> 1, FrameTicks -> True, ImageSize -> 400, ClippingStyle -> {Black, Black}, DataRange -> {{-vmax, vmax}, {0, zmax}}, FrameLabel -> {"Doppler velocity (m/s)", "altitude (m)"}, PlotLegends -> BarLegend[
   Automatic, LegendLabel -> Style["Count", FontSize -> 10]]]]
Out[11]=

Marshall Bradley, "WiPPR Images of Convective Boundary Layer Turbulence" from the Wolfram Data Repository (2026)  

Data Resource History

Source Metadata

Publisher Information