
做无源定位的朋友几乎都会在某个阶段被“频率”这个维度卡住。TDOA盯的是时间戳FDOA盯的却是频谱上那个不起眼的偏移量——目标动一下、接收站动一点信号频率就跟着变定位信息就藏在这个变化里。我第一次跑通FDOA仿真时盯着互模糊函数那张三维图看了很久才真正理解“频差”两个字的分量它不像时间差那样直观但它对运动目标的速度和位置极其敏感尤其在目标辐射源窄带、连续波这类TDOA难以施展的场景里FDOA往往是最靠谱的一张牌。这篇是“无源定位入门”系列的第二篇上一篇聊了FDOA的基本概念和定位体制这次我们把信号模型和数学原理一次讲透。1. 从物理直觉说起FDOA观测的信号里到底藏着什么1.1 多普勒频移一个被忽略的“时间微分”信息先回到最基础的物理事实当一个辐射源和接收机之间存在相对运动时接收到的信号频率会偏离发射时的载频这就是多普勒频移。中学课本里的例子是火车鸣笛靠近时音调变高远离时音调变低。放到无线电里这个偏移量由相对运动速度决定。设目标辐射信号的载频为 (f_c)光速为 (c)目标到第 (i) 个接收站的距离为 (R_i(t))那么多普勒频移可以写成[ f_{d,i}(t) -\frac{f_c}{c} \cdot \frac{dR_i(t)}{dt} ]注意这里有个符号约定当目标靠近接收站时距离 (R_i(t)) 在减小(dR_i/dt) 为负所以多普勒频移为正接收频率升高。工程上很多人喜欢用“目标速度在视线方向的投影”来理解结果符号经常搞反。我的习惯是始终先写距离的导数再根据几何关系展开这样不容易乱。如果你做过雷达信号处理对多普勒的概念肯定不陌生。但无源定位有个本质区别雷达主动发射信号它知道自己发射的载频是多少所以多普勒频移可以直接从回波里解出来无源定位不知道辐射源发射频率的准确值只能通过多个站点之间的频率对比来消除这个未知数。这正是FDOA出现的根本原因。1.2 频差的形成为什么两个站看到的频率不一样现在想象两个接收站同时接收同一个运动目标的信号。目标到两个站的距离变化率一般不同所以两个站接收信号的多普勒频移也不同。两者相减就得到了FDOA的核心观测量——频差[ \Delta f_{ij}(t) f_{d,i}(t) - f_{d,j}(t) ]这个差值里目标发射载频的未知偏移被抵消掉了剩下的只和目标的运动状态、目标相对两个站的几何位置有关。换句话说频差就是一个“干净的”观测量它只携带目标位置和速度的信息。为了形成直观感受我经常在项目里用这么一组数量级估算假设目标辐射源工作在2.4GHz飞行速度300m/s两个接收站相距10km目标距离两个站大约100km。算下来两个站视线方向单位矢量之差的模大约为0.1于是频差大约是[ \Delta f \approx \frac{2.4 \times 10^9}{3 \times 10^8} \times 300 \times 0.1 \approx 240\text{Hz} ]注意这个量级。240Hz对于射频载频来说是一个非常小的偏移意味着FDOA系统在频率测量上的精度要求极高普通的晶振稳定度和接收机相位噪声都可能把这个信号埋掉。1.3 与TDOA的关系FDOA是“对时间的微分”理解FDOA最好的切入点其实是把它看成TDOA的时间微分。TDOA测的是信号到达两个站的时刻差这个时差对应的是两站到目标的距离差而FDOA测的是到达频率差对应的是这个距离差的变化率。换句话说TDOA是“同一时刻的两个站对同一个信号的路径差”FDOA则是“两个站各自看到的路径差变化率之差”。这个视角有两个直接好处一是能解释为什么FDOA对运动目标尤其有效目标不动频差就趋近于零二是能解释为什么FDOA和TDOA天然互补——一个测位置相关的“快照”一个测运动相关的“变化率”两者联合起来定位方程的约束能力会大幅增强。所以在实际系统中TDOA和FDOA很少分开用。很多无源定位设备输出的就是“时差-频差”联合观测值然后用同一个互模糊函数把两个参数同时估计出来。这正好引出后面的信号模型。2. 信号模型无源定位视角下的“小信号线性化”2.1 从电力电子的“小信号模型”说起最近网上很多人在聊电力电子的小信号模型其实做信号处理的人看到这个词会心一笑因为FDOA的建模思路和它是异曲同工。电力电子分析里开关变换器是非线性系统分析起来很麻烦小信号模型的处理思路是先在某个直流工作点上求静态解然后在工作点附近做一阶线性化把非线性的开关过程变成一组关于小扰动量的线性方程这样就能用线性控制理论工具来分析稳定性。FDOA的信号建模过程几乎一样。目标信号经过信道传播到接收端这中间包含了路径损耗、多径、多普勒调制等一系列非线性、非平稳的效应。直接对完整信号建模很困难于是我们选定一个“工作点”——也就是瞬时几何关系——然后在这个基础上做一阶近似用载频偏移多普勒来刻画运动对信号频率的影响用时间延迟来刻画传播路径的影响。频差本质上就是在这个“工作点”附近被线性化出来的小信号量。这样类比不是为了玩概念而是为了让初学者明白一个关键问题FDOA信号模型不是信号的真实复现而是对真实信号在特定工作点附近的一个一阶近似。明白了这一点你就知道这个模型什么时候会失效——当目标运动状态在观测时间内变化剧烈、或者信号带宽大到不能忽略不同频率分量上的多普勒差异时模型就要修正。2.2 接收信号的数学表达时延、幅度、多普勒都写清楚在窄带假设下第 (i) 个接收站收到的信号可以写成这样一个形式[ s_i(t) A_i(t) \cdot b\left(t - \tau_i(t)\right) \cdot e^{j\left(2\pi f_c t \phi_0 2\pi f_{d,i}t \varphi_i(t)\right)} n_i(t) ]其中(A_i(t)) 是幅度包含路径损耗和天线增益通常看作缓变项(b(t)) 是信号的复包络也就是基带调制波形(\tau_i(t)) 是目标信号到第 (i) 站的传播时延(f_c) 是载频的标称值实际发射频率可能有未知偏差(f_{d,i}) 是第 (i) 站对应的多普勒频移(\varphi_i(t)) 是相位噪声和传播引入的附加相位(n_i(t)) 是接收机热噪声。在窄带条件下时延 (\tau_i(t)) 对包络 (b(\cdot)) 的影响只是简单的平移而运动带来的多普勒则体现为一个频率偏移。这两者解耦是后面互模糊函数能够“二维搜索”的前提。实际建模时还要做离散化。如果接收机采样率是 (f_s)对连续时间 (t n T_s) 采样得到[ s_i[n] A_i[n] \cdot b\left(nT_s - \tau_i[n]\right) \cdot e^{j\left(2\pi (f_c f_{d,i}) n T_s \phi_0\right)} n_i[n] ]很多刚接触的人会问为什么公式里不直接写 (f_c)原因在于无源定位处理的是第三方辐射源(f_c) 本身就是一个未知量你没法在接收端事先知道确切的载频值。但好在FDOA只需要频率差两个站做互相关时载频本身的未知偏差会被消掉这也是为什么FDOA对辐射源型号不敏感的核心原因。2.3 窄带假设的适用边界与建模代价上面这个模型看着简单前提条件是窄带。窄带意味着信号的相对带宽 (B_s / f_c) 很小使得不同频率分量上的多普勒频移几乎相同可以用一个统一的 (f_{d,i}) 来表示而不会出现频率分量之间相对拉伸的问题。如果信号是宽带信号比如大带宽线性调频、跳频信号、高速率数字通信信号窄带模型就不成立了。严格的做法是用尺度变换time scaling[ s_i(t) \approx A_i(t) \cdot b\left(\alpha_i (t - \tau_i)\right) \cdot e^{j2\pi f_c \alpha_i t} ]其中 (\alpha_i 1 f_{d,i}/f_c) 是时间尺度因子。多普勒在这里不仅平移了载频还把整个信号的时域包络压缩或拉伸了。这个效应在低轨卫星、高速飞行器等场景下尤其明显直接套用窄带模型会带来不可忽略的频差偏差。工程上如何判断能不能用窄带模型我习惯看一个指标观测时间内包络时延的变化量 (\Delta\tau_i) 是否小于信号带宽倒数的十分之一。如果满足窄带近似可用否则就要考虑宽带模型或者把观测时间切短分段处理。3. 观测方程与定位几何频差怎么变成位置和速度3.1 距离变化率与视线速度投影核心公式推导信号模型告诉我们接收信号的频率构成但要让FDOA真正用于定位必须把多普勒频移和目标的几何状态——位置、速度——联系起来。这一步很关键也是整个FDOA原理的核心链路。设目标位置矢量为 (\mathbf{p})速度为 (\mathbf{v})第 (i) 个接收站的位置为 (\mathbf{p}_i)。定义从接收站指向目标的单位视线矢量为[ \mathbf{u}_i \frac{\mathbf{p} - \mathbf{p}_i}{|\mathbf{p} - \mathbf{p}_i|} ]目标是运动的所以目标到第 (i) 站的距离为[ R_i(t) |\mathbf{p}(t) - \mathbf{p}_i| ]对时间求导利用矢量微积分可以得到距离变化率[ \frac{dR_i(t)}{dt} \mathbf{u}_i \cdot \mathbf{v} ]注意这里 (\mathbf{u}_i) 是从站指向目标的单位矢量所以当目标朝站运动时(\mathbf{u}_i \cdot \mathbf{v}) 是负的速度方向和视线方向相反距离在减小。代入多普勒公式[ f_{d,i} -\frac{f_c}{c} \cdot \frac{dR_i}{dt} -\frac{f_c}{c} \cdot \mathbf{u}_i \cdot \mathbf{v} ]而频差定义为两站多普勒之差[ \Delta f_{ij} f_{d,i} - f_{d,j} -\frac{f_c}{c} \cdot \left(\mathbf{u}_i - \mathbf{u}_j\right) \cdot \mathbf{v} ]这就是FDOA最核心的观测方程。3.2 频差观测方程位置和速度耦合在一起公式 (\Delta f_{ij} -\frac{f_c}{c} \cdot (\mathbf{u}_i - \mathbf{u}_j) \cdot \mathbf{v}) 看着简洁但里面有两层含义值得展开。第一层频差和目标的运动速度 (\mathbf{v}) 是线性关系。如果我们已经知道目标在哪个位置那么两个视线矢量 (\mathbf{u}_i)、(\mathbf{u}_j) 就是已知的频差直接给出一条关于目标速度的线性约束。第二层视线矢量 (\mathbf{u}_i) 本身又依赖目标位置 (\mathbf{p})。也就是说频差观测值同时受到位置和速度的影响位置变了视线方向变了即使速度不变频差也会变。所以FDOA本质上是一个“位置和速度耦合在一起”的观测模型——这既是它的复杂度来源也是它相比TDOA的额外优势当目标静止时TDOA还能测位置FDOA几乎失效当目标运动时FDOA提供的信息里既有运动信息也隐含位置信息。在实际解算时通常有两种处理思路。一种是直接做联合估计把位置 (\mathbf{p}) 和速度 (\mathbf{v}) 都作为未知量用多个站对、多个时刻的FDOA观测值联合求解。另一种是两步法先用TDOA或AOA粗略估计位置再把位置代入FDOA方程解速度。前者精度高但计算复杂后者稳定性好工程上用得更多。3.3 等频差曲面为什么单对站测FDOA只能得到“曲面”一个FDOA观测方程对应三维空间中的一个二维曲面这个曲面叫作“等频差曲面”。它的物理含义是目标在这个曲面上的任何位置如果配合某个合适的速度都能产生同样的频差观测值因此单个FDOA测量无法唯一确定目标位置。更麻烦的是频差还耦合了速度等频差曲面的形状随着目标速度的不同而变化。这和TDOA有本质区别TDOA只依赖位置测到一个时差就对应一个确定的双曲面而FDOA依赖位置和速度两个变量解空间更大。这解释了为什么实际FDOA系统至少要保证三个以上不共线的站对或者融合其他体制的观测量。我做过一次仿真对比仅用两个站对两个FDOA观测解位置解算结果对初值极其敏感经常收敛到错误的旁瓣位置加上一个TDOA观测之后稳定性立刻改善。所以在设计系统时我建议优先保证观测量的“异构性”——FDOA不够就补TDOA或AOA而不是一味增加同类型观测。3.4 多站联合几个FDOA能解几个未知数设目标在三维空间运动未知数共6个3个位置分量、3个速度分量。每个站对提供一个FDOA方程理论上至少需要6个独立的FDOA观测才能完全求解。但工程上站的数量通常有限。一个折中方法是做“两步估计”第一步用短时间的TDOA/频差联合估计出相对位置第二步在相对位置已知的前提下利用连续多个时刻的FDOA观测通过卡尔曼滤波平滑出目标速度和位置的最优估计。我在实际中用得比较多的是第二种方案FDOA并不单独工作而是作为卡尔曼滤波的量测输入和时间序列上的位置先验一起联合求解。这样既发挥了FDOA对速度的敏感特性又避免了单帧方程欠定带来的解算困难。还有一点要提醒多站联合时必须考虑站对之间的基线方向。如果两个站相对于目标的视线几乎平行也就是说两个站的基线在垂直于视线方向上的投影很小那么两个站看到的多普勒几乎一样频差趋近于零这个站对基本不提供有效信息。这就是FDOA系统的“几何稀释精度”GDOP问题后面第5章细说。4. 频率差估计算法信号模型怎么落地成代码4.1 互模糊函数CAFTDOA/FDOA联合估计的标准操作理论上频差可以从两个接收信号的频谱峰值之差直接得到但实际信号信噪比低、信号形式未知直接测频误差很大。标准的做法是计算互模糊函数Cross Ambiguity Function, CAF。CAF定义如下[ \chi(\tau, f) \int_0^T s_1(t) \cdot s_2^*(t - \tau) \cdot e^{-j2\pi f t} , dt ]它的数学含义是把两个接收信号中的一个做时延补偿再乘上不同频率的复指数在积分时间内做相干积累寻找使两个信号“对齐”的那个 ((\tau, f)) 组合。峰值对应的 (\tau) 就是TDOA估计值(f) 就是FDOA估计值。用代码写一个最简版本核心就几行import numpy as np def caf(s1, s2, fs, tau_range, f_range): s1, s2: 两个接收站的中频/基带信号 fs: 采样率 tau_range: 需要搜索的时延范围样本点数 f_range: 需要搜索的频差范围Hz T len(s1) t np.arange(T) / fs caf_map np.zeros((len(tau_range), len(f_range)), dtypecomplex) for i, tau in enumerate(tau_range): s2_shifted np.roll(s2, tau) # 近似时延补偿 for j, f in enumerate(f_range): # 频差补偿 相干积分 caf_map[i, j] np.sum(s1 * s2_shifted * np.exp(-1j * 2 * np.pi * f * t)) return caf_map这个实现虽然能跑但双重循环在工程上完全不可接受。实际系统里CAF通常用FFT加速对不同时延补偿做频域共轭相乘再用逆FFT快速得到时延维搜索同时频差维的搜索也可以利用FFT的频点。标准做法是对时延维做FFT-IFFT、对频差维做二次FFT能大幅减少计算量。4.2 估计分辨率、积累时间与计算量之间的权衡CAF的核心指标是时延分辨率和频差分辨率。时延分辨率由信号带宽决定频差分辨率由积累时间决定[ \Delta f \approx \frac{1}{T} ]这个公式是FDOA系统的“铁律”。想要把频差分辨率做细就必须增加积累时间。工程上这句朴素的话意味着什么举个例子信号载频2.4GHz积累时间0.1秒频差分辨率约10Hz对应目标速度分辨率大约是[ \Delta v \approx \frac{c \cdot \Delta f}{f_c} \frac{3 \times 10^8 \times 10}{2.4 \times 10^9} \approx 1.25 \text{ m/s} ]如果目标运动速度只有几十米每秒这个速度分辨率勉强够用但如果你想分辨亚米每秒的慢速目标积累时间就要延长到秒级计算量和存储量都会急剧上升。还有一个容易被忽视的问题积累时间不是越长越好。目标在积累时间内如果有机动或者辐射源本身存在频率漂移多普勒频率会随时间变化CAF峰会被“抹平”频差估计值反而变差。处理办法是分段积累或者对目标运动建模为二次调频信号在CAF里增加一个调频率维度的搜索。关于计算量CAF是典型的“时间换精度、计算量换性能”算法。做工程落地时建议先用粗网格搜索确定峰值大致位置再在峰值附近做精细插值或局部搜索可以省掉大部分无效计算。4.3 频差精细化插值、时域补零与相位法的实践经验粗搜索找到CAF峰之后频差估计值还存在系统偏差偏差通常在半个频率分辨率之内。为了达到理论精度常用三种精细化手段第一种是频域插值。对CAF峰值附近的几个频点做抛物线插值能得到一个更精确的频率估计。这个方法最简单但受噪声影响偏差较大。第二种是时域补零。对信号补零后再做FFT频点间隔变小等于人为提高了频差搜索密度。需要注意的是补零并不能真正提高信息分辨率只是改变了采样间隔对低信噪比信号效果有限。第三种是相位法。用CAF峰对应的粗频差把两个信号对齐后直接估计两路信号在积分端的相位差 (\Delta\phi)然后用相位差对频差做精校准[ \hat{f}{\text{fin}} \hat{f}{\text{coarse}} \frac{\Delta\phi}{2\pi T} ]相位法的精度高但存在整周模糊问题需要保证粗频差的误差在 (\pm 1/(2T)) 以内。我实测下来粗搜索加相位精校准的组合在信噪比大于10dB时能把频差估计误差压低到理论克拉美罗界的1.2倍以内效果非常稳定。5. 误差传播与工程落地频率精度如何影响定位精度5.1 从频差误差到位置误差一阶灵敏度推导FDOA系统最后能给出多好的位置估计不完全取决于频差测得多准还取决于几何关系如何把频差误差放大或缩小。把核心观测方程对位置求导可以得到一阶误差传播关系[ \delta \Delta f_{ij} \approx -\frac{f_c}{c} \cdot \left(\frac{\partial (\mathbf{u}_i - \mathbf{u}_j)}{\partial \mathbf{p}} \cdot \mathbf{v}\right) \cdot \delta \mathbf{p} ]这个式子看起来很唬人但它说的人话是频差对位置的灵敏度取决于目标速度方向和视线差方向之间的耦合关系。如果目标速度很小或者目标视线方向变化对频差的影响很小那么再测频都没用频差误差会直接映射成巨大的位置误差。我做过一个仿真验证目标以100m/s运动两个站间距50km目标距站100km频差测量误差1Hz时位置误差能到几百米到上千米具体数值完全取决于几何布局。这个结论值得反复强调——工程上如果只盯着信号处理算法的精度却忽略了布站几何最后定位结果往往让人失望。5.2 晶振、时钟同步与载频偏差的耦合问题在所有误差源里接收站本振的稳定度和同步性能是最大的工程痛点。原因不复杂接收机下变频时本振频率直接决定了输出中频信号的频率。如果两个站的本振频率不一致这个偏差会直接叠加到FDOA的观测量里。假设本振标称频率10MHz第1个站的晶振偏差为 (10^{-9})1ppb第2个站为 (-10^{-9})载频2.4GHz时两个站的本振折算到射频的偏差大约是[ 2.4 \times 10^9 \times (1 \times 10^{-9} - (-1 \times 10^{-9})) 4.8 \text{Hz} ]这个4.8Hz比前面估算的FDOA有效频差几百Hz量级相差不多但定位系统往往要求频差误差远小于有效信号带宽对应的频率分辨率。晶振偏差如果不能标定直接作为系统误差吞掉。工程上常用的对策有三条所有接收站共用同一个参考时钟通过有线或无线授时定期注入已知频率的标定信号在线估计站间频偏在接收机设计中选用高稳恒温晶振OCXO或原子钟并尽量降低接收机本振的相位噪声。我踩过一次很深的坑外场试验时两套接收机分别用普通温补晶振采集数据里频差始终有约10Hz的固定偏置怎么调算法都消不掉最后排查到根源就是晶振。从那以后我养成了一个习惯——每次跑外场之前先做一次半小时的“晶振对表”测试用同一个信号源同时输入两个接收通道检查频差基线是否为零。5.3 观测几何、信噪比和积累时间的“三角债”做FDOA系统方案时总会面临一个三角矛盾观测几何、信噪比和积累时间互相制约。观测几何越差就需要更高的频差精度来弥补频差精度越高要么信噪比越高要么积累时间越长积累时间越长目标机动影响越严重等效信噪比反而下降。这三者的平衡没有万能公式只有针对具体场景做仿真迭代。我的工程经验是先用仿真把三类误差源单独量化几何误差用GDOP图来分析选出目标活动区域内的最佳布站方案信噪比误差用克拉美罗界算频差估计的理论下限再预留3~5dB工程余量积累时间误差根据目标最大加速度估算可容忍的积累时长上限。三个误差预算加在一起如果还满足定位指标方案才算初步可行。如果超了优先优化布站几何——这是性价比最高的手段信号处理端的优化往往只能提升百分之二三十。5.4 常见问题速查外场试验的“翻车清单”整理一些我实际遇到的高频问题按现象、原因、处理方式列出来方便大家排查。现象可能原因处理建议频差估计有固定偏置站间本振未同步或晶振偏差大检查本振配置运行“同源信号标定”流程CAF峰值偏低、被噪声淹没积累时间不足或信噪比不够延长积累时间先做窄带滤波提升信噪比峰值在频差维展宽目标机动、多普勒随时间变化分段积累引入调频率搜索只有高频差但位置解算收敛差观测站几何接近共线、GDOP过大调整布站补充TDOA或AOA观测长时间观测频差漂移信号源频率不稳定缩短单帧处理时长增加频率跟踪环路同一目标多帧频差跳变多径干涉、频率选择性衰落切换更高增益天线做极化分集或频域分集这张表基本覆盖了我这几年做外场试验时遇到的典型故障。尤其要提醒的是“同源信号标定”这件事——大部分频差偏置问题都能通过这个简单动作暴露出来不要等数据全采完了再返工。从我个人的项目体会来说掌握了信号模型和原理之后FDOA最难的就不再是数学公式本身而是如何在非理想信道、非理想接收机、非理想目标运动的条件下把理论上的频差信息稳定地提取出来。模型告诉你“理论上能做多好”工程经验才决定“实际上能得到多少”。如果你正在做FDOA相关的项目我的建议是先把窄带模型下的CAF仿真跑透再把误差源一个一个加进去观察它们对频差估计的影响最后再做外场验证。这样等到现场翻车时你的排查清单已经在仿真阶段提前生成好了。