Введение в микроэффекты Доплера

Этот пример вводит фундаментальное понятие микроэффекта Доплера в радаре, возвращаются из цели из-за вращения той цели. Можно использовать micro-Doppler подпись, чтобы помочь идентифицировать цель.

Введение

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

Оценка скорости движения ленточной пилы вертолета

Рассмотрите вертолет с четырьмя лопатками ротора. Примите, что радар расположен в начале координат. Задайте местоположение вертолета как (500, 0, 500), который устанавливает его расстояние далеко от радара в метрах и скорости (60, 0, 0) m/s.

radarpos = [0;0;0];
radarvel = [0;0;0];

tgtinitpos = [500;0;500];
tgtvel     = [60;0;0];
tgtmotion  = phased.Platform('InitialPosition',tgtinitpos,'Velocity',tgtvel);

В этой симуляции вертолет моделируется пятью рассеивателями: центр вращения и советы четырех лопаток. Центр вращения перемещается с вертолетным корпусом. Каждый конец лопасти является 90 градусами кроме совета его соседних лопаток. Лопатки вращаются на постоянной скорости 4 оборотов в секунду. Длина руки каждой лопатки составляет 6,5 метров.

Nblades   = 4;
bladeang  = (0:Nblades-1)*2*pi/Nblades;
bladelen  = 6.5;
bladerate = deg2rad(4*360);  % rps -> rad/sec

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

c  = 3e8;
fc = 5e9;
helicop = phased.RadarTarget('MeanRCS',[10 .1 .1 .1 .1],'PropagationSpeed',c,...
    'OperatingFrequency',fc);

Вертолетная симуляция эха

Примите, что радар действует на уровне 5 ГГц с простым импульсом. Импульсная частота повторения составляет 20 кГц. Для простоты примите, что сигнал распространяет в свободном пространстве.

fs     = 1e6;
prf    = 2e4;
lambda = c/fc;

wav = phased.RectangularWaveform('SampleRate',fs,'PulseWidth',2e-6,'PRF',prf);
ura = phased.URA('Size',4,'ElementSpacing',lambda/2);
tx  = phased.Transmitter;
rx  = phased.ReceiverPreamp;
env = phased.FreeSpace('PropagationSpeed',c,'OperatingFrequency',fc,...
    'TwoWayPropagation',true,'SampleRate',fs);
txant = phased.Radiator('Sensor',ura,'PropagationSpeed',c,'OperatingFrequency',fc);
rxant = phased.Collector('Sensor',ura,'PropagationSpeed',c,'OperatingFrequency',fc);

В каждом импульсе вертолет проходит своя траектория. Между тем лопатки продолжают вращаться, и советы лопаток вводят дополнительное смещение и угловую скорость.

NSampPerPulse = round(fs/prf);
Niter = 1e4;
y     = complex(zeros(NSampPerPulse,Niter));
rng(2018);
for m = 1:Niter
    % update helicopter motion
    t = (m-1)/prf;
    [scatterpos,scattervel,scatterang] = helicopmotion(t,tgtmotion,bladeang,bladelen,bladerate);

    % simulate echo
    x  = txant(tx(wav()),scatterang);                    % transmit
    xt = env(x,radarpos,scatterpos,radarvel,scattervel); % propagates to/from scatterers
    xt = helicop(xt);                                    % reflect
    xr = rx(rxant(xt,scatterang));                       % receive
    y(:,m) = sum(xr,2);                                  % beamform
end

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

rdresp  = phased.RangeDopplerResponse('PropagationSpeed',c,'SampleRate',fs,...
    'DopplerFFTLengthSource','Property','DopplerFFTLength',128,'DopplerOutput','Speed',...
    'OperatingFrequency',fc);
mfcoeff = getMatchedFilter(wav);
plotResponse(rdresp,y(:,1:128),mfcoeff);
ylim([0 3000])

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

tgtpos = scatterpos(:,1);
tgtvel = scattervel(:,1);
tgtvel_truth = radialspeed(tgtpos,tgtvel,radarpos,radarvel)
tgtvel_truth =

  -43.6435

Другие два возврата от советов лопаток, когда они приближаются или отбывают из цели на максимальной скорости. Из графика скорости, соответствующие этим двум, приближаются и отбывают, обнаружения составляют приблизительно 75 м/с и-160 м/с, соответственно.

maxbladetipvel = [bladelen*bladerate;0;0];
vtp = radialspeed(tgtpos,-maxbladetipvel+tgtvel,radarpos,radarvel)
vtn = radialspeed(tgtpos,maxbladetipvel+tgtvel,radarpos,radarvel)
vtp =

   75.1853


