Моделирование возмущений и отказов элемента в массиве датчиков

Этот пример показывает, как смоделировать амплитуду, фазу, положение и возмущения шаблона, а также отказы элемента в массиве датчиков.

Возмущение амплитуды

В этом разделе показано, как добавить возмущения усиления или амплитуды на равномерном линейном массиве (ULA) из 10 элементов. Рассмотрим возмущения как статистически независимые от нуля Гауссовы случайные переменные со стандартным отклонением 0,1.

Создайте антенну ULA из 10 элементов.

N = 10;
ula = phased.ULA(N);

Создайте амплитудные или усилительные возмущения путем генерации нормально распределенных случайных чисел со средним значением 1.

rs = rng(7);
pertStDev = 0.1;

% Clone the ideal ULA
perturbedULA = clone(ula);
perturbedULA.Taper = 1+randn(1,N)*pertStDev;

Сравните реакцию возмущенных с идеальным массивом.

% 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');

Возмущение фазы

В этом разделе показано, как добавить возмущения фазы к антенне ULA, используемой в предыдущем разделе. Рассмотрите распределение возмущений как аналогичное предыдущему разделу.

Отпустите системный объект и установите сужения. Сужения имеют величину 1 и случайные сдвиги фазы со средним 0.

release(perturbedULA);
perturbedULA.Taper = exp(1i*randn(1,N)*pertStDev);

Сравните реакцию возмущенных с идеальным массивом.

% 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)');

Заметьте, как возмущенная реакция имеет более мелкие значения null.

Возмущение Положения

В этом разделе показано, как возмущать положения датчика ULA вдоль трех осей.

% Get positions of ideal ULA
ulaPos = getElementPosition(ula);
% Add perturbations in all dimensions
ulaPosPert = ulaPos + randn(size(ulaPos))*pertStDev;

Создайте возмущенный массив.

perturbedULA = phased.ConformalArray('ElementPosition',ulaPosPert,...
    'ElementNormal',zeros(2,N));

Сравните реакцию возмущенных с идеальным массивом.

% Overlay responses
clf;
helperCompareResponses(perturbedULA,phased.ULA(N), ...
    'Position Perturbation', {'Perturbed','Ideal'});

Просмотрите массив.

viewArray(perturbedULA);
title('Element Positions');

Возмущение шаблона

Этот раздел заменит изотропные антенные элементы на возмущенные шаблоны.

Сначала создайте 10 пользовательских антенные элементы с возмущенными изотропными шаблонами.

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

Здесь сопоставьте 10 шаблонов в массиве ячеек 'element' с 10 датчиками с помощью свойства ElementIndices.

perturbedULA = phased.HeterogeneousULA('ElementSet',element, ...
                                        'ElementIndices',1:N);

Сравните реакцию возмущенных с идеальным массивом.

% 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');

Отказы элемента

Этот раздел будет моделировать отказы элемента на равномерно прямоугольном массиве 8 на 10. Каждый элемент имеет 10-процентную вероятность отказа.

Создайте антенну URA из 8 на 10 элементов.

ura = phased.URA([8 10]);

Отказы могут быть смоделированы путем установки коэффициента усиления на соответствующем датчике равным 0. Здесь создается матрица, в которой каждый элемент имеет 10-процентную вероятность быть 0.

ura.Taper  = double(rand(8,10) > .1);

Сравните реакцию массива с неудачными элементами с идеальным массивом.

% Overlay responses
clf;
helperCompareResponses(ura,phased.ULA(N),'Element Failures', ...
                       {'Failures','No Failures'});

Заметьте, как трудно достичь глубоких нулей в отклике массива с неудачными элементами.

Просмотрите отказавшие элементы.

viewArray(ura,'ShowTaper',true);
title('Failed Elements');

% reset the random seed
rng(rs)

Сводные данные

Этот пример показал, как смоделировать различные виды возмущений, а также отказы элемента. Это также продемонстрировало эффект на ответ массива для всех случаев.