本帖最后由 freebsder 于 2020-1-14 09:46 编辑
这一部分主要尝试框架性的解读连续波雷达处理系统的背景算法和该算法映射到P2G硬件实物上的实际处理过程。雷达一直以来都是一项精专的学问,尤其在军事工业,这里不可能涉及到实际的证明性数学背景,更多还是以概念为主。
就P2G原型板来说,需要回答以下这些问题:雷达如何估算被测物体的距离?雷达如何估算不同距离的多个物体的距离?雷达可以区分估算的物体之间的最小间隔距离是多少?雷达可以测量的最远距离是多少?以上是和距离相关的问题。类似的,还有和速度相关的几个问题:速度是如何估算的?距离相同但是速度不同的物体如何区分?雷达如何区分估算两个被测物体的最小速度差?最大可测速度是多少?类似的与到达角相关的以上几个问题:如何测量到达角?不同角度的相同距离和运动速度的物体的测量?最大视场和最小分辨率是怎样的?
以上距离、速度和角度的问题是同一个逻辑:一个物体如何测量?多个物体如何测量?分辨率是多少?最大测量范围是多少?
距离估算的核心是IF拍频信号的傅里叶变换的频域峰值与距离成正比。
注意其中的带宽B,爬升时间Tc参数。
以上是距离估算的算法背景。
这里进行的FFT变换在每一个调频连续波上进行,称之为range-fft。
以上是距离估算经过实际的距离FFT变换后进行查找的核心过程。同时也表达了多目标测距的核心计算过程。
速度估算的核心是位移的微小变化在傅里叶幅度谱上的变化很微小,但在相位谱上的变化却很大。
这里进行的FFT变换在一组调频连续波上进行,称之为doppler-fft。
以上是速度估算的算法背景。通过相位Δω的变化来估算Vr的速度。
以上是速度估算经过在一组实际的连续波脉冲上进行多普勒FFT变换后计算的过程。
顺带这里提一句:带宽B,爬升时间Tc,一组连续波脉冲序列的数量Ns,等参数,与本篇最前面提到的分辨率、多个物体测量等问题密切相关。具体背景算法请查阅连续波雷达的相关资料。
因此在Radar GUI Tool上面我们可以看到与实际算法相关的Bandwidth,Chirp Time,Chirps per Frame等参数。针对实际的应用场景,仔细调节这些参数,可以在测量效果,测量分辨率,测量范围等方面取得不一样的效果。
其他方面。
虽然P2G是一个原形系统,给出的P2G_FMCW也是针对该原型系统而做,可是代码的组织和编写质量相当高。
比如大量只在当前文件使用的static函数和变量对全局空间保护:
比如根据最新标准对intN_t,size_t等类型的使用:
size_t表达长度,intN_t表达整数等细节上的表现。
分层封装的逻辑组织:
函数、变量命名的规范和表达的意义:
等等方面,都能看出这份代码质量相当高。
最后一方面。DSP协处理器的使用上需要注意的是CortexM的DSP扩展在C语言层面上不是通过内联汇编或第三方库(再内联汇编)的形式提供(虽然用户可以写内联汇编达成相同效果)。GCC(Dave自带)使用一种模式匹配的形式自动产生DSP指令。举个例子,如果GCC遇到类似 int mac = a * b + c; 这样的语句模式则在具备条件的情况下生成类似乘加指令。模式有很多,具体的各种模式可以查阅GCC手册。模式匹配的生成指令不能满足应用场景的时候,仍然可以采用内联汇编的形式处理。
完毕。
此内容由EEWORLD论坛网友freebsder原创,如需转载或用于商业用途需征得作者同意并注明出处