Ответ Угла-Допплера

Преимущества визуализации углового допплеровского ответа

Визуализация сигнала в области угол-Допплер может помочь вам идентифицировать характеристики сигнала по направлению и скорости. Можно различать цели, движущиеся с различными скоростями в различных направлениях. Если платформа передатчика является стационарной, возвращается от стационарной карты целей к нулю в области Доплера, в то время как возвраты от движущихся целей показывают ненулевой доплеровский сдвиг. Если вы визуализируете ответ массива в области Угол-Допплер, стационарная цель выдает ответ под заданным углом и нулями Доплера.

Можно использовать phased.AngleDopplerResponse объект для визуализации угловой доплеровской характеристики входных данных. The phased.AngleDopplerResponse объект использует обычный узкополосный (фазовый сдвиг) лучевой форматор и доплеровский фильтр на основе БПФ для вычисления угловой доплеровской характеристики.

Угол-допплеровская реакция стационарного массива на стационарную цель

Отобразите ответ угла-Допплера стационарного массива к стационарной цели. Массив является шестиэлементным однородным линейным массивом (ULA), расположенным в глобальном источнике (0,0,0). Цель расположена на (5000 5000 0) метрах и имеет неколеблющееся радиолокационное сечение (RCS) 1 квадратного метра.

Примечание.Этот пример выполняется только в R2016b или более поздней версии. Если вы используете более ранний релиз, замените каждый вызов функции на эквивалентный step синтаксис. Для примера замените myObject(x) с step(myObject,x).

Создайте объекты, необходимые для моделирования целевой характеристики в массиве.

antenna = phased.IsotropicAntennaElement...
    ('FrequencyRange',[8e8 5e9],'BackBaffled',true);
lambda = physconst('LightSpeed')/4e9;
array = phased.ULA(6,'Element',antenna,'ElementSpacing',lambda/2);
waveform = phased.RectangularWaveform('PulseWidth',2e-006,...
    'PRF',5e3,'SampleRate',1e6,'NumPulses',1);
radiator = phased.Radiator('Sensor',array,...
    'PropagationSpeed',physconst('LightSpeed'),...
    'OperatingFrequency',4e9);
collector = phased.Collector('Sensor',array,...
    'PropagationSpeed',physconst('LightSpeed'),...
    'OperatingFrequency',4e9);
txplatform = phased.Platform('InitialPosition',[0;0;0],...
    'Velocity',[0;0;0]);
target = phased.RadarTarget('MeanRCS',1,'Model','nonfluctuating');
targetplatform = phased.Platform('InitialPosition',[5e3; 5e3; 0],...
    'Velocity',[0;0;0]);
freespace = phased.FreeSpace('OperatingFrequency',4e9,...
    'TwoWayPropagation',false,'SampleRate',1e6);
receiver = phased.ReceiverPreamp('NoiseFigure',0,...
    'EnableInputPort',true,'SampleRate',1e6,'Gain',40);
transmitter = phased.Transmitter('PeakPower',1e4,...
    'InUseOutputPort',true,'Gain',40);

Распространите десять прямоугольных импульсов на цель и от нее и соберите отклики в массиве.

PRF = 5e3;
NumPulses = 10;
wav = waveform();
tgtloc = targetplatform.InitialPosition;
txloc = txplatform.InitialPosition;
M = waveform.SampleRate*1/PRF; 
N = array.NumElements;
rxsig = zeros(M,N,NumPulses);

for n = 1:NumPulses
    % get angle to target
    [~,tgtang] = rangeangle(tgtloc,txloc);
    % transmit pulse
    [txsig,txstatus] = transmitter(wav);
    % radiate pulse
    txsig = radiator(txsig,tgtang);
    % propagate pulse to target
    txsig = freespace(txsig,txloc,tgtloc,[0;0;0],[0;0;0]);
    % reflect pulse off stationary target
    txsig = target(txsig);
    % propagate pulse to array
    txsig = freespace(txsig,tgtloc,txloc,[0;0;0],[0;0;0]);
    % collect pulse
    rxsig(:,:,n) = collector(txsig,tgtang);
    % receive pulse
    rxsig(:,:,n) = receiver(rxsig(:,:,n),~txstatus);
end

Найдите и постройте график отклика угла-Допплера. Затем добавьте метку +Target при ожидаемом угле азимута и доплеровской частоте.

tgtdoppler = 0; 
tgtLocation = global2localcoord(tgtloc,'rs',txloc);
tgtazang = tgtLocation(1);
tgtelang = tgtLocation(2);
tgtrng = tgtLocation(3);
tgtcell = val2ind(tgtrng,...
    physconst('LightSpeed')/(2*waveform.SampleRate));
snapshot = shiftdim(rxsig(tgtcell,:,:)); % Remove singleton dim
response = phased.AngleDopplerResponse('SensorArray',array,...
    'OperatingFrequency',4e9, ...
    'PropagationSpeed',physconst('LightSpeed'),...
    'PRF',PRF, 'ElevationAngle',tgtelang);
plotResponse(response,snapshot);
text(tgtazang,tgtdoppler,'+Target');

Figure contains an axes. The axes with title Angle-Doppler Response Pattern contains 2 objects of type image, text.

