Modeling Perturbations and Element Failures in a Sensor Array
This example shows how to model amplitude, phase, position and pattern perturbations as well as element failures in a sensor array.
Amplitude Perturbation
This section shows how to add gain or amplitude perturbations on a uniform linear array (ULA) of 10 elements. Consider the perturbations to be statistically independent zero-mean Gaussian random variables with standard deviation of 0.1.
Create a ULA antenna of 10 elements.
N = 10; ula = phased.ULA(N);
Create amplitude or gain perturbations on the array
rs = rng(7); pertStDev = 0.1; perturbations(ula,'TaperMagnitude','Normal',1,pertStDev); perturbedULA = perturbedArray(ula);
Compare the response of the perturbed to the ideal array.
% Overlay responses c = 3e8; freq = c; subplot(2,1,1); helperCompareResponses(perturbedULA,ula,'Amplitude Perturbation', ... {'Perturbed','Ideal'}); % Show the corresponding tapers subplot(2,1,2); stem(perturbedULA.Taper) title('Amplitude Tapers');xlabel('Sensor');ylabel('Gain');
Phase Perturbation
This section shows how to add phase perturbations to the ULA antenna used in the previous section. Consider the perturbations distribution to be similar to the previous section.
perturbations(ula,'TaperMagnitude','none'); perturbations(ula,'TaperPhase','Normal',0,pertStDev); perturbedULA = perturbedArray(ula);
Compare the response of the perturbed to the ideal array.
% Overlay responses subplot(2,1,1); helperCompareResponses(perturbedULA,ula,'Phase Perturbation', ... {'Perturbed','Ideal'}); % Show the corresponding tapers subplot(2,1,2); stem(angle(perturbedULA.Taper)) title('Phase Tapers');xlabel('Sensor');ylabel('Phase (rad)');
Notice how the perturbed response has shallower nulls.
Position Perturbation
This section shows how to perturb the positions of the ULA sensor along the three axes.
perturbations(ula,'TaperPhase','none'); perturbations(ula,'ElementPosition','Normal',0,pertStDev); perturbedULA = perturbedArray(ula);
Compare the response of the perturbed to the ideal array.
% Overlay responses clf; helperCompareResponses(perturbedULA,phased.ULA(N), ... 'Position Perturbation', {'Perturbed','Ideal'});
View the array.
viewArray(perturbedULA);
title('Element Positions');
Pattern Perturbation
This section will replace the isotropic antenna elements with perturbed patterns.
First create 10 custom antenna elements with perturbed isotropic patterns.
antenna = phased.CustomAntennaElement; radpat = antenna.MagnitudePattern; element = cell(1,N); for i = 1:N perturbedAntenna = clone(antenna); perturbedAntenna.MagnitudePattern = ... pow2db(1+randn(size(radpat))*pertStDev); element{i} = perturbedAntenna; end
Here, map the 10 patterns in the cell array 'element' to the 10 sensors using the ElementIndices property.
perturbedULA = phased.HeterogeneousULA('ElementSet',element, ... 'ElementIndices',1:N);
Compare the response of the perturbed to the ideal array.
% Overlay responses clf; subplot(2,2,[1 2]); helperCompareResponses(perturbedULA,phased.ULA(N),... 'Pattern Perturbation', ... {'Perturbed','Ideal'}); % Show the perturbed pattern response next to the ideal isotropic pattern subplot(2,2,3); pattern(ula.Element,freq,'CoordinateSystem','polar','Type','power') title('Isotropic pattern'); subplot(2,2,4); pattern(element{1},freq,'CoordinateSystem','polar','Type','power') title('Perturbed pattern');
Element Failures
This section will model element failures on an 8 by 10 uniformly rectangular array. Each element has 10 percent probability of failing.
Create a URA antenna of 8 by 10 elements.
ura = phased.URA([8 10]);
Failures can be modeled by setting the gain on the corresponding sensor to 0. Here a matrix is created in which each element has a 10 percent probability of being 0.
perturbations(ura,'ElementFailure','RandomFail',0.1); perturbedURA = perturbedArray(ura); % ura.Taper = double(rand(8,10) > .1);
Compare the response of the array with failed elements to the ideal array.
% Overlay responses clf; helperCompareResponses(perturbedURA,ura,'Element Failures', ... {'Failures','No Failures'});
Notice how deep nulls are hard to attain in the response of the array with failed elements.
View the failed elements.
viewArray(perturbedURA,'ShowTaper',true); title('Failed Elements'); % reset the random seed rng(rs)
Summary
This example showed how to model different kind of perturbations as well as element failures. It also demonstrated the effect on the array response for all the cases.