exponenta event banner

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

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

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

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

Отпустите объект System и установите конусы. Конусы имеют величину 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 шаблонов в массиве ячеек «element» с 10 датчиками с помощью свойства ElityIndices.

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)

Резюме

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