exponenta event banner

шаг

Системный объект: поэтапный. RangeEstimator
Пакет: поэтапный

Оценка целевого диапазона

Описание

Примечание

Вместо использования step для выполнения операции, определенной системным object™, можно вызвать объект с аргументами, как если бы это была функция. Например, y = step(obj,x) и y = obj(x) выполнять эквивалентные операции.

rngest = step(estimator,resp,rnggrid,detidx) оценки варьируются от обнаружений, полученных из куба данных ответа диапазона, resp. Оценки дальности вычисляются для каждой позиции обнаружения, сообщенной в detidx. rnggrid задает единицы измерения для измерения диапазона куба данных ответа.

пример

[rngest,rngvar] = step(estimator,resp,rnggrid,detidx,noisepower) также определяет мощность шума. Этот синтаксис применяется при установке VarianceOutputPort свойство для true и NoisePowerSource свойство для 'Input port'.

[rngest,rngvar] = step(estimator,resp,rnggrid,detidx,clusterids) также указывает идентификаторы кластера для обнаружений. Этот синтаксис применяется при установке ClusterInputPort кому true.

Можно комбинировать необязательные входные и выходные аргументы, если заданы их разрешающие свойства. Дополнительные входы и выходы должны быть перечислены в том же порядке, что и порядок разрешающих свойств. Например, [rngest,rngvar] = step(estimator,resp,rnggrid,detidx,noisepower,clusterids).

Примечание

Объект выполняет инициализацию при первом выполнении объекта. Эта инициализация блокирует неперестраиваемые свойства и входные спецификации, такие как размеры, сложность и тип данных входных данных. При изменении неперестраиваемого свойства или входной спецификации системный объект выдает ошибку. Чтобы изменить неперестраиваемые свойства или входные данные, необходимо сначала вызвать release метод разблокирования объекта.

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

развернуть все

Оценщик дальности, указанный как phased.RangeEstimator Системный объект.

Пример: phased.RangeEstimator

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

Размер первого размера входной матрицы может изменяться для моделирования изменения длины сигнала. Изменение размера может происходить, например, в случае формы импульса с переменной частотой повторения импульса.

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

Значения диапазона по размеру диапазона resp аргумент, заданный как вектор M-by-1 столбца с действительным значением. rnggrid определяет значения диапазона, соответствующие измерению быстрого времени или диапазона. Значения диапазона должны быть монотонно увеличивающимися и равномерно разнесенными. Единицы в метрах.

Пример: [0.1,0.2,0.3]

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

Индексы обнаружения, заданные как вещественно-значная матрица Nd-by-Q. Q - количество обнаружений, Nd - количество измерений куба данных ответа, resp. Каждый столбец detidx содержит индексы Nd обнаружения в кубе данных ответа.

Для создания индексов обнаружения можно использовать phased.CFARDetector объект или phased.CFARDetector2D объект.

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

Шумовая власть в местоположениях обнаружения, определенных как положительный скаляр или вектор ряда 1 на Q с реальным знаком, где Q - количество обнаружений, определенных в detidx.

Зависимости

Чтобы включить этот входной аргумент, задайте значение NoisePowerSource свойство для 'Input port'.

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

Идентификаторы кластера, указанные как вектор строки 1-by-Q с действительным значением, где Q - число обнаружений, указанное в detidx. Каждый элемент clusterids соответствует столбцу в detidx. Обнаруженные объекты с одинаковым идентификатором кластера находятся в одном кластере.

Зависимости

Чтобы включить этот входной аргумент, задайте значение ClusterInputPort свойство для true.

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

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

развернуть все

Оценки диапазона, возвращаемые как действительный вектор K-by-1 столбца.

  • Когда ClusterInputPort является false, доплеровские оценки вычисляются для каждого местоположения обнаружения в detidx аргумент. Тогда К равно размеру столбца, Q, из detidx.

  • Когда ClusterInputPort является true, доплеровские оценки вычисляются для каждого ID кластера в clusterids аргумент. Тогда K равно количеству уникальных идентификаторов кластера, Q.

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

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

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

Примеры

развернуть все

Чтобы оценить дальность и скорость трех целей, создайте доплеровскую карту дальности, используя phased.RangeDopplerResponse object™ системы. Затем используйте phased.RangeEstimator и phased.DopplerEstimator Объекты системы для оценки дальности и скорости. Передатчик и приемник являются совмещенными изотропными антенными элементами, образующими моностатическую радиолокационную систему.

