Калибровка массива с использованием пилотных источников
возвращает оцененные позиции элемента, estpos
= pilotcalib(nompos
,x
,pilotang
)estpos
, датчика массива. Аргумент nompos
представляет относительные номинальные положения массива перед калибровкой. Номинальное положение соответствует первому элементу массива. Аргумент x
представляет сигналы, принятые массивом, поступающим от источников пилот-сигнала. Аргумент pilotang
содержит известные направления каждого из пилотных источников. В этом случае требуется три или более пилотных источников.
[
также возвращает предполагаемое сужение массива, estpos
,esttaper
]
= pilotcalib(nompos
,x
,pilotang
)esttaper
. Каждый элемент esttaper
содержит предполагаемое значение конусности соответствующего элемента массива. В этом случае предшествующая номинальная конусность является одной для каждого элемента. В этом случае требуется четыре или более пилотных источников.
Создайте 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
nompos
- Номинальные относительные положения элементаНоминальные относительные положения элемента, заданные как вещественная 3-бай- N матрица. Размерная N является количеством элементов в массиве датчиков. Положения элементов относятся к первому элементу массива и заданы в единицах измерения длины волны сигнала. Каждый столбец nompos
представляет [x;y;z]
координаты соответствующего элемента. Номинальное положение всех датчиков должно быть в пределах половины длины волны их фактических положений для успешной калибровки.
Типы данных: double
x
- Пилот-сигналыПилот-сигналы, заданные как комплексная матрица L -by- N -by- M. Аргумент x
представляет сигналы, принимаемые массивом, когда источники пилот-сигнала передают. Размерная L является количеством моментальных снимков каждого исходного сигнала пилот-сигнала. Размерное N является количеством элементов массива. Размерность M это количество пилотных источников.
Типы данных: double
Поддержка комплексного числа: Да
pilotang
- Углы управленияУглы пилот-сигнала, заданные как действительная матрица 2 M байта. Размерность M это количество пилотных источников. Каждый столбец содержит направление источника пилот-сигнала в форме [azimuth; elevation]
. Угловые модули находятся в степенях. Угол азимута должен лежать между -180 ° и 180 °, а угол возвышения должен лежать между -90 ° и 90 °. Угол азимута измеряется от оси x до проекции направления источника в плоскость xy, положительный к оси y. Угол возвышения определяется как угол от плоскости xy до исходного направления, положительный к оси z. Направления источника калибровки должны охватывать достаточно разнообразные азимут и углы возвышения.
Типы данных: double
nomtaper
- Номинальная конусностьНоминальная конусность элементов массива, заданная как комплексный вектор- N-на-1 столбец. Размерное N является количеством элементов массива. Каждый компонент представляет номинальную конусность соответствующего элемента.
Типы данных: double
Поддержка комплексного числа: Да
uncerts
- строение оценки неопределенности[1,1,1,1]
(по умолчанию) | вектор 1 на 4 таковые и нулейСтроение оценки неопределенности, заданная как вектор 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
estpos
- Предполагаемые позицииПредполагаемые позиции элемента, возвращенные как действительная матрица 3- N. Модули указаны в длине волны сигнала. Размерное N является количеством элементов массива. Каждый столбец estpos
представляет [x;y;z]
координаты соответствующего элемента.
esttaper
- Оценка конусностиПредполагаемые значения конусности, возвращенные как комплексный вектор- 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.
Указания и ограничения по применению:
Не поддерживает входы переменного размера.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.