FMCW 雷达 - 距离-多普勒图

信息处理 fft 雷达 咪咪
2022-01-30 13:18:12

实现了具有以下参数的 FMCW 雷达:

% System parameters Value

% ----------------------------------

% Operating frequency (GHz) 77

% Maximum target range (m) 15

% Range resolution (m) 0.037

% Maximum target speed (km/h) 30 for fall detection

% Sweep time (microseconds) 50

% Sweep bandwidth (GHz) 4

% Maximum beat frequency (MHz) 73

% Sample rate (GHz) 4.050

A target was simulated with the following parameters(static radar)

dist = 14;

speed = 10*1000/3600; ;%2.77km/h

rcs = 100;

and the Range Doppler image plotted using the phased array functions.

RangeFFTLength = 2048;

DopplerFFTLength = 512;

rngdopresp = phased.RangeDopplerResponse('PropagationSpeed',c,... 'DopplerOutput','Speed','OperatingFrequency',fc,'SampleRate',fs,... 'RangeMethod','FFT','SweepSlope',sweep_slope,... 'RangeFFTLengthSource','Property','RangeFFTLength',RangeFFTLength,... 'DopplerFFTLengthSource','Property','DopplerFFTLength',DopplerFFTLength);

figure

plotResponse(rngdopresp,xr);

[![enter image description here][1]][1]

The results are as expected.

Interested to get the same results implementing the 2DFFT manually.

For this purpose the following code was used:

Nr = RangeFFTLength;

Nd = DopplerFFTLength;

% 2D FFT using the FFT size for both dimensions.

sig_fft2 = fft2(xr,Nr,Nd);

% Taking just one side of signal from Range dimension.

sig_fft2 = sig_fft2(1:Nr/2,1:Nd);

sig_fft2 = fftshift (sig_fft2);

RDM = abs(sig_fft2);

RDM = 10*log10(RDM);

产生以下内容:

在此处输入图像描述

范围和速度的索引是:[518 229]。

这会产生以下值:

范围:

fb=fs/2;

range_max = cfb/(2sweep_slope);

distance = ((518-512)/512)*range_max

distance =

43.9453

这是正确值的 3 倍。为什么?

速度:

使用以下方法将索引转换为 abs 值,得到正确的值:

vel_max = lambda/(4*tm);

sp = ((293-256)/256)*vel_max

sp =

2.8155

然而,在这种情况下,速度似乎是正的——为什么?代码如下:

https://drive.google.com/file/d/1e7E6ItgVeHTaU1qx3VL_aDfB7nes7ipq/view?usp=sharing

1个回答

所以问题是在模拟 FMCW 信号时,混合顺序的约定存在一些歧义。MATLAB 的文档在这里引用了它

“混合操作反转嵌入在 x 中的多普勒频移,因为 xref 和 x 的混合顺序。混合顺序影响输出参数虚部 y 的符号。文献中没有关于混合的一致约定order。这个函数和beat2range函数使用相同的约定。如果你的程序以其他方式处理dechirp的输出,请考虑混合顺序。

所以你几乎在那里。MATLAB 的函数说明了这一点,因此您需要在进行手动范围多普勒映射时自己考虑更改。您可以通过对每个脉冲应用一个复指数来实现这一点,该脉冲将相位向另一个方向移动,以便产生正确的多普勒频移。

例如,在仿真循环中,在您分配去啁啾信号以xr执行类似于以下代码的操作之前。我目前没有安装相控阵工具箱,所以我手动进行了一些计算:

for m = 1:Nsweep

    % After all the target sim stuff do your own Doppler calculations
    rangeToTarget = norm(tgt_pos - radar_pos);
    radialVel = dot(tgt_vel - radar_vel, tgt_pos - radar_pos)/rangeToTarget;

    % Negate Doppler so that closing targets produce positive frequencies
    fd = -2*radialVel/lambda;

    % De-chirp and apply phase shift for this pulse to reverse Doppler
    % to the correct value
    xr(:,m) = dechirpsig*exp(1i*2*pi*(2*fd)*(m - 1)*tm);


end

这使用简单的“停止和跳跃”模型,其中目标以离散时间步长移动,该时间步长等于扫描时间tm

寻址范围问题

我完全忘了解决你问题的范围部分。发生这种情况的原因是,当您使用 MATLAB 的函数生成距离多普勒图时,您给它一个采样率fs=4 GHz,这反过来产生一个范围箱(或范围单元)大小δR

δR=c2B=c2(4e9)=0.0375 m

如果您RangeFFTLength = numel(waveform)在进行自己的 2D FFT 时进行了设置,那么您将在范围维度中拥有大量样本,但考虑到实现的范围分档分辨率,这将是正确的δR并且会给你正确的目标范围。

现在的问题是,当您使用的范围样本少于您通过设置开始时使用的样本时RangeFFTLength = 2048这会降低有效采样率,因此您的新范围箱大小现在将人为地变大。如果你取使用产生的样本数量的比率fs=4 GHz以及 2048 的范围 FFT 的大小,您的有效采样率现在差了 98 倍!所以你的新范围箱大小变成

δRnew=98c2B=98c2(4e9)=3.675 m

将此范围箱大小应用于峰值范围索引应该会在您的范围多普勒图中产生正确的范围。但是,请注意,这仍然是错误的。我这么说是因为将这么多带宽放入啁啾中的全部意义在于,距离多普勒图中的每个距离箱都等于 0.0375 m 而不是3.675 m。

如果操作正确,您将能够以低得多的速率进行采样,因为混音后的拍频具有较低的带宽要求,从而为您提供更小且合理的样本数量。每个 range-bin 大小仍为 0.0375 m,保留所需的范围分辨率。