Передаваемый сигнал представляет собой линейный ЧМ-сигнал с интервалом повторения импульсов (PRI) 7,0 мкс и рабочим циклом 2%. Рабочая частота 77 ГГц, частота дискретизации 150 МГц.

fs = 150e6;
c = physconst('LightSpeed');
fc = 77.0e9;
pri = 7e-6;
prf = 1/pri;

Настройте параметры сценария. Передатчик и приемник неподвижны и расположены в начале координат. Цели находятся в 500, 530 и 750 метрах от радара по оси х. Цели движутся вдоль оси X со скоростями -60, 20 и 40 м/с. Все три цели имеют несъемное сечение РЛС (RCS) 10 дБ. Создайте платформы цели и РЛС.

Numtgts = 3;
tgtpos = zeros(Numtgts);
tgtpos(1,:) = [500 530 750];
tgtvel = zeros(3,Numtgts);
tgtvel(1,:) = [-60 20 40];
tgtrcs = db2pow(10)*[1 1 1];
tgtmotion = phased.Platform(tgtpos,tgtvel);
target = phased.RadarTarget('PropagationSpeed',c,'OperatingFrequency',fc, ...
    'MeanRCS',tgtrcs);
radarpos = [0;0;0];
radarvel = [0;0;0];
radarmotion = phased.Platform(radarpos,radarvel);

Создайте антенны передатчика и приемника.

txantenna = phased.IsotropicAntennaElement;
rxantenna = clone(txantenna);

Настройка обработки сигналов на стороне передатчика. Создайте линейный ЧМ-сигнал повышенной частоты с полосой пропускания, равной половине частоты дискретизации. Найдите длину PRI в выборках, а затем оцените среднеквадратичную полосу пропускания и разрешение диапазона.

bw = fs/2;
waveform = phased.LinearFMWaveform('SampleRate',fs, ...
    'PRF',prf,'OutputFormat','Pulses','NumPulses',1,'SweepBandwidth',fs/2, ...
    'DurationSpecification','Duty cycle','DutyCycle',0.02);
sig = waveform();
Nr = length(sig);
bwrms = bandwidth(waveform)/sqrt(12);
rngrms = c/bwrms;

Настройте свойства объекта «Система датчиков и радиаторов». Пиковая выходная мощность составляет 10 Вт, а коэффициент усиления передатчика - 36 дБ.

peakpower = 10;
txgain = 36.0;
txgain = 36.0;
transmitter = phased.Transmitter( ...
    'PeakPower',peakpower, ...
    'Gain',txgain, ...
    'InUseOutputPort',true);
radiator = phased.Radiator( ...
    'Sensor',txantenna,...
    'PropagationSpeed',c,...
    'OperatingFrequency',fc);

Настройка канала свободного пространства в режиме двустороннего распространения.

channel = phased.FreeSpace( ...
    'SampleRate',fs, ...    
    'PropagationSpeed',c, ...
    'OperatingFrequency',fc, ...
    'TwoWayPropagation',true);

Настройте обработку на стороне получателя. Задайте коэффициент усиления приемника и коэффициент шума.

collector = phased.Collector( ...
    'Sensor',rxantenna, ...
    'PropagationSpeed',c, ...
    'OperatingFrequency',fc);
rxgain = 42.0;
noisefig = 1;
receiver = phased.ReceiverPreamp( ...
    'SampleRate',fs, ...
    'Gain',rxgain, ...
    'NoiseFigure',noisefig);

Закольцовывайте импульсы, чтобы создать куб данных из 128 импульсов. Для каждого шага цикла перемещайте цель и распространяйте сигнал. Затем поместите принятый сигнал в куб данных. Куб данных содержит принятый сигнал на импульс. Обычно куб данных имеет три измерения, где последнее измерение соответствует антеннам или лучам. Поскольку используется только один датчик, куб имеет только два измерения.

Шаги обработки:

  1. Переместите РЛС и цели.

  2. Передача сигнала.

  3. Распространение сигнала формы сигнала на цель.

  4. Отражение сигнала от цели.

  5. Распространение сигнала обратно на радар. Двустороннее распространение позволяет комбинировать возвратное распространение с исходящим.

  6. Прием сигнала на РЛС.

  7. Загрузите сигнал в куб данных.

