MATLAB案例-汽车雷达

MATLAB案例

基于FMCW技术的汽车自适应巡航控制

这个例子展示了如何使用频率调制连续波(FMCW)技术建模一个汽车自适应巡航控制系统。这个例子执行距离和多普勒估计的移动车辆。与在国防工业中常见的脉冲雷达系统不同,汽车雷达系统通常采用FMCW技术。与脉冲雷达相比,FMCW雷达体积更小,功耗更低,制造成本更低。因此,FMCW雷达只能监测更小的距离。

考虑一下用于自适应巡航控制(ACC)的汽车远程雷达(LRR)。这种雷达通常占用大约77 GHz的频段,如[1]所示。雷达系统不断地估计它所安装的车辆与它前面的车辆之间的距离,并在两者变得太近时提醒司机。下图显示了ACC的草图。
在这里插入图片描述

在ACC系统中常用的波形是FMCW。使用FMCW技术进行距离测量的原理可以用下图来说明。
在这里插入图片描述

接收的信号是传输信号的延时副本,其中延迟dt与范围相关。因为信号总是扫过一个频带,在扫频期间的任何时刻,发射信号和接收信号之间的频率差fb是一个常数。fb通常称为拍频。因为扫描是线性的,我们可以从拍频推导出时延,然后将时延转换到范围。

在ACC设置中,雷达需要监控的最大距离大约是200米,系统需要能够区分两个相距1米的目标。根据这些要求,可以计算出波形参数。

Vs,r是源相对于接收器的径向速度,单位是米/秒,λ是波长,单位是米。

%案例
%基于FMCW技术的汽车自适应巡航控制
%https://www.mathworks.com/help/radar/ug/automotive-adaptive-cruise-control-using-fmcw-technology.html

% 这个例子展示了如何使用频率调制连续波(FMCW)技术建模一个汽车自适应巡航控制系统。
% 这个例子执行距离和多普勒估计的移动车辆。与在国防工业中常见的脉冲雷达系统不同,汽车雷达系统通常采用FMCW技术。
% 与脉冲雷达相比,FMCW雷达体积更小,功耗更低,制造成本更低。因此,FMCW雷达只能监测更小的距离。

%% FMCW波形
% 考虑一下用于自适应巡航控制(ACC)的汽车远程雷达(LRR)。这种雷达通常占用大约77 GHz的频段。
% 雷达系统不断地估计它所安装的车辆与它前面的车辆之间的距离,并在两者变得太近时提醒司机。

% 在ACC系统中常用的波形是FMCW。
% 接收的信号是传输信号的延时副本,其中延迟dt与范围相关。
% 因为信号总是扫过一个频带,在扫频期间的任何时刻,发射信号和接收信号之间的频率差fb是一个常数。fb通常称为拍频。
% 因为扫描是线性的,我们可以从拍频推导出时延,然后将时延转换到范围。

% 在ACC设置中,雷达需要监控的最大距离大约是200米,系统需要能够区分两个相距1米的目标。根据这些要求,可以计算出波形参数。
fc = 77e9;      %77 GHz的频段
c = 3e8;        %光速
lambda = c/fc;  %波长

% 扫描时间可以根据信号通过无模糊最大范围所需的时间计算出来。
% 一般来说,对于FMCW雷达系统,扫描时间应该至少是往返时间的56倍。这个例子使用了一个因子5.5。
range_max = 200; %距离
tm = 5.5*range2time(range_max,c); %将传播距离转换为传播时间

%根据距离分辨率确定扫描带宽,同时利用扫描带宽和扫描时间计算扫描斜率。
range_res = 1;              %范围分辨率为1
bw = range2bw(range_res,c); %转换范围分辨率所需的带宽
sweep_slope = bw/tm;        %斜率

% 由于FMCW信号通常占用很大的带宽,盲目地将采样率设置为带宽的两倍常常会影响a /D转换器硬件的性能。
% 为了解决这个问题,人们通常可以选择较低的采样率。这里可以考虑两件事:
% 1.对于复杂的采样信号,可以将采样率设置为与带宽相同。
% 2.FMCW雷达利用嵌入在消噪信号中的拍频估计目标距离。
%   雷达需要检测的最大拍频是最大距离对应的最大拍频与最大多普勒频率之和。因此,采样率只需是最大拍频的两倍。

% 在本例中,最大范围所对应的拍频由
fr_max = range2beat(range_max,sweep_slope,c);%将下降FMCW信号的范围转换为相应的拍频。斜率为FMCW扫描的斜率。

% 此外,一辆行驶汽车的最高速度约为230公里/小时。因此,最大多普勒频移和最大拍频可以计算为
v_max = 230*1000/3600;
fd_max = speed2dop(2*v_max,lambda);%返回单向多普勒频移,以赫兹为单位,对应于波长λ的径向速度,
fb_max = fr_max+fd_max;

