pilotcalib

Калибровка массива с использованием пилотных источников

Описание

пример

estpos = pilotcalib(nompos,x,pilotang) возвращает оцененные позиции элемента, estpos, датчика массива. Аргумент nompos представляет относительные номинальные положения массива перед калибровкой. Номинальное положение соответствует первому элементу массива. Аргумент x представляет сигналы, принятые массивом, поступающим от источников пилот-сигнала. Аргумент pilotang содержит известные направления каждого из пилотных источников. В этом случае требуется три или более пилотных источников.

пример

[estpos,esttaper] = pilotcalib(nompos,x,pilotang) также возвращает предполагаемое сужение массива, esttaper. Каждый элемент esttaper содержит предполагаемое значение конусности соответствующего элемента массива. В этом случае предшествующая номинальная конусность является одной для каждого элемента. В этом случае требуется четыре или более пилотных источников.

пример

[estpos,esttaper] = pilotcalib(nompos,x,pilotang,nomtaper) задает nomtaper как номинальное сужение массива. В этом случае требуется четыре или более пилотных источников.

пример

[estpos,esttaper] = pilotcalib(nompos,x,pilotang,nomtaper,uncerts) задает uncerts как параметры строения, используемые для калибровки неопределенностей массива. Настройки строения определяют, какие параметры оценивать.

Примеры

свернуть все

Создайте ULA- массива с 7 элементами из изотропных антенных элементов, разнесенных на половину длины волны. Предположим, что массив геометрически возмущен тремя размерностями. Выполните калибровку управления на массиве с помощью 4 источников управления на азимуте и углах возвышения (-60,0), (10, -40), (40,0) и (120,45) степени. Для процесса калибровки пилот-сигналы имеют ОСШ 30 дБ. Каждый пилот-сигнал содержит 10 000 выборки. Предположим, что сигналы имеют частоту 600 МГц.

Настройте ULA с номинальными параметрами

fc = 600e6;
c = physconst('LightSpeed');
lam = c/fc;
d = 0.5*lam;
sIso = phased.IsotropicAntennaElement('FrequencyRange',[100,900]*1e6);
Nelem = 7;
NominalTaper = ones(1,Nelem);
sULA = phased.ULA('Element',sIso,'NumElements',Nelem,'ElementSpacing',d,...
    'Taper',NominalTaper);

Создайте пилот-сигналы

Случайным образом возмущает положения элемента гауссовым распределением, имеющим стандартное отклонение длины волны 0,1. Не возмущайте положение первого элемента или сужающихся элементов.

posstd = 0.1;
rng default
NominalElementPositions = getElementPosition(sULA)/lam;
ReferenceElement = NominalElementPositions(:,1);
PositionPert = [zeros(3,1),posstd*randn(3,Nelem-1)];
ActualElementPositions = NominalElementPositions + PositionPert;
ActualTaper = NominalTaper;

Сгенерируйте сигналы, используя фактические положения и конусы.

