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 с комплексным знаком-by-1 вектор-столбец. Размерность N является количеством элементов массива. Каждый компонент представляет номинальное заострение соответствующего элемента.

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

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

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

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

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

свернуть все

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

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

Алгоритмы

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

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

Ссылки

[1] Н. Фистас и А. Мэникас, "Новый Общий Глобальный Калибровочный Метод Массивов", Продолжения IEEE ICASSP, IV Издания, стр 73-76, апрель 1994.

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

Представленный в R2015a