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