若由本篇博文增加关注,就解封本篇博文的VIP权限哈,记得在下方留言哈
本周我基本完成了DP-TBD的算法编程。本篇文章将详细阐述编程的过程。
- 首先进行径向与切向的分辨单元的初始化,对于值函数的初始化,以及定义状态和状态转移。
X=zeros(ss,K); %状态
I=zeros(K); %各帧状态对应的值函数
S=zeros(K); %存储各帧之间的状态转移关系
Nx=100; %径向距离分辨单元
Ny=100; %切向距离分辨单元
DeltaX=200; %设一个分辨单元大小为200,下面初始目标的坐标为【20000,20000】,故初始目标索引为【100,100】
DeltaY=200;
2.模拟的条件如下:
-
帧间隔:2.5秒
-
状态转移矩阵 F = [ 1 T 0 0 0 1 0 0 0 0 1 T 0 0 0 1 ] F=\left[\begin{array}{llll} 1 & T & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & T \\ 0 & 0 & 0 & 1 \end{array}\right] F=⎣⎢⎢⎡1000T100001000T1⎦⎥⎥⎤
-
过程噪声方差矩阵 Q = [ T 3 3 T 2 2 0 0 T 2 2 T 0 0 0 0 T 3 3 T 2 2 0 0 T 2 2 T ] Q=\left[\begin{array}{llll} \frac{T^{3}}{3} & \frac{T^{2}}{2}& 0 & 0 \\ \frac{T^{2}}{2} & T & 0 & 0 \\ 0 & 0 & \frac{T^{3}}{3} & \frac{T^{2}}{2} \\ 0 & 0 & \frac{T^{2}}{2}& T \end{array}\right] Q=⎣⎢⎢⎢⎡3T32T2002T2T00003T32T2002T2T⎦⎥⎥⎥⎤
-
目标的初始状态
initx = [20000 -1.5*speed 20000 -1.6*speed]';
- 在每次状态转移时附加噪声
for t=2:K
x(:,t)=F*x(:,t-1)+processNoise(:,t); % For CV Model. 第一帧没发生转移,所以帧数是从2到K
end
- 由于上面的都是状态,其实是不能观察到的,实际得到的是量测数据。因此,我们要根据上面的得到的状态来生成量测,在生成量测时,随机生成量测噪声,噪声与目标的幅值需要根据信噪比来设置。
SNR=10;
Power_noise_av=1;
Power_target_av=10^(SNR/10)*Power_noise_av; % The average of Target Power.
- 根据维特比算法进行迭代。本来打算详细把这部分代码讲一下,但是如果你连维特比算法都没了解,我在这直接将代码也白费口舌。记得去看看我的博文看完这篇文章,你一定能看懂viterbi 算法!在这段代码中,要涉及最重要的值函数了,我采用的是基于后验概率的值函数:
I ( x k + 1 , k + 1 ) = max x k { I ( x k , k ) + log p ( x k + 1 ∣ x k ) } + log p ( z k + 1 ∣ x k + 1 ) I\left(\mathbf{x}_{k+1}, k+1\right)=\max _{\mathbf{x}_{k}}\left\{I\left(\mathbf{x}_{k}, k\right)+\log p\left(\mathbf{x}_{k+1} | \mathbf{x}_{k}\right)\right\}+\log p\left(z_{k+1} | \mathbf{x}_{k+1}\right) I(xk+1,k+1)=maxxk{I(xk,k)+logp(xk+1∣xk)}+logp(zk+1∣xk+1)
在每一帧处理后,根据维特比算法的处理,把当时的多个最优值函数记录下来。 - 当处理完最后一帧后,进行值函数的反向遍历,即可得到估计的航迹。