backscatterBicyclist

Радар обратного рассеяния сигнализирует от велосипедиста

Описание

backscatterBicyclist объект симулирует backscattered радарные сигналы, отраженные от движущегося велосипедиста. Велосипедист состоит и из велосипеда и из его наездника. Объектные модели движение велосипедиста и вычисляют сумму всех отраженных сигналов от нескольких дискретных рассеивателей на велосипедисте. Модель игнорирует внутренние поглощения газов в велосипедисте. Отраженные сигналы основаны на модели мультирассеивателя, разработанной из радиолокационной системы на 77 ГГц.

Рассеиватели расположены на пяти главных компонентах велосипедиста:

  • Велосипедная рама и наездник

  • Велосипедные педали

  • Бедра и голени наездника

  • Переднее колесо

  • Заднее колесо

Исключая колеса на велосипедисте существует 114 рассеивателей. Колеса содержат рассеиватели на оправе и спицах. Количество рассеивателей на колесах зависит от количества спиц на колесо. Количество спиц задано с помощью NumWheelSpokes свойство.

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

Создание

Синтаксис

bicyclist = backscatterBicyclist
bicyclist = backscatterBicyclist(Name,Value,...)

Описание

bicyclist = backscatterBicyclist создает backscatterBicyclist объект, bicyclist, наличие значений свойств по умолчанию.

bicyclist = backscatterBicyclist(Name,Value,...) создает backscatterBicyclist объект, bicyclist, с каждым заданным свойством Name установите на заданный Value. Можно задать дополнительные аргументы пары "имя-значение" в любом порядке как (Name1, Value1..., NameN, ValueN). Любые незаданные свойства берут значения по умолчанию. Например,

bicyclist = backscatterBicyclist( ...
              'NumWheelSpokes',18,'Speed',10.0, ...
              'InitialPosition',[0;0;0],'InitialHeading',90, ...
              'GearTransmissionRatio',5.5);
моделирует велосипед с 18 спицами на каждом колесе, которое проходит положительный y - ось на уровне 10 метров в секунду. Коэффициент передачи механизма 5,5 указывает, что существует 5,5 вращений колеса для каждого вращения педали. Велосипедист направляется вдоль y - ось.

Этот рисунок иллюстрирует велосипедиста, начинающего повернуть налево.

Свойства

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

Количество спиц на колесо велосипеда, заданного как положительное целое число от 3 до 50, включительно.

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

Отношение вращений колеса к вращениям педали, заданным как положительная скалярная величина. Передаточное отношение должно быть в диапазоне от 0,5 до 6. Модули являются безразмерными.

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

Несущая частота узкополосных инцидентных сигналов, заданных как положительная скалярная величина. Модули находятся в Гц.

Пример: 900e6

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

Исходное положение велосипедиста, заданного как вектор с действительным знаком 3 на 1 в форме [x; y;] в глобальных координатах. Модули исчисляются в метрах. Исходное положение соответствует местоположению источника велосипедных координат. Источник находится в центре массы рассеивателей настройки велосипедиста по умолчанию, спроектированной на землю.

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

Первоначальный заголовок велосипедиста, заданного как скаляр. Заголовок измеряется в xy - плоскости от x - оси к y - ось. Заголовок относительно глобальных координат. Модули в градусах.

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

Скорость велосипедиста, заданного как неотрицательный скаляр. Модель движения ограничивает скорость максимумом 60 м/с (216 км/ч). Скорость задана относительно глобальных координат. Модули исчисляются в метрах в секунду.

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

Установите велосипед, курсирующий состояние, заданное как false или true. Если установлено в true, велосипедист не ездит на велосипеде, но колеса все еще вращаются (свободный ход). Если установлено в false, велосипедист ездит на велосипеде, и GearTransmissionRatio определяет вращения колеса к вращениям педали.

Типы данных: логический

Скорость распространения сигнала, заданная как положительная скалярная величина. Модули исчисляются в метрах в секунду. Скорость распространения по умолчанию является значением, возвращенным physconst('LightSpeed'). Смотрите physconst для получения дополнительной информации.

Пример: 3e8

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

Радарные углы азимута поперечного сечения, заданные как 1 P или P-by-1 вектор с действительным знаком. Это свойство задает координаты азимута каждого столбца радарной матрицы поперечного сечения, заданной RCSPattern свойство. P должен быть больше два. Угловые модули в градусах.

Пример: [-45:0.1:45]

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

Радарные углы вертикального изменения поперечного сечения, заданные как 1 Q или Q-by-1 вектор с действительным знаком. Это свойство задает координаты вертикального изменения каждой строки радарной матрицы поперечного сечения, заданной RCSPattern свойство. Q должен быть больше два. Угловые модули в градусах.

