调频连续波 (FMCW) 雷达(一)距离测量
目录FMCW波形测距测距雷达原理框图回波信号差频信号不同LMCW波形的差频信号图仿真演示目标距离动图多目标动图噪声的影响线性度的影响幅度不平衡的影响代码FMCW波形FMCW雷达发射的信号是频率随时间线性变化的连续波通常称为线性调频脉冲典型的信号表达式如下频率表达式如下波形时域图如下LFM波形频谱图如下时间频率图如下测距测距雷达原理框图一个典型的 FMCW 雷达收发链如下信号产生与发射TX链频率合成器生成一个线性变化的电压信号Chirp。然后该电压控制压控振荡器产生频率随时间线性增加的射频信号。信号经功分器一路送至发射天线辐射出去。信号接收与混频RX链发射信号遇到目标后将反射回去并由接收天线接收接收到的信号与发射信号之间存在时间差。接收信号和一部分发射信号作为本振一同进入混频器。中频滤波放大和处理混频器输出一个差频信号即中频信号。该中频信号依次经过低通滤波器、中频放大器最后由ADC转换为数字信号通过算法处理提取距离、速度等信息。当信号遇到目标反射后返回接收天线由于传播延迟 t2R/cR为目标距离c为光速接收信号与发射信号存在时间差 。通过混频器将发射信号与接收信号混频并经过低通滤波得到差频信号IF信号。差频信号的频率与目标距离R成正比。回波信号回波信号时域表达式如下α是衰减因子td2R/c是回波延时wd2πfd是多普勒频移。频域表达式如下差频信号差频信号表达式如下由于传播延迟Tp接收信号Rx与发射信号Tx存在时间差使得Tx信号和Rx信号间存在频率差fb 差频信号的频率fb与传播延迟Tp成正比。差频信号形成如下图所示差频信号频谱如下所示不同LMCW波形的差频信号图锯齿波差频信号图如下三角波差频信号图如下仿真演示目标距离动图如图所示随着距离变远TX和RX的信号重合变少得到的差频信号频率变高同时由于重合部分变少导致信噪比降低距离分辨率降低。同时由图可知当RX和TX的延时超过一个调频周期后差频信号就没有了对于三角或者锯齿波形的重复周期来说就是超过一个调频周期后得到的差频信号就是模糊距离了所以扫频时宽对应的是不模糊的最大探测距离。多目标动图如图所示随着目标个数变多RX信号由多个回波信号叠加得到在时域上变得更加复杂但是通过混频后能够分离出各个信号。同时如上图所示多个目标混频得到多个信号想要区分每个信号那么每个信号就要间隔1Hz最多N个信号组成调频连续波的扫描带宽那么反推可知扫频带宽决定了最多N个差频信号那么调频连续波的分辨率就由扫频带宽决定了。噪声的影响如图所示随着信噪比的降低当信噪比低于-20dB的时候混频后的差频信号才出现明显的恶化表明FMCW雷达有较高的抗噪声干扰能力。线性度的影响如图所示随着线性度的降低fmcw的波形频谱也将倾斜同时混频后的差频信号会失真或展宽会导致距离测量精度下降和距离分辨率变差。幅度不平衡的影响如图所示随着信号的幅度不平衡度增加fmcw的波形频谱也将倾斜但对混频后的差频信号影响较小。代码importnumpyasnpimportmatplotlib.pyplotaspltfromnumpyimportpi,abs,max,min,argmax,argmin,ceil,exp,sqrt,real,imag,conj,sinc,sin,cos,tan,arctan,log10,angle,unwrapfromnumpyimportlinspace,arange,zeros,ones,concatenate,convolvefromnumpy.fftimportfft,fftshift,ifft,ifftshift,fft2frommatplotlib.pyplotimportfigure,subplot,plot,axis,title,suptitle,xlabel,ylabel,text,arrow,tight_layoutfrommatplotlib.animationimportFuncAnimation# plt.rc(text, usetexTrue)plt.rcParams[font.sans-serif][SimHei]# 指定默认字体plt.rcParams[axes.unicode_minus]False# 解决保存图像是负号-显示为方块的问题fromscipyimportsignaldeffmcw_wave(f_cent,tm,bw,over_sr2,duty_r1.0,reps1,shift_n0): fmcw波形生成 :param f_cent: 中心频率 :param tm: 时宽 :param bw: 扫频带宽 :param over_sr: 过采样率 :param duty_r: 占空比 :param reps: 重复次数 :param shift_n: 延时 :return: Kbw/tm# 调频率Fsover_sr*bw# 采样频率Nint(np.ceil(tm*Fs))# 采样点数tnp.linspace(0,tm,N)# 时间轴f_ynp.exp(1j*(2*np.pi*f_cent*tnp.pi*K*t**2))# 生成信号N_aint(N/duty_r)f_aynp.pad(f_y,(0,N_a-N),constant,constant_values(0,0))f_aysnp.tile(f_ay,reps)f_ays_shiftnp.roll(f_ays,shift_n)returnf_ays_shiftdeffmcw_range_test():f011e9#中心频率T11e-7#脉宽B15e8#带宽ratio15.0#过采样率afmcw_wave(f01,T1,B1,ratio1,1,1,0)plt.figure()plt.plot(np.real(a))aafft(a)plt.figure()plt.plot(abs(aa))txfmcw_wave(f01,T1,B1,ratio1,0.5,1,0)rxfmcw_wave(f01,T1,B1,ratio1,0.5,1,100)plt.figure()plt.plot(np.real(tx))plt.plot(np.real(rx))soutfft(tx*np.conj(rx))plt.figure()plt.plot(abs(sout))plt.show()fmcw_range_test()