vtn =

 -162.4723

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

Блейд-возврат анализ Micro-Doppler

Представление частоты времени микроэффектов Доплера может показать больше информации. Этот код создает представление частоты времени в обнаруженном интервале целевого диапазона.

mf  = phased.MatchedFilter('Coefficients',mfcoeff);
ymf = mf(y);
[~,ridx] = max(sum(abs(ymf),2)); % detection via peak finding along range
pspectrum(ymf(ridx,:),prf,'spectrogram')

Рисунок показывает micro-Doppler модуляцию, вызванную концами лопастей вокруг постоянного эффекта Доплера. Изображение предполагает, что каждый конец лопасти вводит подобную синусоиде Доплеровскую модуляцию. Как отмечено в фигуре ниже, в каждый период синусоиды, существует три дополнительных синусоиды, появляющиеся на равном расстоянии. Этот внешний вид предполагает, что вертолет оборудован четырьмя равномерно распределенными лопатками.

hanno = helperAnnotateMicroDopplerSpectrogram(gcf);

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

Tp = 250e-3;
bladerate_est = 1/Tp
bladerate_est =

     4

Это изображение также показывает скорости совета Vt, который может быть выведен из максимума Доплер. Максимум Доплер на расстоянии приблизительно в 4 кГц от постоянного Доплера, введенного объемным перемещением. Вычислите обнаруженную максимальную скорость совета.

Vt_detect = dop2speed(4e3,c/fc)/2
Vt_detect =

   120

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

doa = phased.MUSICEstimator2D('SensorArray',ura,'OperatingFrequency',fc,...
    'PropagationSpeed',c,'DOAOutputPort',true,'ElevationScanAngles',-90:90);
[~,ang_est] = doa(xr);
Vt_est = Vt_detect/cosd(ang_est(2))
Vt_est =

  164.0793

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

bladelen_est = Vt_est/(bladerate_est*2*pi)
bladelen_est =

    6.5285

Обратите внимание на то, что результат совпадает с параметром симуляции 6,5 метров. Информация, такая как количество лопаток, блейд-длины и блейд-уровня вращения может помочь идентифицировать модель вертолета.

Пешеходная идентификация в автомобильном радаре

Рассмотрение автомобиля эго с автомобильной радиолокационной системой FMCW, пропускная способность которой составляет 250 МГц и действует на уровне 24 ГГц.

bw = 250e6;
fs = bw;
fc = 24e9;
tm = 1e-6;
wav = phased.FMCWWaveform('SampleRate',fs,'SweepTime',tm,...
    'SweepBandwidth',bw);

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

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

egocar_pos = [0;0;0];
egocar_vel = [30*1600/3600;0;0];
egocar = phased.Platform('InitialPosition',egocar_pos,'Velocity',egocar_vel,...
    'OrientationAxesOutputPort',true);

parkedcar_pos = [39;-4;0];
parkedcar_vel = [0;0;0];
parkedcar = phased.Platform('InitialPosition',parkedcar_pos,'Velocity',parkedcar_vel,...
    'OrientationAxesOutputPort',true);
parkedcar_tgt = phased.RadarTarget('PropagationSpeed',c,'OperatingFrequency',fc,'MeanRCS',10);

ped_pos = [40;-3;0];
ped_vel = [0;1;0];
ped_heading = 90;
ped_height = 1.8;
ped = phased.BackscatterPedestrian('InitialPosition',ped_pos,'InitialHeading',ped_heading,...
    'PropagationSpeed',c,'OperatingFrequency',fc,'Height',1.6,'WalkingSpeed',1);

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

tx = phased.Transmitter('PeakPower',1,'Gain',25);
rx = phased.ReceiverPreamp('Gain',25,'NoiseFigure',10);

Экстракция пешехода Микро-Допплера

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

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

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

Tsamp = 0.001;
npulse = 2500;
xr = complex(zeros(round(fs*tm),npulse));
xr_ped = complex(zeros(round(fs*tm),npulse));
for m = 1:npulse
    [pos_ego,vel_ego,ax_ego] = egocar(Tsamp);
    [pos_pcar,vel_pcar,ax_pcar] = parkedcar(Tsamp);
    [pos_ped,vel_ped,ax_ped] = move(ped,Tsamp,ped_heading);
    [~,angrt_ped] = rangeangle(pos_ego,pos_ped,ax_ped);
    [~,angrt_pcar] = rangeangle(pos_ego,pos_pcar,ax_pcar);

    x = tx(wav());
    xt_ped = chan_ped(repmat(x,1,size(pos_ped,2)),pos_ego,pos_ped,vel_ego,vel_ped);
    xt_pcar = chan_pcar(x,pos_ego,pos_pcar,vel_ego,vel_pcar);
    xt_ped = reflect(ped,xt_ped,angrt_ped);
    xt_pcar = parkedcar_tgt(xt_pcar);
    xr_ped(:,m) = rx(xt_ped);
    xr(:,m) = rx(xt_ped+xt_pcar);