Nsamp  = 10000;
ncov = 0.001;
PilotAng = [-60,10,40,120; 0,-40,0,45];
Npilot = size(PilotAng,2);
for n = 1:Npilot
    X(:,:,n) = sensorsig(ActualElementPositions,...
        Nsamp,PilotAng(:,n),ncov,'Taper',ActualTaper.');
end

Выполните калибровку управления

estpos = pilotcalib(NominalElementPositions - ReferenceElement*ones(1,Nelem),...
    X,PilotAng);

Верните назад положение датчика ссылки

estpos = estpos + NominalElementPositions(:,1)*ones(1,Nelem);

Исследуйте корневую среднюю квадратную (RMS) ошибку калиброванных параметров

Вычислите значение RMS начальной ошибки положения.

numpos = 3*Nelem;
initposRMSE = sqrt(sum(PositionPert(:).^2)/numpos);

Вычислите значение RMS калиброванной ошибки положения.

solvposErr = ActualElementPositions - estpos;
solvposRMSE = sqrt(sum(solvposErr(:).^2)/(numpos));

Сравните калиброванную ошибку положения RMS с ошибкой RMS начального положения. Калибровка уменьшает ошибку положения RMS.

disp(solvposRMSE/initposRMSE)
   2.3493e-04

Создайте ULA- массива с 7 элементами из изотропных антенных элементов, разнесенных на половину длины волны. Предположим, что массив геометрически возмущен тремя размерностями. Выполните калибровку управления на массиве с помощью 4 источников управления на азимуте и углах возвышения ( -60,0) , (10,80) , (40 , -40) и (-80,0) степеней. Для процесса калибровки пилот-сигналы имеют ОСШ 30 дБ. Каждый пилот-сигнал содержит 10 000 выборки. Предположим, что сигналы имеют частоту 600 МГц.

Настройте ULA с номинальными параметрами

fc = 600e6;
c = physconst('LightSpeed');
lam = c/fc;
d = 0.5*lam;
sIso = phased.IsotropicAntennaElement('FrequencyRange',[100,900]*1e6);
Nelem = 7;
NominalTaper = ones(1,Nelem);
sULA = phased.ULA('Element',sIso,'NumElements',Nelem,'ElementSpacing',d,...
    'Taper',NominalTaper);

Создайте пилот-сигналы

Случайным образом возмущает положения элемента с помощью Гауссова распределения, которое имеет стандартное отклонение 0,1 длины волны. Не возмущайте положение первого элемента.

posstd = 0.1;
rng default
NominalElementPositions = getElementPosition(sULA)/lam;
ReferenceElement = NominalElementPositions(:,1);
PositionPert = [zeros(3,1),posstd*randn(3,Nelem-1)];
ActualElementPositions = NominalElementPositions + PositionPert;

Возмущение конуса по величине и фазе. Не возмущайте первую конусность.

tapermagstd = 0.15;
taperphasestd = 0.15;
tapermagpert = tapermagstd*[0; randn(Nelem-1,1)];
ActualTaper = NominalTaper' + tapermagpert;
taperphasepert = taperphasestd*[0;randn(Nelem-1,1)];
ActualTaper = ActualTaper.*exp(1i*taperphasepert);

Сгенерируйте сигналы, используя возмущенные положения, конусы и четыре источника управления.

Nsamp  = 10000;
ncov = 0.001;
PilotAng = [-60,10,40,-80; 10,80,-40,0];
Npilot = size(PilotAng,2);
for n = 1:Npilot
    X(:,:,n) = sensorsig(ActualElementPositions,Nsamp,...,
        PilotAng(:,n),ncov,'Taper',ActualTaper);
end

Выполните калибровку управления

[estpos,esttaper] = pilotcalib(...
    NominalElementPositions - ReferenceElement*ones(1,Nelem),...
    X,PilotAng);

Верните назад положение датчика ссылки

estpos = estpos + NominalElementPositions(:,1)*ones(1,Nelem);

Исследуйте корневую среднюю квадратную (RMS) ошибку калиброванных параметров

Вычислите значения RMS начальных конических возмущений.

tapermagpertRMSE = sqrt(tapermagpert'*tapermagpert/Nelem);
taperphasepertRMSE = sqrt(taperphasepert'*taperphasepert/Nelem);

Вычислите значение RMS калиброванной ошибки величины.

diff = abs(ActualTaper) - abs(esttaper);
diff2 = diff'*diff;
tapermagsolvRMSE = sqrt(diff2/Nelem);

Сравните калиброванную ошибку величины RMS с начальной ошибкой величины RMS. Калибровка уменьшает ошибку величины RMS.

disp(tapermagsolvRMSE/tapermagpertRMSE)
   6.7715e-04

Вычислите значение RMS калиброванной ошибки фазы конусности.

diff = unwrap(angle(ActualTaper) - angle(esttaper));
diff2 = diff'*diff;
tapersolvphaseRMSE = sqrt(diff2/Nelem);

Сравните калиброванную ошибку фазы RMS с начальной ошибкой фазы RMS. Калибровка уменьшает ошибку фазы RMS.

disp(tapersolvphaseRMSE/taperphasepertRMSE)
    0.0021
% Compute the RMS value of the initial position error.
numpos = 3*Nelem;
initposRMSE = sqrt(sum(PositionPert(:).^2)/numpos);

Вычислите значение RMS калиброванной ошибки положения.

solvposErr = ActualElementPositions - estpos;
solvposRMSE = sqrt(sum(solvposErr(:).^2)/(numpos));

Сравните калиброванную ошибку положения RMS с ошибкой RMS начального положения. Калибровка уменьшает ошибку положения RMS.

disp(solvposRMSE/initposRMSE)
   3.6308e-04

Создайте URA с 9 элементами из изотропных антенных элементов, разнесенных на половину длины волны. Предположим, что массив был геометрически возмущен во всех направлениях, кроме первого элемента. Выполните калибровку управления на массиве с помощью 5 источников управления на азимуте и углах возвышения (-60,0), (10, -40), (40,0), (120,45) и (170,50) степени. Для процесса калибровки пилот-сигналы имеют ОСШ 30 дБ. Каждый пилот-сигнал содержит 10 000 выборки. Предположим, что сигналы имеют частоту 600 МГц.

Создайте массив

Для удобства используйте phased.URA Система object�, чтобы задать номинальное положение и значения конусности.

fc = 300e6;
c = physconst('LightSpeed');
lam = c/fc;
d = 0.5*lam;
sIso = phased.IsotropicAntennaElement('FrequencyRange',[100,900]*1e6);
sURA = phased.URA('Element',sIso,'Size',[3,3],...
    'ElementSpacing',d,'Taper',ones(3,3));
Nelem = getNumElements(sURA);
taper = getTaper(sURA);

Создайте пилот-сигналы

Случайным образом возмущает положения элемента с помощью Гауссова распределения, которое имеет стандартное отклонение 0,1 длины волны. Не возмущайте положение первого элемента.

posstd = 0.1;
rng default
NominalElementPositions = getElementPosition(sURA)/lam;
ReferenceElement = NominalElementPositions(:,1);
PositionPert = [zeros(3,1),posstd*randn(3,Nelem-1)];
ActualElementPositions = NominalElementPositions + PositionPert;

Возмущение конуса по величине и фазе. Не возмущайте первую конусность.

NominalTaper = getTaper(sURA);
tapermagstd = 0.1;
taperphasestd = 0.1;
tapermagpert = tapermagstd*[0; randn(Nelem-1,1)];
ActualTaper = NominalTaper + tapermagpert;
taperphasepert = taperphasestd*[0;randn(Nelem-1,1)];
ActualTaper = ActualTaper.*exp(1i*taperphasepert);

Сгенерируйте пилот-сигналы, используя возмущенные положения и конусы.

Nsamp  = 10000;
ncov = 0.001;
PilotAng = [-60,10,40,120,170; 0,-40,0,45,50];
Npilot = size(PilotAng,2);
for n = 1:Npilot
    X(:,:,n) = sensorsig(ActualElementPositions,Nsamp,...
        PilotAng(:,n),ncov,'Taper',ActualTaper);
end

Выполните калибровку управления

[estpos,esttaper] = pilotcalib(NominalElementPositions - ReferenceElement*ones(1,Nelem),...
    X,PilotAng,NominalTaper);

Верните назад положение датчика ссылки.

estpos = estpos + NominalElementPositions(:,1)*ones(1,Nelem);

Исследуйте корневую среднюю квадратную (RMS) ошибку калиброванных параметров

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

tapermagpertRMSE = sqrt(tapermagpert'*tapermagpert/Nelem);
taperphasepertRMSE = sqrt(taperphasepert'*taperphasepert/Nelem);

Вычислите значение RMS калиброванной ошибки величины.

diff = abs(ActualTaper) - abs(esttaper);
diff2 = diff'*diff;
tapermagsolvRMSE = sqrt(diff2/Nelem);

Сравните калиброванную ошибку величины RMS с начальной ошибкой RMS. Калибровка уменьшает ошибку величины RMS.

disp(tapermagsolvRMSE/tapermagpertRMSE)
    0.0014

Вычислите значение RMS калиброванной ошибки фазы конусности.

diff = unwrap(angle(ActualTaper) - angle(esttaper));
diff2 = diff'*diff;
tapersolvphaseRMSE = sqrt(diff2/Nelem);

Сравните калиброванную ошибку фазы RMS с начальной ошибкой RMS. Калибровка уменьшает ошибку фазы RMS.

disp(tapersolvphaseRMSE/taperphasepertRMSE)
    0.0015

Вычислите значение RMS начальной ошибки положения.

numpos = 3*Nelem;
initposRMSE = sqrt(sum(PositionPert(:).^2)/numpos);

Вычислите значение RMS калиброванной ошибки положения.

solvposErr = ActualElementPositions - estpos;
solvposRMSE = sqrt(sum(solvposErr(:).^2)/(numpos));

Сравните калиброванную ошибку положения RMS с ошибкой RMS начального положения. Калибровка уменьшает ошибку положения RMS.

disp(solvposRMSE/initposRMSE)
   7.1582e-04

Создайте ULA с 6 элементами из изотропных антенных элементов, которые разнесены на половину длины волны. Предположим, что массив был геометрически возмущен в плоскости x-y и содержит неизвестную ошибку конусности. Выполните калибровку управления на массиве с помощью четырех источников управления на азимуте и углах возвышения (-60,0), (10, -40), (40,0) и (120,45) степени. Для процесса калибровки пилот-сигналы имеют ОСШ 30 дБ. Каждый пилот-сигнал содержит 10 000 выборки. Предположим, что сигналы имеют частоту 600 МГц.

Настройте ULA с номинальными параметрами

fc = 600e6;
c = physconst('LightSpeed');
lam = c/fc;
d = 0.5*lam;
sIso = phased.IsotropicAntennaElement('FrequencyRange',[100,900]*1e6);
Nelem = 6;
NominalTaper = ones(1,Nelem);
sULA = phased.ULA('Element',sIso,'NumElements',Nelem,'ElementSpacing',d,...
    'Taper',NominalTaper);

Создайте пилот-сигналы

Случайным образом возмущает положения элемента с помощью Гауссова распределения, которое имеет стандартное отклонение 0,13 длины волны. Не возмущайте положение первого элемента.

posstd = 0.13;
rng default
NominalElementPositions = getElementPosition(sULA)/lam;
ReferenceElement = NominalElementPositions(:,1);
PositionPert = [zeros(3,1),posstd*randn(3,Nelem-1)];
ActualElementPositions = NominalElementPositions + PositionPert;

Возмущение конуса по величине и фазе. Не возмущайте первую конусность.

tapermagstd = 0.15;
taperphasestd = 0.15;
tapermagpert = tapermagstd*[0; randn(Nelem-1,1)];
ActualTaper = NominalTaper' + tapermagpert;
taperphasepert = taperphasestd*[0;randn(Nelem-1,1)];
ActualTaper = ActualTaper.*exp(1i*taperphasepert);

Сгенерируйте сигналы, используя возмущенные положения и конусы.

Nsamp  = 10000;
ncov = 0.001;
PilotAng = [-60,10,40,120; 0,-40,0,45];
Npilot = size(PilotAng,2);
for n = 1:Npilot
    X(:,:,n) = sensorsig(ActualElementPositions,Nsamp,...
        PilotAng(:,n),ncov,'Taper',ActualTaper);
end

Выполните калибровку управления

Отключите оценку весов конусности.

[estpos,esttaper] = pilotcalib(NominalElementPositions - ReferenceElement*ones(1,Nelem),...
    X,PilotAng,NominalTaper.',[1,1,1,0]');

Верните назад положение датчика ссылки

estpos = estpos + NominalElementPositions(:,1)*ones(1,Nelem);

Исследуйте корневую среднюю квадратную (RMS) ошибку калиброванных параметров

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

tapermagpertRMSE = sqrt(tapermagpert'*tapermagpert/Nelem);
taperphasepertRMSE = sqrt(taperphasepert'*taperphasepert/Nelem);

Вычислите значение RMS калиброванной ошибки величины.

diff = abs(ActualTaper) - abs(esttaper);
diff2 = diff'*diff;
tapermagsolvRMSE = sqrt(diff2/Nelem);

Сравните калиброванную ошибку величины RMS с начальной ошибкой RMS. Калибровка уменьшает ошибку величины RMS.

disp(tapermagsolvRMSE/tapermagpertRMSE)
    1.0000

Вычислите значение RMS калиброванной ошибки фазы конусности

diff = unwrap(angle(ActualTaper) - angle(esttaper));
diff2 = diff'*diff;
tapersolvphaseRMSE = sqrt(diff2/Nelem);

Сравните калиброванную ошибку фазы RMS с начальной ошибкой RMS. Калибровка уменьшает ошибку фазы RMS.

disp(tapersolvphaseRMSE/taperphasepertRMSE)
     1

Вычислите значение RMS начальной ошибки положения.

numpos = 3*Nelem;
initposRMSE = sqrt(sum(PositionPert(:).^2)/numpos);

Вычислите значение RMS калиброванной ошибки положения.

solvposErr = ActualElementPositions - estpos;
solvposRMSE = sqrt(sum(solvposErr(:).^2)/(numpos));

Сравните калиброванную ошибку положения RMS с ошибкой RMS начального положения. Калибровка уменьшает ошибку положения RMS.

disp(solvposRMSE/initposRMSE)
    0.1502

Входные параметры

свернуть все

Номинальные относительные положения элемента, заданные как вещественная 3-бай- N матрица. Размерная N является количеством элементов в массиве датчиков. Положения элементов относятся к первому элементу массива и заданы в единицах измерения длины волны сигнала. Каждый столбец nompos представляет [x;y;z] координаты соответствующего элемента. Номинальное положение всех датчиков должно быть в пределах половины длины волны их фактических положений для успешной калибровки.

Типы данных: double

Пилот-сигналы, заданные как комплексная матрица L -by- N -by- M. Аргумент x представляет сигналы, принимаемые массивом, когда источники пилот-сигнала передают. Размерная L является количеством моментальных снимков каждого исходного сигнала пилот-сигнала. Размерное N является количеством элементов массива. Размерность M это количество пилотных источников.

Типы данных: double
Поддержка комплексного числа: Да

Углы пилот-сигнала, заданные как действительная матрица 2 M байта. Размерность M это количество пилотных источников. Каждый столбец содержит направление источника пилот-сигнала в форме [azimuth; elevation]. Угловые модули находятся в степенях. Угол азимута должен лежать между -180 ° и 180 °, а угол возвышения должен лежать между -90 ° и 90 °. Угол азимута измеряется от оси x до проекции направления источника в плоскость xy, положительный к оси y. Угол возвышения определяется как угол от плоскости xy до исходного направления, положительный к оси z. Направления источника калибровки должны охватывать достаточно разнообразные азимут и углы возвышения.

Типы данных: double

Номинальная конусность элементов массива, заданная как комплексный вектор- N-на-1 столбец. Размерное N является количеством элементов массива. Каждый компонент представляет номинальную конусность соответствующего элемента.

Типы данных: double
Поддержка комплексного числа: Да

Строение оценки неопределенности, заданная как вектор 1 на 4, состоящий из 0"с и 1"с. Векторная uncerts определяет, какие неопределенности оценивать. Вектор принимает форму [xflag; yflag; zflag; taperflag]. Задайте xflag, yflag, или zflag на 1 для оценки неопределенностей в x, y или z осях. Задайте taperflag на 1 для оценки неопределенностей в конусности. Количество пилотных источников должно быть больше или равно количеству 1"s в векторе.

Для примера задайте uncerts на [0;1;1;1] для оценки неопределенностей в компонентах положения y и z элемента и конусности одновременно.

Типы данных: double

Выходные аргументы

свернуть все

Предполагаемые позиции элемента, возвращенные как действительная матрица 3- N. Модули указаны в длине волны сигнала. Размерное N является количеством элементов массива. Каждый столбец estpos представляет [x;y;z] координаты соответствующего элемента.

Предполагаемые значения конусности, возвращенные как комплексный вектор- N-на-1 столбец. Размерное N является количеством элементов массива. Каждый элемент esttaper представляет конусность соответствующего элемента датчика.

Алгоритмы

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

Алгоритм калибрует относительные положения датчиков массива относительно первого датчика. Чтобы использовать алгоритм, сначала вычитайте положение первого элемента из каждого элемента, затем передайте относительный массив в функцию как номинальный аргумент положения, чтобы получить калиброванные относительные положения. Наконец, добавьте назад первое положение элемента во все относительные положения, чтобы создать полностью калиброванный массив.

Ссылки

[1] N. Fistas and A. Manikas, «A New General Global Array Calibration Method», IEEE Proceedings of ICASSP, Vol. IV, pp. 73-76, April 1994.

Расширенные возможности

.
Введенный в R2015a