% 本例采用最大拍频和带宽的两倍以上的采样率。
fs = max(2*fb_max,bw);

% 下表总结了雷达参数。
% 工作频率(GHz) 77
% 最大目标距离(m) 200
% 距离分辨率(m)   1
% 最大目标速度(km/h) 230
% 扫描时间(微秒)7.33
% 扫描带宽(MHz) 150
% 最大拍频(MHz) 27.30
% 采样率(MHz) 150
% 
% 综上所述,可以建立用于雷达系统的FMCW波形。
waveform = phased.FMCWWaveform('SweepTime',tm,'SweepBandwidth',bw,...
    'SampleRate',fs);

% 这是一个上扫线性FMCW信号,通常称为锯齿形。我们可以检查产生信号的时频图。
sig = waveform();
figure,
subplot(211); plot(0:1/fs:tm-1/fs,real(sig));
xlabel('Time (s)'); ylabel('Amplitude (v)');
title('FMCW signal'); axis tight;
subplot(212); spectrogram(sig,32,16,32,fs,'yaxis');
title('FMCW signal spectrogram');

%% 目标模型
% ACC雷达的目标通常是前面的一辆车。
% 这个例子假设目标汽车在雷达的作用下以96公里/小时的速度沿着x轴向前移动50米。

% 汽车的雷达截面,根据[1],可以计算基于雷达和目标汽车之间的距离。
car_dist = 43;                      %距离
car_speed = 96*1000/3600;           %速度
car_rcs = db2pow(min(10*log10(car_dist)+5,20)); %目标的平均雷达截面RCS
%RadarTarget模拟来自目标的反射信号,c-信号传播速度
cartarget = phased.RadarTarget('MeanRCS',car_rcs,'PropagationSpeed',c,...
    'OperatingFrequency',fc); 
carmotion = phased.Platform('InitialPosition',[car_dist;0;0.5],...
    'Velocity',[car_speed;0;0]);%模拟空间中一个或多个平台的平移运动。

% 假定传播模型为自由空间。
%双向传播=true,以执行step命令中指定的起点和目的地之间的往返传播。
channel = phased.FreeSpace('PropagationSpeed',c,...
    'OperatingFrequency',fc,'SampleRate',fs,'TwoWayPropagation',true);

%% 雷达系统设置
% 雷达系统的其余部分包括发射机、接收机和天线。这个例子使用了[1]中给出的参数。
% 注意,本示例仅建模主要组件,并省略了其他组件(如耦合器和混合器)的影响。
% 此外,为了简单起见,假设天线是各向同性的,天线的增益包含在发射器和接收器中。

% aperture2gain返回天线增益以分贝为单位,对应于波长为λ米的入射电磁波的有效孔径A平方米。
ant_aperture = 6.06e-4;                         % in square meter
ant_gain = aperture2gain(ant_aperture,lambda);  % in dB

tx_ppower = db2pow(5)*1e-3;                     % in watts瓦特
tx_gain = 9+ant_gain;                           % in dB 发射增益

rx_gain = 15+ant_gain;                          % in dB 接收增益
rx_nf = 4.5;                                    % in dB 接收机噪声系数

transmitter = phased.Transmitter('PeakPower',tx_ppower,'Gain',tx_gain);
receiver = phased.ReceiverPreamp('Gain',rx_gain,'NoiseFigure',rx_nf,...
    'SampleRate',fs);

% 汽车雷达通常安装在车辆上,因此它们经常处于运动状态。
% 这个例子假设雷达沿x轴以100公里/小时的速度移动。所以目标汽车以4公里/小时的相对速度接近雷达。
radar_speed = 100*1000/3600;
radarmotion = phased.Platform('InitialPosition',[0;0;0.5],...
    'Velocity',[radar_speed;0;0]);

%% 雷达信号模拟
% 正如前面简要提到的,FMCW雷达通过检查消噪信号中的拍频来测量距离。
% 为了提取这个频率,将接收的信号与发送的信号混合,进行消噪操作。
% 混合后,去阶信号只包含与目标范围相对应的单个频率成分。

% 此外,即使从单个扫描中提取多普勒信息是可能的,但由于在一个脉冲中,
% 多普勒频率与拍频难以区分,所以多普勒频移经常在多个扫描中提取。
% 为了测量距离和多普勒,FMCW雷达通常执行以下操作:
% 1.波形发生器产生FMCW信号
% 2.发射器和天线把信号放大并把信号辐射到太空中。
% 3.信号传播到目标,被目标反射,然后回到雷达。
% 4.接收天线收集信号。
% 5.接收到的信号被去除并保存在缓冲区中。
% 6.一旦一定数量的扫频填满缓冲区,就在范围和多普勒范围内进行傅里叶变换,以提取拍频和多普勒频移。
%     然后可以利用这些结果估计目标的射程和速度。距离和多普勒也可以显示为图像,
%     并给出目标在距离和速度域的直观指示。
% 下一节将模拟上述过程。共模拟了64次扫描,最后产生了距离多普勒响应。