end

xd_ped = conj(dechirp(xr_ped,x));
xd = conj(dechirp(xr,x));

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

clf;
spectrogram(sum(xd_ped),kaiser(128,10),120,256,1/Tsamp,'centered','yaxis');
clim = get(gca,'CLim');
set(gca,'CLim',clim(2)+[-50 0])

Обратите внимание на то, что колебание рук и участков производит много параболических кривых в частотном диапазоне времени по пути. Поэтому такие функции могут быть использованы, чтобы определить, существует ли пешеход в сцене.

Однако, когда мы генерируем спектрограмму непосредственно от совокупного дохода, мы получаем следующий график.

spectrogram(sum(xd),kaiser(128,10),120,256,1/Tsamp,'centered','yaxis');
clim = get(gca,'CLim');
set(gca,'CLim',clim(2)+[-50 0])

То, что мы наблюдаем, - то, что возврат припаркованного автомобиля продолжает доминировать над возвратом, даже в частотном диапазоне времени. Поэтому частотная характеристика времени показывает только Доплеру относительно припаркованного автомобиля. Отбрасывание Доплеровской частоты происходит из-за автомобиля эго, становящегося ближе к припаркованному автомобилю и относительным отбрасываниям скорости к 0.

Чтобы видеть, существует ли возврат, скрытый позади сильного возврата, мы можем использовать сингулярное разложение. Следующий график показывает распределение сингулярного значения dechirped импульсов.

[uxd,sxd,vxd] = svd(xd);
clf
plot(10*log10(diag(sxd)));
xlabel('Rank');
ylabel('Singular Values');
hold on;
plot([56 56],[-40 10],'r--');
plot([100 100],[-40 10],'r--');
plot([110 110],[-40 10],'r--');
text(25,-10,'A');
text(75,-10,'B');
text(105,-10,'C');
text(175,-10,'D');

От кривой ясно, что существует приблизительно четыре области. Область A представляет старший значащий вклад в сигнал, который является припаркованным автомобилем. Область Д представляет шум. Поэтому область Б и C происходят из-за соединения припаркованного автомобиля, возвращаются и пешеходный возврат. Поскольку возврат от пешехода намного более слаб, чем возврат из припаркованного автомобиля. В области Б это может все еще быть замаскировано остатком возврата из припаркованного автомобиля. Поэтому мы выбираем область К, чтобы восстановить сигнал, и затем построить частотную характеристику времени снова.

rk = 100:110;
xdr = uxd(:,rk)*sxd(rk,:)*vxd';
clf
spectrogram(sum(xdr),kaiser(128,10),120,256,1/Tsamp,'centered','yaxis');
clim = get(gca,'CLim');
set(gca,'CLim',clim(2)+[-50 0])

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

Сводные данные

Этот пример вводит фундаментальное понятие микроэффекта Доплера и показывает его удар на целевой возврат. Это также показывает, как извлечь micro-Doppler подпись из полученного I/Q, сигнализируют и затем выводят соответствующие целевые параметры из micro-Doppler информации.

Ссылки

[1] Чен, V. C. микроэффект Доплера в радаре, доме Artech, 2011

[2] Чен, V. C. Ф. Ли, судно Хо и Х. Вечслер, "Микроэффект Доплера в радаре: явление, модель и исследование симуляции", транзакции IEEE на космических и электронных системах, Vol 42, № 1, январь 2006

Служебные функции

Функциональный helicopmotion моделирует движение нескольких рассеивателей вертолета.

function [scatterpos,scattervel,scatterang] = helicopmotion(...
    t,tgtmotion,BladeAng,ArmLength,BladeRate)

prf = 2e4;
radarpos = [0;0;0];
Nblades  = size(BladeAng,2);

[tgtpos,tgtvel] = tgtmotion(1/prf);

RotAng     = BladeRate*t;
scatterpos = [0 ArmLength*cos(RotAng+BladeAng);0 ArmLength*sin(RotAng+BladeAng);zeros(1,Nblades+1)]+tgtpos;
scattervel = [0 -BladeRate*ArmLength*sin(RotAng+BladeAng);...
    0 BladeRate*ArmLength*cos(RotAng+BladeAng);zeros(1,Nblades+1)]+tgtvel;

[~,scatterang] = rangeangle(scatterpos,radarpos);

end