Np = 128;
dt = pri;
cube = zeros(Nr,Np);
for n = 1:Np
    [sensorpos,sensorvel] = radarmotion(dt);
    [tgtpos,tgtvel] = tgtmotion(dt);
    [tgtrng,tgtang] = rangeangle(tgtpos,sensorpos);
    sig = waveform();
    [txsig,txstatus] = transmitter(sig);
    txsig = radiator(txsig,tgtang);
    txsig = channel(txsig,sensorpos,tgtpos,sensorvel,tgtvel);    
    tgtsig = target(txsig);   
    rxcol = collector(tgtsig,tgtang);
    rxsig = receiver(rxcol);
    cube(:,n) = rxsig;
end

Отображение куба данных, содержащего сигналы на импульс.

imagesc([0:(Np-1)]*pri*1e6,[0:(Nr-1)]/fs*1e6,abs(cube))
xlabel('Slow Time {\mu}s')
ylabel('Fast Time {\mu}s')
axis xy

Figure contains an axes. The axes contains an object of type image.

Создайте и отобразите доплеровское изображение диапазона для 128 доплеровских ячеек. Изображение показывает диапазон по вертикали и скорость по горизонтали. Для фильтрации совпадений используется линейный ЧМ-сигнал. Изображение здесь - карта доплеровского диапазона.

ndop = 128;
rangedopresp = phased.RangeDopplerResponse('SampleRate',fs, ...
    'PropagationSpeed',c,'DopplerFFTLengthSource','Property', ...
    'DopplerFFTLength',ndop,'DopplerOutput','Speed', ...
    'OperatingFrequency',fc);
matchingcoeff = getMatchedFilter(waveform);
[rngdopresp,rnggrid,dopgrid] = rangedopresp(cube,matchingcoeff);
imagesc(dopgrid,rnggrid,10*log10(abs(rngdopresp)))
xlabel('Closing Speed (m/s)')
ylabel('Range (m)')
axis xy

Figure contains an axes. The axes contains an object of type image.

Поскольку цели лежат вдоль положительной оси x, положительная скорость в глобальной системе координат соответствует отрицательной скорости замыкания. Отрицательная скорость в глобальной системе координат соответствует положительной скорости замыкания.

Оцените мощность шума после согласованной фильтрации. Создание фонового изображения с постоянным шумом в целях моделирования.

mfgain = matchingcoeff'*matchingcoeff;
dopgain = Np;
noisebw = fs;
noisepower = noisepow(noisebw,receiver.NoiseFigure,receiver.ReferenceTemperature);
noisepowerprc = mfgain*dopgain*noisepower;
noise = noisepowerprc*ones(size(rngdopresp));

Создайте диапазон и объекты-оценщики Доплера.

rangeestimator = phased.RangeEstimator('NumEstimatesSource','Auto', ...
    'VarianceOutputPort',true,'NoisePowerSource','Input port', ...
    'RMSResolution',rngrms);
dopestimator = phased.DopplerEstimator('VarianceOutputPort',true, ...
    'NoisePowerSource','Input port','NumPulses',Np);

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

detidx = NaN(2,Numtgts);
tgtrng = rangeangle(tgtpos,radarpos);
tgtspd = radialspeed(tgtpos,tgtvel,radarpos,radarvel);
tgtdop = 2*speed2dop(tgtspd,c/fc);
for m = 1:numel(tgtrng)
    [~,iMin] = min(abs(rnggrid-tgtrng(m)));
    detidx(1,m) = iMin;
    [~,iMin] = min(abs(dopgrid-tgtspd(m)));
    detidx(2,m) = iMin;
end

Найдите мощность шума в местах обнаружения.

ind = sub2ind(size(noise),detidx(1,:),detidx(2,:));

Оцените диапазон и дисперсию диапазона в местах обнаружения. Предполагаемые диапазоны соответствуют постулированным диапазонам.

[rngest,rngvar] = rangeestimator(rngdopresp,rnggrid,detidx,noise(ind))
rngest = 3×1

  499.7911
  529.8380
  750.0983

rngvar = 3×1
10-4 ×

    0.0273
    0.0276
    0.2094

Оцените дисперсию скорости и скорости в местах обнаружения. Расчетные скорости соответствуют прогнозируемым скоростям.

[spdest,spdvar] = dopestimator(rngdopresp,dopgrid,detidx,noise(ind))
spdest = 3×1

   60.5241
  -19.6167
  -39.5838

spdvar = 3×1
10-5 ×

    0.0806
    0.0816
    0.6188