Как ожидалось, ответ угла-Допплера показывает наибольший ответ при нуле Доплера и 45 ° азимута.

Ответ угла-допплера на стационарную цель в движущемся массиве

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

Примечание.Этот пример выполняется только в R2016b или более поздней версии. Если вы используете более ранний релиз, замените каждый вызов функции на эквивалентный step синтаксис. Для примера замените myObject(x) с step(myObject,x).

Сценарий в этом примере идентичен сценарию углово-допплеровской реакции стационарного массива на стационарную цель, за исключением того, что ULA движется с постоянной скоростью. Для удобства повторяется код MATLAB™ для настройки объектов. Заметьте, что InitialPosition и Velocity свойства txplatform Системные object™ изменились. The InitialPosition значение свойства задается для моделирования ULA в воздухе. Мотивация для выбора конкретного значения Velocity свойство поясняется в Применимости DPCA Pulse Canceller.

antenna = phased.IsotropicAntennaElement...
    ('FrequencyRange',[8e8 5e9],'BackBaffled',true);
lambda = physconst('LightSpeed')/4e9;
array = phased.ULA(6,'Element',antenna,'ElementSpacing',lambda/2);
waveform = phased.RectangularWaveform('PulseWidth',2e-006,...
    'PRF',5e3,'SampleRate',1e6,'NumPulses',1);
radiator = phased.Radiator('Sensor',array,...
    'PropagationSpeed',physconst('LightSpeed'),...
    'OperatingFrequency',4e9);
collector = phased.Collector('Sensor',array,...
    'PropagationSpeed',physconst('LightSpeed'),...
    'OperatingFrequency',4e9);
vy = (array.ElementSpacing*waveform.PRF)/2;
txplatform = phased.Platform('InitialPosition',[0;0;3e3],...
    'Velocity',[0;vy;0]);
target = phased.RadarTarget('MeanRCS',1,'Model','nonfluctuating');
tgtvel = [0;0;0];
targetplatform = phased.Platform('InitialPosition',[5e3; 5e3; 0],...
    'Velocity',tgtvel);
freespace = phased.FreeSpace('OperatingFrequency',4e9,...
    'TwoWayPropagation',false,'SampleRate',1e6);
receiver = phased.ReceiverPreamp('NoiseFigure',0,...
    'EnableInputPort',true,'SampleRate',1e6,'Gain',40);
transmitter = phased.Transmitter('PeakPower',1e4,...
    'InUseOutputPort',true,'Gain',40);

Передайте десять прямоугольных импульсов к цели, когда ULA движется. Затем соберите полученные эхо.

PRF = 5e3;
NumPulses = 10;
wav = waveform();
tgtloc = targetplatform.InitialPosition;
M = waveform.SampleRate*1/PRF; 
N = array.NumElements;
rxsig = zeros(M,N,NumPulses);
fasttime = unigrid(0,1/waveform.SampleRate,1/PRF,'[)');
rangebins = (physconst('LightSpeed')*fasttime)/2;

for n = 1:NumPulses
    % move transmitter
    [txloc,txvel] = txplatform(1/PRF);
    % get angle to target
    [~,tgtang] = rangeangle(tgtloc,txloc);
    % transmit pulse
    [txsig,txstatus] = transmitter(wav);
    % radiate pulse
    txsig = radiator(txsig,tgtang);
    % propagate pulse to target
    txsig = freespace(txsig,txloc,tgtloc,txvel,tgtvel);
    % reflect pulse off stationary target
    txsig = target(txsig);
    % propagate pulse to array
    txsig = freespace(txsig,tgtloc,txloc,tgtvel,txvel);
    % collect pulse
    rxsig(:,:,n) = collector(txsig,tgtang);
    % receive pulse
    rxsig(:,:,n) = receiver(rxsig(:,:,n),~txstatus);
end

Вычислите целевые углы и область значений относительно ULA. Затем вычислите доплеровский сдвиг, вызванный движением фазированной решетки.

sp = radialspeed(tgtloc,tgtvel,txloc,txvel);
tgtdoppler = 2*speed2dop(sp,lambda);
tgtLocation = global2localcoord(tgtloc,'rs',txloc);
tgtazang = tgtLocation(1);
tgtelang = tgtLocation(2);
tgtrng = tgtLocation(3);

Двухсторонний доплеровский сдвиг составляет приблизительно 1626 Гц. Угол азимута равен 45 ° и идентичен значению, полученному в стационарном примере ULA.

Постройте график угловой доплеровской характеристики.

tgtcell = val2ind(tgtrng,...
    physconst('LightSpeed')/(2*waveform.SampleRate));
snapshot = shiftdim(rxsig(tgtcell,:,:)); % Remove singleton dim
hadresp = phased.AngleDopplerResponse('SensorArray',array,...
    'OperatingFrequency',4e9, ...
    'PropagationSpeed',physconst('LightSpeed'),...
    'PRF',PRF, 'ElevationAngle',tgtelang);
plotResponse(hadresp,snapshot);
text(tgtazang,tgtdoppler,'+Target');

Figure contains an axes. The axes with title Angle-Doppler Response Pattern contains 2 objects of type image, text.

Ответ угла-Допплера показывает наибольший ответ при 45 ° азимут при ожидаемом сдвиге Доплера.