Main Content

Signal Collection

Support for Modeling Signal Collection

To model the collection of a signal with a sensor element or sensor array, you can use the phased.Collector or phased.WidebandCollector. Both collector objects assume that incident signals have propagated to the location of the array elements, but have not been received by the array. In other words, the collector objects do not model the actual reception by the array. See Receiver Preamp for signal effects related to the gain and internal noise of the array’s receiver.

In many array processing applications, the ratio of the signal’s bandwidth to the carrier frequency is small. Expressed as a percentage, this ratio does not exceed a few percent. Examples include radar applications where a pulse waveform is modulated by a carrier frequency in the microwave range. These are narrowband signals. For narrowband signals, you can express the steering vector as a function of a single frequency, the carrier frequency. For narrowband signals, the phased.Collector object is appropriate.

In other applications, the narrowband assumption is not justified. In many acoustic and sonar applications, the wave impinging on the array is a pressure wave that is unmodulated. It is not possible to express the steering vector as a function of a single frequency. In these cases, the subband approach implemented in phased.WidebandCollector is appropriate. The wideband collector decomposes the input into subbands and computes the steering vector for each subband.

When you use the narrowband collector, phased.Collector, you must specify these aspects of the collector:

  • Operating frequency of the array

  • Propagation speed of the wave

  • Sensor (single element) or sensor array

  • Type of incoming wave. Choices are 'Plane' and 'Unspecified'. If you select 'Plane', the input signals are multiple plane waves impinging on the entire array. Each plane wave is received by all collecting elements. If you select 'Unspecified', the input signal are individual waves impinging on individual sensors.

  • Whether to apply weights to signals collected by different elements in the array. If you want to apply weights, you specify them when you execute the System object™.

When you use the wideband collector, phased.WidebandCollector, you must specify these aspects of the collector:

  • Carrier frequency

  • Whether the signal is demodulated to the baseband

  • Operating frequency of the array

  • Propagation speed of the wave

  • Sampling rate

  • Sensor (single element) or sensor array

  • Type of incoming wave. Choices are 'Plane' and 'Unspecified'. If you select 'Plane', the input signals are multiple plane waves impinging on the entire array. Each plane wave is received by all collecting elements. If you select 'Unspecified', the input signal are individual waves impinging on individual sensors.

  • Whether to apply weights to signals collected by different elements in the array. If you want to apply weights, you specify them when you execute the System object.

Narrowband Collector for Uniform Linear Array

This example shows how to construct a narrowband collector that models a plane wave impinging on a two-element uniform linear array. The array has an element spacing of 0.5 m (default for a ULA). The operating frequency of the array is 300 MHz.

Create the array and collector System objects.

array = phased.ULA('NumElements',2,'ElementSpacing',0.5);
collector = phased.Collector('Sensor',array,...
    'PropagationSpeed',physconst('LightSpeed'),...
    'OperatingFrequency',3e8,'Wavefront','Plane');

Create the signal and simulate reception from an angle of (45;0).

x =[1 -1 1 -1]';
y = collector(x,[45;0])
y = 4×2 complex

   0.4433 - 0.8964i   0.4433 + 0.8964i
  -0.4433 + 0.8964i  -0.4433 - 0.8964i
   0.4433 - 0.8964i   0.4433 + 0.8964i
  -0.4433 + 0.8964i  -0.4433 - 0.8964i

In the preceding case, the collector object multiplies the input signal, x, by the corresponding element of the steering vector for the two-element ULA. The following code produces the response in an equivalent manner. First, create the ULA and then create the steering vector. Compare with the previous result.

array = phased.ULA('NumElements',2,'ElementSpacing',0.5);
steeringvec = phased.SteeringVector('SensorArray',array);
sv = steeringvec(3e8,[45;0]);
x =[1 -1 1 -1]';
y1 = x*sv.'
y1 = 4×2 complex

   0.4433 - 0.8964i   0.4433 + 0.8964i
  -0.4433 + 0.8964i  -0.4433 - 0.8964i
   0.4433 - 0.8964i   0.4433 + 0.8964i
  -0.4433 + 0.8964i  -0.4433 - 0.8964i

Narrowband Collector for a Single Antenna Element

The Sensor property of a phased.Collector System object™ can specify a single antenna element. In this example, create a custom antenna element using the phased.CustomAntennaElement System object. The antenna element has a cosine response over elevation angles from (-90°,90°). Plot the polar pattern response of the antenna at 1 GHz on an elevation cut at 0° azimuth. Display the antenna voltage response at 0° azimuth and 45° elevation.

fc = 1e9;
antenna = phased.CustomAntennaElement;
antenna.AzimuthAngles = -180:180;
antenna.ElevationAngles = -90:90;
antenna.MagnitudePattern = mag2db(...
    repmat(cosd(antenna.ElevationAngles)',1,numel(antenna.AzimuthAngles)));
resp = antenna(fc,[0;45])
resp = 0.7071
pattern(antenna,fc,0,[-90:90],'Type','powerdb')

The antenna voltage response at 0° azimuth and 45° elevation is cos(45°) as expected.

Assume a narrowband sinusoidal input incident on the antenna element from 0° azimuth and 45° elevation. Determine the signal collected at the element.

collector = phased.Collector('Sensor',antenna,'OperatingFrequency',fc);
x =[1 -1 1 -1]';
y = collector(x,[0;45])
y = 4×1

    0.7071
   -0.7071
    0.7071
   -0.7071

Wideband Signal Collection

This example shows how to simulate the reception of a wideband acoustic signal by a single omnidirectional microphone element.

x = randn(10,1);
c = 340.0;
microphone = phased.OmnidirectionalMicrophoneElement(...
    'FrequencyRange',[20 20e3],'BackBaffled',true);
collector = phased.WidebandCollector('Sensor',microphone,...
    'PropagationSpeed',c,'SampleRate',50e3,...
    'ModulatedInput',false);
y = collector(x,[30;10]);