Пример: [-30:0.1:30]

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

Шаблон радарного поперечного сечения (RCS), заданный как Q-by-P матрица с действительным знаком или 1 P вектором с действительным знаком. Строки матрицы представляют постоянное вертикальное изменение, и столбцы представляют постоянный азимут. Q является длиной вектора, заданного ElevationAngles свойство. P является длиной вектора, заданного AzimuthAngles свойство. Модули находятся в квадратных метрах.

Можно также задать шаблон как 1 P вектором с действительным знаком углов азимута для одного вертикального изменения.

Значение по умолчанию этого свойства 1 361 матрица, содержащая значения, полученные на радарные измерения на 77 ГГц велосипедиста. Значения по умолчанию AzimuthAngles и ElevationAngles соответствуйте матрице RCS по умолчанию.

Пример: [1,.5;.5,1]

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

Функции объекта

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

getNumScatterersКоличество рассеивателей на велосипедисте
moveПоложение, скорость и ориентация движущегося велосипедиста
plotОтобразите местоположения рассеивателей на велосипедисте
reflectОтраженный сигнал от движущегося велосипедиста
cloneСоздайте одинаковый объект
releaseВысвободите средства и позвольте изменения в значениях свойства объекта и введите характеристики
resetСбросьте объектное состояние и значения свойств

Примеры

свернуть все

Вычислите backscattered радарный сигнал от велосипедиста, проходящего ось X в на расстоянии в 5 м/с от радара. Примите, что радар расположен в начале координат. Радар передает сигнал LFM на уровне 24 ГГц с пропускной способностью на 300 МГц. Сигнал отражается в данный момент, велосипедист начинает перемещаться и затем одну секунду спустя.

Инициализируйте велосипедиста, форму волны и объекты канала распространения

Инициализируйте backscatterBicyclist, phased.LinearFMWaveform, и phased.FreeSpace объекты. Примите частоту дискретизации на 300 МГц. Исходное положение велосипедиста находится на оси X в 30 метрах от радара.

bw = 300e6;
fs = bw;
fc = 24e9;
radarpos = [0;0;0];
bpos = [30;0;0];
bicyclist = backscatterBicyclist( ...
    'OperatingFrequency',fc,'NumWheelSpokes',15, ...
    'InitialPosition',bpos,'Speed',5.0, ...
    'InitialHeading',0.0);
lfmwav = phased.LinearFMWaveform( ...
    'SampleRate',fs, ...
    'SweepBandwidth',bw);
sig = lfmwav();
chan = phased.FreeSpace(...
    'OperatingFrequency',fc,...
    'SampleRate',fs,...
    'TwoWayPropagation',true);

Постройте начальное положение велосипедиста

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

dt = 1.0;
[bpos,bvel,bax] = move(bicyclist,dt,0);
plot(bicyclist)

Получите сначала отраженный сигнал

Распространите сигнал ко всем рассеивателям и получите отраженное совокупное, возвращают сигнал.

N = getNumScatterers(bicyclist);
sigtrns = chan(repmat(sig,1,N),radarpos,bpos,[0;0;0],bvel);
[rngs,ang] = rangeangle(radarpos,bpos,bax);
y0 = reflect(bicyclist,sigtrns,ang);

Постройте положение велосипедиста после обновления положения

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

[bpos,bvel,bax] = move(bicyclist,dt,0);
plot(bicyclist)

Получите второй отраженный сигнал

Распространите сигнал ко всем рассеивателям в их новых положениях и получите отраженное совокупное, возвращают сигнал.

sigtrns = chan(repmat(sig,1,N),radarpos,bpos,[0;0;0],bvel);
[~,ang] = rangeangle(radarpos,bpos,bax);
y1 = reflect(bicyclist,sigtrns,ang);

Совпадайте с фильтром отраженные сигналы

Фильтр соответствия отраженные сигналы и строит их вместе.

mfsig = getMatchedFilter(lfmwav);
nsamp = length(mfsig);
mf = phased.MatchedFilter('Coefficients',mfsig);
ymf = mf([y0 y1]);
fdelay = (nsamp-1)/fs;
t = (0:size(ymf,1)-1)/fs - fdelay;
c = physconst('LightSpeed');
plot(c*t/2,mag2db(abs(ymf)))
ylim([-200 -50])
xlabel('Range (m)')
ylabel('Magnitude (dB)')
ax = axis;
axis([0,100,ax(3),ax(4)])
grid
legend('First pulse','Second pulse')

Вычислите различие в области значений между максимумами этих двух импульсов.

[maxy,idx] = max(abs(ymf));
dpeaks = t(1,idx(2)) - t(1,idx(1));
drng = c*dpeaks/2
drng = 4.9965

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

