Визуализация сигнала в области угол-Допплер может помочь вам идентифицировать характеристики сигнала по направлению и скорости. Можно различать цели, движущиеся с различными скоростями в различных направлениях. Если платформа передатчика является стационарной, возвращается от стационарной карты целей к нулю в области Доплера, в то время как возвраты от движущихся целей показывают ненулевой доплеровский сдвиг. Если вы визуализируете ответ массива в области Угол-Допплер, стационарная цель выдает ответ под заданным углом и нулями Доплера.
Можно использовать 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');
Как ожидалось, ответ угла-Допплера показывает наибольший ответ при нуле Доплера и 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');
Ответ угла-Допплера показывает наибольший ответ при 45 ° азимут при ожидаемом сдвиге Доплера.