exponenta event banner

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 в качестве настроек конфигурации, используемых для калибровки неопределенностей массива. Параметры конфигурации определяют параметры для оценки.

Примеры

свернуть все

Построение 7-элементной ULA решетки изотропных антенных элементов, разнесенных на половину длины волны. Предположим, что массив геометрически возмущен в трех измерениях. Выполните калибровку летчика на решетке с помощью 4 источников летчика при углах азимута и места (-60,0), (10, -40), (40,0) и (120,45) градусов. Для процесса калибровки пилот-сигналы имеют SNR 30 дБ. Каждый пилот-сигнал содержит 10000 выборок. Предположим, что сигналы имеют частоту 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);

Проверить среднеквадратичную (среднеквадратичную) погрешность калиброванных параметров

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

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

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

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

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

disp(solvposRMSE/initposRMSE)
   2.3493e-04

Построение 7-элементной ULA решетки изотропных антенных элементов, разнесенных на половину длины волны. Предположим, что массив геометрически возмущен в трех измерениях. Выполните калибровку летчика на решетке с помощью 4 источников летчика при углах азимута и места (-60,0), (10,80), (40, -40) и (-80,0) градусов. Для процесса калибровки пилот-сигналы имеют SNR 30 дБ. Каждый пилот-сигнал содержит 10000 выборок. Предположим, что сигналы имеют частоту 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);

Проверьте среднеквадратическую (среднеквадратическую) погрешность калиброванных параметров

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

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

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

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

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

disp(tapermagsolvRMSE/tapermagpertRMSE)
   6.7715e-04

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

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);

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

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

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

disp(solvposRMSE/initposRMSE)
   3.6308e-04

Построение 9-элементного URA изотропных антенных элементов, разнесенных на половину длины волны. Предположим, что массив был геометрически возмущен во всех направлениях, кроме первого элемента. Выполните калибровку летчика на решетке с использованием 5 источников летчика при углах азимута и места (-60,0), (10, -40), (40,0), (120,45) и (170,50) градусов. Для процесса калибровки пилот-сигналы имеют SNR 30 дБ. Каждый пилот-сигнал содержит 10000 выборок. Предположим, что сигналы имеют частоту 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);

Проверьте среднеквадратическую (среднеквадратическую) погрешность калиброванных параметров

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

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

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

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

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

disp(tapermagsolvRMSE/tapermagpertRMSE)
    0.0014

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

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

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

disp(tapersolvphaseRMSE/taperphasepertRMSE)
    0.0015

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

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

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

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

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

disp(solvposRMSE/initposRMSE)
   7.1582e-04

Построение 6-элементной ULA изотропных антенных элементов, разнесенных на половину длины волны. Предположим, что массив был геометрически возмущен в плоскости x-y и содержит неизвестную ошибку конусности. Выполните калибровку летчика на решетке с помощью четырех источников летчика при углах азимута и места (-60,0), (10, -40), (40,0) и (120,45) градусов. Для процесса калибровки пилот-сигналы имеют SNR 30 дБ. Каждый пилот-сигнал содержит 10000 выборок. Предположим, что сигналы имеют частоту 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);

Проверьте среднеквадратическую (среднеквадратическую) погрешность калиброванных параметров

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

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

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

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

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

disp(tapermagsolvRMSE/tapermagpertRMSE)
    1.0000

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

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

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

disp(tapersolvphaseRMSE/taperphasepertRMSE)
     1

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

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

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

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

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

disp(solvposRMSE/initposRMSE)
    0.1502

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

свернуть все

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

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

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

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

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

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

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

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

Конфигурация оценки неопределенности, заданная как вектор 1 на 4, состоящий из 0"s и 1"s. Вектор 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-by-N. Единицы измерения имеют длину волны сигнала. Размерность N - количество элементов массива. Каждый столбец estpos представляет [x;y;z] координаты соответствующего элемента.

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

Алгоритмы

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

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

Ссылки

[1] Н. Фистас и А. Маникас, «A New General Global Array Calibration Method», IEEE Proceedings of ICASSP, Vol. IV, pp. 73-76, April 1994.

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

.
Представлен в R2015a