Калибровка массива с использованием пилотных источников
возвращает оценочные позиции элементов, estpos = pilotcalib(nompos,x,pilotang)estpos, матрицы датчиков. Аргумент nompos представляет относительные номинальные положения матрицы датчиков перед калибровкой. Номинальное положение относительно первого элемента массива. Аргумент x представляет сигналы, принятые матрицей, поступающие от источников пилот-сигнала. Аргумент pilotang содержит известные направления каждого из пилотных источников. В этом случае требуется три или более пилотных источника.
[ также возвращает расчетную конусность массива, estpos,esttaper] = pilotcalib(nompos,x,pilotang)esttaper. Каждый элемент esttaper содержит оценочное значение конусности соответствующего элемента массива. В этом случае предшествующая номинальная конусность равна единице для каждого элемента. В этом случае требуется четыре или более пилотных источника.
Построение 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
nompos - Номинальные относительные положения элементовНоминальные относительные позиции элементов, заданные как вещественная матрица 3-by-N. Размер N - это количество элементов в матрице датчиков. Положения элементов находятся относительно первого элемента матрицы и задаются в единицах длины волны сигнала. Каждый столбец nompos представляет [x;y;z] координаты соответствующего элемента. Номинальное положение всех датчиков должно находиться в пределах половины длины волны от их фактического положения для успешной калибровки.
Типы данных: double
x - Пилотные сигналыПилот-сигналы, определяемые как комплексная матрица L-на-N-на-М. Аргумент x представляет сигналы, принимаемые матрицей, когда передают источники пилот-сигнала. Размерность L - это количество снимков каждого пилот-сигнала источника. Размерность N - количество элементов массива. Измерение М - это количество пилотных источников.
Типы данных: double
Поддержка комплексного номера: Да
pilotang - Углы пилотаУглы пилот-сигнала, заданные как вещественно-значная матрица 2-by-M. Измерение М - это количество пилотных источников. Каждый столбец содержит направление пилотного источника в форме [azimuth; elevation]. Угловые единицы в градусах. Угол азимута должен лежать между -180 ° и 180 °, а угол места - между -90 ° и 90 °. Угол по азимуту измеряется от оси x до проекции направления источника в плоскость xy, положительную к оси y. Угол места определяется как угол от плоскости xy до направления источника, положительный по направлению к оси Z. Направления источника калибровки должны охватывать достаточно разнообразные азимутальные и высотные углы.
Типы данных: double
nomtaper - Номинальная конусностьНоминальная конусность элементов массива, заданная как вектор N-by-1 столбца с комплексными значениями. Размерность N - количество элементов массива. Каждый компонент представляет номинальную конусность соответствующего элемента.
Типы данных: double
Поддержка комплексного номера: Да
uncerts - Конфигурация оценки неопределенности[1,1,1,1] (по умолчанию) | вектор 1 на 4 единиц и нулейКонфигурация оценки неопределенности, заданная как вектор 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
estpos - Предполагаемые должностиПредполагаемые позиции элементов, возвращаемые в виде вещественной матрицы 3-by-N. Единицы измерения имеют длину волны сигнала. Размерность N - количество элементов массива. Каждый столбец estpos представляет [x;y;z] координаты соответствующего элемента.
esttaper - Расчетная конусностьРасчетные значения конусности, возвращаемые в виде вектора N-by-1 столбца с комплексными значениями. Размерность N - количество элементов массива. Каждый элемент esttaper представляет собой конус соответствующего сенсорного элемента.
Этот алгоритм требует, чтобы источники пилот-сигнала были независимыми узкополосными плосковолновыми сигналами, поступающими из области дальнего поля матрицы. Кроме того, сигналы не должны проявлять эффекта многолучевого распространения или когерентности. Предполагается, что все элементы в матрице датчиков являются изотропными.
Алгоритм калибрует относительные положения матричных датчиков относительно первого датчика. Чтобы использовать алгоритм, сначала вычитайте позицию первого элемента из каждого элемента, затем передайте относительный массив в функцию в качестве номинального аргумента позиции, чтобы получить калиброванные относительные позиции. Наконец, добавьте обратно первое положение элемента во все относительные положения, чтобы создать полностью откалиброванную матрицу.
[1] Н. Фистас и А. Маникас, «A New General Global Array Calibration Method», IEEE Proceedings of ICASSP, Vol. IV, pp. 73-76, April 1994.
Примечания и ограничения по использованию:
Не поддерживает входные данные переменного размера.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.