Database Reference
In-Depth Information
for example, the definition of the
beamform
function implies that the type of
beam
is
Stream
.
The
detect
subquery constructor has several parameters, including
marmotScore
, a custom function which computes the energy in fre-
quency bands that are characteristic of marmot calls. This produces a
<bool,time,time>
stream of local marmot call detections that is merged
with elements from the
net
input stream (representing a stream of tuples
from a remote node). This merged and filtered stream is fed as a control
stream to
sync4
, along with the four raw input streams from the audio sen-
sors.
Sync4
aligns the four data streams in time, and “snapshots” synchro-
nized segments of data according to the time ranges specified in the con-
trol stream. In this way,
sync4
reduces the volume of input data by passing
through only those segments of audio that
detect
suspects contain marmot
calls.
Next, the synchronized windows of data from all four audio channels are
processed by a beam-forming algorithm. The algorithm computes a direction-
of-arrival (DOA) probability distribution and enhances the input signal by
combining phase-shifted versions of the four channels according to the most
likely direction of arrival. The
beam
function returns a stream of two tuples.
We use a special binding syntax, “
beam<doa,enhanced>
=
<
<
>>
float[360],SigSeg
float
,” to give tem-
porary names to the fields of these tuples. That is,
beam.doa
projects a stream
of direction-of-arrivals, and
beam.enhanced
contains the enhanced versions of
the raw input data. Finally, this enhanced signal is fed into an algorithm
that classifies the calls by type (male, female, or juvenile) and, when possible,
identifies individuals.
...
11.2.5 Distributed Processing
WaveScript also includes the ability to specify programs that move data be-
tween several nodes, as in the case of the microphone arrays performing mar-
mot detection. The simplest form of distributed processing is as follows:
// Send side:
ToNet(''MyStream'', S);
// Receive side:
R = FromNet(''MyStream'');
Here, the stream S is made visible to other nodes in the network (who are
declared in a special configuration file) as the named stream “MyStream.” A
receiver can read in this stream and process it as though it were produced
locally. The WaveScope runtime takes care of ensuring that this data is deliv-
ered reliably and in order, and that tuples on this stream are appropriately
time synchronized with local data on the receiving node.
Once a WaveScript program has been written, it is fed to the WaveScope
compiler, which converts it to a binary that can be run inside of a sensor