Отобразите спектрограмму, показывающую микроэффект Доплера на радарных сигналах, отраженных от рассеивателей на движущейся цели велосипедиста. Стационарный радар передает 1 000 импульсов радарной волны FMCW с bandwith 250 МГц и 1 μсекунда длительность. Радар действует на уровне 24 ГГц. Велосипедист запускает в 5 м от радара и переезжает на уровне 4 м/с.

Настройте форму волны, канал, передатчик, получатель и объекты платформной системы.

bw = 250e6;
fs = 2*bw;
fc = 24e9;
c = physconst('Lightspeed');
tm = 1e-6;
wav = phased.FMCWWaveform('SampleRate',fs,'SweepTime',tm, ...
    'SweepBandwidth',bw);
chan = phased.FreeSpace('PropagationSpeed',c,'OperatingFrequency',fc, ...
    'TwoWayPropagation',true,'SampleRate',fs);
radarplt = phased.Platform('InitialPosition',[0;0;0], ...
    'OrientationAxesOutputPort',true);
trx = phased.Transmitter('PeakPower',1,'Gain',25);
rcvx = phased.ReceiverPreamp('Gain',25,'NoiseFigure',10);

Создайте bicyclist объект, перемещающийся в 4 метра/секунда.

bicyclistSpeed = 4;
bicyclist = backscatterBicyclist('InitialPosition',[5;0;0],'Speed',bicyclistSpeed, ...
    'PropagationSpeed',c,'OperatingFrequency',fc,'InitialHeading',0.0);
lambda = c/fc;
fmax = 2*bicyclist.GearTransmissionRatio*bicyclistSpeed/lambda;
tsamp = 1/(2*fmax);

Цикл более чем 1 000 импульсов. Найдите угол падения радара. Распространите волну к каждому рассеивателю, и затем отразите волну от рассеивателей назад к радару.

npulse = 1000;
xr = complex(zeros(round(fs*tm),npulse));
for m = 1:npulse
    [posr,velr,axr] = radarplt(tsamp);
    [post,velt,axt] = move(bicyclist,tsamp,0);
    [~,angrt] = rangeangle(posr,post,axt);
    x = trx(wav());
    xt = chan(repmat(x,1,size(post,2)),posr,post,velr,velt);
    xr(:,m) = rcvx(reflect(bicyclist,xt,angrt));
end

Обработайте прибывающие сигналы. Во-первых, dechirp сигнал и затем передают сигнал в оконное Кайзером короткое-tme преобразование Фурье.

xd = conj(dechirp(xr,x));
M = 128;
beta = 6;
w = kaiser(M,beta);
R = floor(1.7*(M-1)/(beta+1));
noverlap = M - R;
[S,F,T] = stft(sum(xd),1/tsamp,'Window',w,'FFTLength',M*2, ...
    'OverlapLength',noverlap);
maxval = max(10*log10(abs(S)));
pcolor(T,-F*lambda/2,10*log10(abs(S))-maxval);
shading flat;
colorbar
xlabel('Time (sec)')
ylabel('Speed (m/s)')

Создайте пользовательский шаблон RCS, чтобы использовать с backscatterBicyclist объект.

Шаблон RCS вычисляется из косинусов, повышенных до четвертой степени.

az = [-180:180];
el = [-90:90];
caz = cosd(az').^4;
cel = cosd(el).^4;
rcs = (caz*cel)';
imagesc(az,el,rcs)
xlabel('Azimuth (deg)')
ylabel('Elevation (deg)')
colorbar

bicyclist = backscatterBicyclist( ...
    'NumWheelSpokes',18,'Speed',10.0, ...
    'InitialPosition',[0;0;0],'InitialHeading',90, ...
    'GearTransmissionRatio',5.5,'AzimuthAngles',az, ...
    'ElevationAngles',el,'RCSPattern',rcs);

Алгоритмы

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

Ссылки

[1] Штольц, M. и др. "Мультипредназначайтесь для Отражательной Модели Точки Велосипедистов для Автомобильного Радара". 2 017 европейских Радарных Конференций (EURAD), Нюрнберг, 2017, стр 94–97.

[2] Чен, V., Д. Тэхмоуш и В. Й. Мичели. Радар подписи Micro-Doppler: обработка и приложения. Учреждение разработки и технологии: Лондон, 2014.

[3] Belgiovane, D. и К. К. Чен. "Велосипеды и Человеческое Обратное рассеяние Наездника на уровне 77 ГГц для Автомобильного Радара". 2 016 10-х европейских Конференций по Антеннам и Распространению (EuCAP), Давосу, 2016, стр 1–5.

[4] Виктор Чен, микроэффект Доплера в радаре. Норвуд, MA: дом Artech, 2011.

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Введенный в R2019b