% 在仿真过程中,使用频谱分析仪来显示每个接收到的扫描以及它的脱杂对应的频谱。
specanalyzer = dsp.SpectrumAnalyzer('SampleRate',fs,...
    'PlotAsTwoSidedSpectrum',true,...
    'Title','Spectrum for received and dechirped signal',...
    'ShowLegend',true);

% 接下来,运行模拟循环。
rng(2012); %控制随机数生成器
Nsweep = 64; %64次扫描
xr = complex(zeros(waveform.SampleRate*waveform.SweepTime,Nsweep)); %复数

for m = 1:Nsweep
    % Update radar and target positions 更新雷达和目标位置
    [radar_pos,radar_vel] = radarmotion(waveform.SweepTime); %雷达位置和速度
    [tgt_pos,tgt_vel] = carmotion(waveform.SweepTime); %目标位置和速度

    % Transmit FMCW waveform 传输FMCW波形
    sig = waveform();
    txsig = transmitter(sig); %发射机

    % Propagate the signal and reflect off the target 传播信号并反射目标
    txsig = channel(txsig,radar_pos,tgt_pos,radar_vel,tgt_vel); %信道
    txsig = cartarget(txsig); %目标

    % Dechirp the received radar return 将收到的雷达回波移开
    txsig = receiver(txsig); %接收机
    dechirpsig = dechirp(txsig,sig); %对FMCW信号进行去切操作

    % Visualize the spectrum 可视化的光谱
    specanalyzer([txsig dechirpsig]);

    xr(:,m) = dechirpsig;
end
%从频谱范围可以看到,虽然接收的信号是宽带(通道1),扫过整个带宽,脱杂信号变成窄带(通道2)%% 距离和多普勒估计
% 在估计距离和多普勒值之前,最好先看看所有64次扫描的变焦距离多普勒响应。
%计算对快时间和慢时间数据的过滤响应。或者等效地,使用匹配滤波器或FFT的范围数据。 sweep_slope斜率。
rngdopresp = phased.RangeDopplerResponse('PropagationSpeed',c,...
    'DopplerOutput','Speed','OperatingFrequency',fc,'SampleRate',fs,...
    'RangeMethod','FFT','SweepSlope',sweep_slope,...
    'RangeFFTLengthSource','Property','RangeFFTLength',2048,...
    'DopplerFFTLengthSource','Property','DopplerFFTLength',256);

clf;
plotResponse(rngdopresp,xr);                     % Plot range Doppler map 标绘距离多普勒图
axis([-v_max v_max 0 range_max])
clim = caxis;

% 从距离多普勒响应,可以看到,前面的汽车是有点超过40米的距离,并出现几乎静止。
% 这是因为汽车相对于雷达的径向速度只有4公里/小时,也就是1.11/秒。

% 有很多方法来估计目标汽车的射程和速度。例如,几乎可以选择任何光谱分析方法来提取拍频和多普勒频移。
% 这个例子使用根MUSIC算法来提取拍频和多普勒频移。

% 顺便提一下,虽然接收的信号在150mhz采样,因此系统可以实现所需的距离分辨率,在dechirp之后,
% 只需要以对应于最大拍频的速率进行采样。由于最大拍频通常小于所需的扫描带宽,可以对信号进行抽取以降低硬件成本。
% 下面的代码片段展示了抽取过程。
Dn = fix(fs/(2*fb_max));
for m = size(xr,2):-1:1
    xr_d(:,m) = decimate(xr(:,m),Dn,'FIR'); %按整数因子降低采样率
end
fs_d = fs/Dn;

% 为了估计距离,首先利用相干积分扫描估计拍频,然后转换为距离。
fb_rng = rootmusic(pulsint(xr_d,'coherent'),1,fs_d);
rng_est = beat2range(fb_rng,sweep_slope,c)

% 其次,在目标存在的范围内,通过扫描估计多普勒频移。
peak_loc = val2ind(rng_est,c/(fs_d*2));
fd = -rootmusic(xr_d(peak_loc,:),1,1/tm);
v_est = dop2speed(fd,lambda)/2

% 注意,距离和多普勒估计都是相当准确的。

%% 距离多普勒耦合效应
% 线性调频信号(如FMCW信号)的一个问题是距离多普勒耦合效应。如前所述,目标范围对应于拍频。
% 因此,准确的距离估计取决于拍频的准确估计。然而,多普勒频移的存在改变了拍频,导致有偏距离估计。

% 对于本例中概述的情况,由目标与雷达之间的相对速度引起的距离误差为
deltaR = rdcoupling(fd,sweep_slope,c)
% 这个误差很小,我们可以放心地忽略它。

  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值