Этот пример показывает, как смоделировать амплитуду, фазу, положение и возмущения шаблона, а также отказы элемента в массиве датчиков.
В этом разделе показано, как добавить возмущения усиления или амплитуды на равномерном линейном массиве (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)
Этот пример показал, как смоделировать различные виды возмущений, а также отказы элемента. Это также продемонстрировало эффект на ответ массива для всех случаев.