本科毕业论文复现Widar2.0系统,在复现过程中,信道165HT20、发包速率、天线间隔完全仿照Widar2.0论文设置,在实验采集到的数据里,有些组数据追踪效果尚可,如图1-1(a)、(b)所示,有些组数据定位结果极差,如图1-1(c)所示。图中蓝色虚线是真实人体轨迹,红色是系统追踪轨迹。
仔细对比参数估计的图,发现定位出错时,没有一个人体反射径的估计参数是无辜的,但问题主要还是出现在ToF和AoA上。例如1-1(c)对应的那组数据,SAGE估计参数和理想人体反射多径参数对比图如图1-2所示。(于是开始寻找为何会出现参数估计错误的情况)
更离谱的是,由于测静态数据时间长了点,为了减少跑代码的时间,本人将18000个静态数据的CSI包分成9组,每组2000个包,个别组的数据估计出的静态AoA出现了跳变,如图1-3所示。(这里就离谱就离谱)
由于我的保研小伙伴(CSDN名:一去不复返的通信er)做的定位系统用和我同样的数据能实现人体追踪,故而排除是设备或者场地的问题。
为了整明白为什么估计不出正确的多径参数值,首先看了Widar2.0里面的参考文献[8] Fessler J A, Hero A O. Space-alternating generalized expectation-maximization algorithm[J]. IEEE Transactions on Signal Processing, 1994, 42(10): 2664-2677。Fessler这篇论文很生艹,数学定义有点难懂。
为方便描述SAGE中的一些新定义,而不是像Fessler的SAGE原论文一样全部用数学语言定义,先从EM算法开始,然后引申出SAGE的新定义。
EM算法:
用于数据缺失情况下的参数估计问题。
前提:
1)已知分布模型但模型参数待定,存在数据缺失的情况(数据缺失即有隐含参数)。
2)M步用Jensen不等式放缩后下界f(E[X])极大化比最大似然E[f(X)]极大化容易(实际上SAGE用于信道时一般没有放缩,因为期望步骤分解后,解析形式已经很简洁了)。但为了描述后续SAGE原论文中的SAGE构造,还是不省略了。
Jensen不等式说明:针对凹函数,有E[f(X)]≥f(E[X])成立
举例:
两枚不同的硬币,正面朝上的概率分别为a, b。随机取一枚抛5次,记录结果。重复5次。要根据五次结果估计参数a,b。后面为了和隐含参数区分,就简a和b为称显参数吧。
在这个例子中,取到的是硬币A还是硬币B,就是隐含参数。如果隐含参数已知,问题就变成了最大似然问题。
L ( θ ) = L ( x 1 , ⋯ , x n ; θ ) = ∏ i = 1 n p ( x i ; θ ) , θ ∈ Θ θ ^ = arg max L ( θ ) \begin{array}{c} L(\theta)=L\left(x_{1}, \cdots, x_{n} ; \theta\right)=\prod_{i=1}^{n} p\left(x_{i} ; \theta\right), \theta \in \Theta \\ \hat{\theta}=\arg \max L(\theta) \end{array} L(θ)=L(x1,⋯,xn;θ)=∏i=1np(xi;θ),θ∈Θθ^=argmaxL(θ)
EM算法的思想:初始化隐含参数的情况,把unknown人为赋值,求得这种情况下的两枚硬币的向上期望值;然后根据当前结果的期望值用最大似然估计的方法求a,b。然后根据a,b计算unknow最可能是哪个硬币,在用新的硬币属性去计算新的期望,然后用新的期望再去估算a,b。如此迭代至收敛。
如果想进一步了解EM,请去知乎大佬写的EM算法详解里面看,我图都嫖的这篇文章里的。
缺陷:
多维参数的情况下算法复杂度高,收敛慢。
先放出原论文里的两个定义,已经人话翻译过了,建议直接对着后面举的例子理解:
定义1:定义一个索引集合S,S满足以下条件:
1)集合S非空
2)集合S是{1,…,p}的一个子集
3)集合S没有重复的元素
假设集合S中有m个元素,现用 θ S \theta_{S} θS来表示由S中的元素索引的θ中的m个参数组成的新向量。用 θ S ~ \theta_{\tilde{S}} θS~ 来表示剩下的未被索引到的参数所组成的向量。定义 ϕ S \phi_{S} ϕS表示函数或矩阵ϕ取决于S。定义Φ(θ)中θ是一个p维向量,可分为 θ S \theta_{S} θS, θ S ~ \theta_{\tilde{S}} θS~ 两个向量,则Φ(θ)= Φ( θ S \theta_{S} θS, θ S ~ \theta_{\tilde{S}} θS~ )
定义2:一个概率密度为f(x;θ)的随机向量 X S X^{S} XS,如果 X S X^{S} XS和 Y Y Y的联合概率密度满足:
f ( y , x ; θ ) = f ( y ∣ x ; θ S ~ ) f ( x ; θ ) f(y, x ; \theta)=f\left(y \mid x ; \theta_{\tilde{S}}\right) f(x ; \theta) f(y,x;θ)=f(y∣x;θS~)f(x;θ)
那么X^S是Y关于θ_S的一个许用的隐藏数据空间。
这两个定义是SAGE算法SA(Space–Alternating )的基础。
举例说明索引集和许用隐藏数据空间,它们可以看作EM里面显参数和隐含参数定义的衍生:
在上述抛5次硬币的例子中,一共有两个显参数a,b,有5个隐参数硬币属性 θ 1 \theta_{1} θ1, θ 2 \theta_{2} θ2, θ 3 \theta_{3} θ3, θ 4 \theta_{4} θ4, θ 5 \theta_{5} θ5,隐参数一共是5个,那么定义1中m=5,如果取S={1,3},那么索引集决定的隐藏参数集就是
θ S = [ θ 1 θ 3 θ 4 ] ′ \theta_{S}=\left[\begin{array}{ll}\theta_{1} & \theta_{3}& \theta_{4}\end{array}\right]^{\prime}{} θS=[θ1θ3θ4]′, θ S ~ = [ θ 2 θ 5 ] ′ \theta_{\tilde{S}}=\left[\begin{array}{ll}\theta_{2} & \theta_{5}\end{array}\right]^{\prime} θS~=[θ2θ5]′。
不做任何映射时, θ S \theta_{S} θS的一个许用隐藏数据空间为 X S = [ X 1 X 3 X 4 ] X_{S}=\left[\begin{array}{lll}X_{1} & X_{3} & X_{4}\end{array}\right] XS=[X1X3X4], X i X_{i} Xi的是上面最大似然函数中 x i x_{i} xi对应的随机序列。我们在知道在 θ S ~ = [ θ 2 θ 5 ] ′ \theta_{\tilde{S}}=\left[\begin{array}{ll}\theta_{2} & \theta_{5}\end{array}\right]^{\prime} θS~=[θ2θ5]′固定时,若初始化 θ S = [ θ 1 θ 3 θ 4 ] ′ \theta_{S}=\left[\begin{array}{ll}\theta_{1} & \theta_{3}& \theta_{4}\end{array}\right]^{\prime}{} θS=[θ1θ3θ4]′,我们就能在许用隐藏数据空间中进行期望最大化了。减少了每次子空间中需要估计的参数,从而算法提高了收敛速度。
Fessler原论文里面举的图像重构的索引集选取和隐藏参数集映射到许用隐藏数据空间的例子比较复杂,大伙自己去看,可以想像一下 X S X^{S} XS里面是关于 X i X_{i} Xi的函数,不过实际上无线信道参数估计中基本不用映射,见2.3节。
说完两个定义后,介绍以下要点和Fessler定义的流程:
SAGE算法的几个要点:
1)建立包含所有待估计参数的模型:
这个很重要,用论文原话说就是,只有当底层通道模型包含了物理通道最相关的特征时,系统性能评估才会产生具有代表性的结果。2)明确模型中的完整数据空间和隐藏数据空间,选定索引集
索引集的选取会直接影响E步和M步的相对复杂度,成像问题至少有四种自然索引,这个大家自己看原论文,因为和无线信道参数估计没啥关系,知道无线信道参数估计大多是单值索引就行了。
最大化函数一般需要通过Jensen不等式、贝叶斯定理等放缩成下界函数,个人觉得这里超难,不过还好这和无线信道参数估计没啥关系,因为无线信道参数估计的解析形式比较简单,不用去想办法放缩。3)确定整体问题的最大化函数
整体问题的最大化函数的构造和所建立的模型、要解决的问题息息相关,For a well-behaved objective Φ \Phi Φ, the monotonicity property ensures that the sequence { θ i } \left\{\theta^{i}\right\} {θi} will not diverge。这句翻译过来怪别扭的,所以这里放英语了。4)按照索引集从最大化函数中分解期望函数和构造最大化函数。
这部分得和C2.3结合起来看,不同的模型、问题有不同的分解方法、构造方法。原论文这部分也只说了分解,具体怎么分解是用三个例子说明的,有兴趣的自己去看。https://www.researchgate.net/publication/3315454_SpaceAlternating_Generalized_Expectation-Maximization_Algorithm5)参数的初始化问题
这一部分,Widar2.0里面是直接初始化为0的,很正常的做法,但后来发现可能就是这一部分导致我参数估计不对。具体阐述见C 2.3.5。
总而言之,SAGE算法就是通过索引集的不断变换完成参数分解,把整个最大化问题分解成索引集参数所对应的最大化问题,并通过求解对应的期望函数和最大化函数简化整体最大化问题的复杂度,提高收敛速度。注意:SAGE算法并不保证一定收敛到正确的值处,无论是SAGE还是EM,都求得是局部最优,能否收敛到正确的值,还得看索引集选的好不好、最大化函数选的好不好等。
看完这篇1994年的论文后,理智清零,感觉自己看了个寂寞,这篇论文里图像重构的那几个SAGE构造的例子看自闭了。
五一假写毕设论文的空闲时间里,找了几篇SAGE用于无线信道参数估计的,个人着重推荐一篇 Fleury B H, Tschudin M, Heddergott R, et al. Channel parameter estimation in mobile radio environments using the SAGE algorithm[J]. IEEE Journal on Selected Areas in Communications, 1999, 17(3): 434-450.
Fleury的这篇论文,因为和Widar2.0的SAGE构造有九成像,并且里面描述了和我遇到的参数估计出错问题差不多的问题,看到这篇论文时我仿佛遇上了亲爹直接泪目。
接下来以这篇论文为例,SAGE算法用于估计是时变多径信号的时延( τ l τ_{l} τl),入射方位角( ϕ l ϕ_{l} ϕl),入射仰角( β l β_{l} βl)和复振幅( α l α_{l} αl):
假设天线阵列有m根天线,第m根天线上接收信号可以表示为:
h m ( t , ϕ , β ) = ∑ t = 1 L α ℓ exp ( j 2 π λ ⟨ r m , e ( ϕ i , β ℓ ) ⟩ ) δ ( t − τ ℓ ) h_{m}(t, \phi, \beta)=\sum_{t=1}^{L} \alpha_{\ell} \exp \left(\mathrm{j} \frac{2 \pi}{\lambda}\left\langle r_{m}, e\left(\phi_{i}, \beta_{\ell}\right)\right\rangle\right) \delta\left(t-\tau_{\ell}\right) hm(t,ϕ,β)=t=1∑Lαℓexp(jλ2π⟨rm,e(ϕi,βℓ)⟩)δ(t−τℓ)
其中,λ为波长,是 r m r_{m} rm和 e ( ϕ l , β l ) e(ϕ_{l},β_{l} ) e(ϕl,βl)的内积, r m r_{m} rm是一个行向量,表示第m根天线的三维坐标, e ( ϕ , β ) = [ c o s β c o s ϕ , c o s β s i n ϕ , s i n β ] T e(ϕ,β)=[cosβcosϕ,cosβsinϕ,sinβ]^{T} e(ϕ,β)=[cosβcosϕ,cosβsinϕ,sinβ]T。 c m ( ϕ ℓ , β ℓ ) = exp ( j 2 π λ ⟨ r m , e ( ϕ ℓ , β ℓ ) ⟩ ) c_{m}\left(\phi_{\ell}, \beta_{\ell}\right)=\exp \left(\mathrm{j} \frac{2 \pi}{\lambda}\left\langle r_{m}, e\left(\phi_{\ell}, \beta_{\ell}\right)\right\rangle\right) cm(ϕℓ,βℓ)=exp(jλ2π⟨rm,e(ϕℓ,βℓ)⟩)表示由天线阵列导致的ToF引起的相移。
定义阵列转向矩阵 c ( ϕ , β ) = [ c 1 ( ϕ , β ) , … , c M ( ϕ , β ) ] ⊤ c(\phi, \beta)=\left[c_{1}(\phi, \beta), \ldots, c_{M}(\phi, \beta)\right]^{\top} c(ϕ,β)=[c1(ϕ,β),…,cM(ϕ,β)]⊤。待估计参数簇 θ ℓ = [ τ ℓ , ϕ ℓ , ϑ ℓ , α ℓ ] \theta_{\ell}=\left[\tau_{\ell}, \phi_{\ell}, \vartheta_{\ell}, \alpha_{\ell}\right] θℓ=[τℓ,ϕℓ,ϑℓ,αℓ]。那么:
h ( t ; θ ℓ ) = [ h 1 ( t ; θ ℓ ) , … , h M ( t ; θ ℓ ) ] T = α ℓ c ( ϕ ℓ , β ℓ ) δ ( t − τ ℓ ) h\left(t ; \theta_{\ell}\right)=\left[h_{1}\left(t ; \theta_{\ell}\right), \ldots, h_{M}\left(t ; \theta_{\ell}\right)\right]^{\mathrm{T}}=\alpha_{\ell} c\left(\phi_{\ell}, \beta_{\ell}\right) \delta\left(t-\tau_{\ell}\right) h(t;θℓ)=[h1(t;θℓ),…,hM(t;θℓ)]T=αℓc(ϕℓ,βℓ)δ(t−τℓ)
在频域内的进一步考虑噪声对阵列通道传递矩阵的破坏:(个人认为,时域不写噪声,是因为时域模型在参数估计中用不上,CSI是频域响应)
H ( f ; θ ) = ∑ ℓ = 1 L α ℓ c ( ϕ ℓ , β ℓ ) exp ( − j 2 π τ ℓ f ) + N ( f ) H(f ; \theta)=\sum_{\ell=1}^{L} \alpha_{\ell} c\left(\phi_{\ell}, \beta_{\ell}\right) \exp \left(-\mathrm{j} 2 \pi \tau_{\ell} f\right)+N(f) H(f;θ)=ℓ=1∑Lαℓc(ϕℓ,βℓ)exp(−j2πτℓf)+N(f)其中, N ( f ) N(f) N(f)是M维复高斯白噪声, θ = [ θ 1 , … , θ L ] \theta=\left[\theta_{1}, \ldots, \theta_{L}\right] θ=[θ1,…,θL]是我们需要估计的参数——完全数据空间。不妨记: S ( f ; θ ℓ ) = α ℓ c ( ϕ ℓ , β ℓ ) exp ( − j 2 π τ ℓ f ) S\left(f ; \theta_{\ell}\right)=\alpha_{\ell} c\left(\phi_{\ell}, \beta_{\ell}\right) \exp \left(-\mathrm{j} 2 \pi \tau_{\ell} f\right) S(f;θℓ)=αℓc(ϕℓ,βℓ)exp(−j2πτℓf),用于表示第 l l l条多径对信道传递函数的贡献。(这里这样定义后,后面期望函数分解写起来方便点)
完全数据空间是 θ = [ θ 1 , … , θ L ] \theta=\left[\theta_{1}, \ldots, \theta_{L}\right] θ=[θ1,…,θL],每一个 θ l \theta_{l} θl都是一个三维数组。隐藏数据空间麻烦点,按C2.3.2的步骤,得先选定单索引集,也就是每个索引集中只有一个元素(这就相当于选定一条多径嘛),然后确定选定参数 θ S = [ θ l ] ′ \theta_{S}=\left[\begin{array}{ll}\theta_{l} \end{array}\right]^{\prime}{} θS=[θl]′,可以取许用隐藏数据空间 X S = [ θ l ] X_{S}=\left[\begin{array}{ll}\theta_{l} \end{array}\right] XS=[θl]。
感觉这些东西的选取有点主观,需要凭经验选取,目前看过的SAGE信道估计论文中,索引集都是这么构造的,由于目前看到的文章没有说过为啥这么选,我也不知道还有没有别的构造方法。
这篇论文里的最大化函数为:
Λ ( θ i ; X ℓ o b s ) = 2 ∫ ℜ { S H ( f ′ ; θ ℓ ) X ℓ ( f ′ ) } d f ′ − ∫ ∥ S H ( f ′ ; θ ℓ ) ∥ 2 d f ′ \Lambda\left(\theta_{i} ; X_{\ell}^{o b s}\right)=2 \int \Re\left\{S^{\mathrm{H}}\left(f^{\prime} ; \theta_{\ell}\right) X_{\ell}\left(f^{\prime}\right)\right\} d f^{\prime}-\int\left\|S^{\mathrm{H}}\left(f^{\prime} ; \theta_{\ell}\right)\right\|^{2} d f^{\prime} Λ(θi;Xℓobs)=2∫ℜ{SH(f′;θℓ)Xℓ(f′)}df′−∫∥∥SH(f′;θℓ)∥∥2df′
其中, X ℓ o b s X_{\ell}^{o b s} Xℓobs是每次接收装置的观测值 X ℓ ( f ) = S ( f ; θ ℓ ) + μ ℓ N ( f ) X_{\ell}(f)=S\left(f ; \theta_{\ell}\right)+\sqrt{\mu_{\ell}} N(f) Xℓ(f)=S(f;θℓ)+μℓN(f),里面 ∑ μ ℓ = 1 \sum \mu_{\ell}=1 ∑μℓ=1; [ . ] H [.]^{H} [.]H是厄密算符,当时看到这的时候,我:我在量子物理课里学过!仔细一回想:好,我已经忘了。这个最大化函数论文里没有细说选定这个最大化函数的意义和依据是什么,总之知道它选定了这样一个最大化函数,其选择原因不会影响后文的理解。
此时 ( θ ^ ℓ ) M L ( X ℓ o b s ) ∈ arg max θ l { Λ ( θ ℓ ; X ℓ o b s ) } \left(\hat{\theta}_{\ell}\right)_{\mathrm{ML}}\left(X_{\ell}^{o b s}\right) \in \underset{\theta_{l}}{\arg \max }\left\{\Lambda\left(\theta_{\ell} ; X_{\ell}^{o b s}\right)\right\} (θ^ℓ)ML(Xℓobs)∈θlargmax{Λ(θℓ;Xℓobs)}。
由于所有的信号都叠加在测量信号值上, X l ( f ) X_{l} (f) Xl(f)无法观测,但可以尝试获得它的估计,从观测值中除去除第l径以外的其他多径的贡献:
Q S ( θ S ; θ ˉ ) = Q^{S}\left(\theta_{S} ; \bar{\theta}\right)= QS(θS;θˉ)= X ^ ℓ ( f ; θ ^ ′ ) = H ( f ) − ∑ ℓ = 1 ℓ ≠ ℓ L S ( f ; θ ^ ℓ ′ ) \hat{X}_{\ell}\left(f ; \hat{\theta}^{\prime}\right)=H(f)-\sum_{\ell=1 \atop \ell \neq \ell}^{L} S\left(f ; \hat{\theta}_{\ell}^{\prime}\right) X^ℓ(f;θ^′)=H(f)−∑ℓ=ℓℓ=1LS(f;θ^ℓ′)
由于 Q S Q^{S} QS解析形式比较明了且不难计算,可以直接省略放缩过程,将它作为期望函数。老实说,看到这里我也惊了,在无线信道估计里面,SAGE算法好像不管最大化函数是什么,都能分解成这个期望函数,比如Widar2.0里面, β l β_{l} βl取1的时候,其实本质和上式一模一样,都是第 l l l条多径信号的估计值。
M步中的最大化函数为:
τ ^ ℓ ′ ′ = arg max τ { ∣ z ( τ , ϕ ^ ℓ ′ , β ^ ℓ ′ ; X ^ ℓ ( f ; θ ^ ′ ) ) ∣ } \hat{\tau}_{\ell}^{\prime \prime}=\arg \max _{\tau}\left\{\left|z\left(\tau, \hat{\phi}_{\ell}^{\prime}, \hat{\beta}_{\ell}^{\prime} ; \hat{X}_{\ell}\left(f ; \hat{\theta}^{\prime}\right)\right)\right|\right\} τ^ℓ′′=argmaxτ{∣∣∣z(τ,ϕ^ℓ′,β^ℓ′;X^ℓ(f;θ^′))∣∣∣},
ϕ ^ ℓ ′ ′ = arg max ϕ { ∣ z ( τ ^ ℓ ′ ′ , ϕ , β ^ ℓ ′ ; X ^ ℓ ( f ; θ ^ ′ ) ) ∣ } \hat{\phi}_{\ell}^{\prime \prime}=\arg \max _{\phi}\left\{\left|z\left(\hat{\tau}_{\ell}^{\prime \prime}, \phi, \hat{\beta}_{\ell}^{\prime} ; \hat{X}_{\ell}\left(f ; \hat{\theta}^{\prime}\right)\right)\right|\right\} ϕ^ℓ′′=argmaxϕ{∣∣∣z(τ^ℓ′′,ϕ,β^ℓ′;X^ℓ(f;θ^′))∣∣∣},
β ^ ℓ n = arg max β { ∣ z ( τ ^ ℓ ′ ′ , ϕ ^ ℓ ′ ′ , β ; X ^ ℓ ( f ; θ ^ ′ ) ) ∣ } \hat{\beta}_{\ell}^{n}=\arg \max _{\beta}\left\{\left|z\left(\hat{\tau}_{\ell}^{\prime \prime}, \hat{\phi}_{\ell}^{\prime \prime}, \beta ; \hat{X}_{\ell}\left(f ; \hat{\theta}^{\prime}\right)\right)\right|\right\} β^ℓn=argmaxβ{∣∣∣z(τ^ℓ′′,ϕ^ℓ′′,β;X^ℓ(f;θ^′))∣∣∣},
α ^ ℓ ′ ′ = 1 M N z ∣ ( τ ^ ℓ ′ ′ , ϕ ^ ℓ ′ ′ , β ^ ℓ n ; X ^ ℓ ( f ; θ ^ ′ ) ) ∣ \hat{\alpha}_{\ell}^{\prime \prime}=\frac{1}{M N} z\left|\left(\hat{\tau}_{\ell}^{\prime \prime}, \hat{\phi}_{\ell}^{\prime \prime}, \hat{\beta}_{\ell}^{n} ; \hat{X}_{\ell}\left(f ; \hat{\theta}^{\prime}\right)\right)\right| α^ℓ′′=MN1z∣∣∣(τ^ℓ′′,ϕ^ℓ′′,β^ℓn;X^ℓ(f;θ^′))∣∣∣
这一步让我看到了熟悉的Widar2.0,除了一个参数不一样,其他一模一样。
原文中这里有这样一段话:
文中指出,由于初始化为0导致SAGE算法的 ϕ ^ ℓ ′ , β ^ ℓ ′ \hat{\phi}_{\ell}^{ \prime}, \hat{\beta}_{\ell}^{\prime} ϕ^ℓ′,β^ℓ′没有收敛到正确的值处,于是提出了用 ( ϕ ^ ℓ ′ ′ , β ^ ℓ ′ ′ ) \left(\hat{\phi}_{\ell}^{\prime \prime}, \hat{\beta}_{\ell}^{\prime \prime}\right) (ϕ^ℓ′′,β^ℓ′′)的二元优化替代两个一元的最大化,避免了产生错误的方位角 ϕ ^ ℓ ′ , β ^ ℓ ′ \hat{\phi}_{\ell}^{ \prime}, \hat{\beta}_{\ell}^{\prime} ϕ^ℓ′,β^ℓ′估计值,尽可能收敛到正确的值处。
感觉和我复现Widar2.0中遇到的问题太像了555。
1)看文献,写代码,用二元优化替代一元优化,感觉Widar2.0去遍历整个搜索空间应该不会出现这个问题啊,所以二元优化理论上不能解决这个参数估计问题,但还是得试一试。
2)重写参数初始化,用别的方法得到一个粗略的初始值,用这个值完成初始化。
3)不过吧,毕设写完了,这后续不一定会有后续23333。
如果有有缘人复现Widar2.0也碰到了这个问题,可以私信我,第一版更新完了,都不知道我碰到的这个问题是不是我的个例。总之先试一试吧。
补充:如果我理解有错的地方请帮忙指出,谢谢。
——以上内容2021年5月12日21点33分更新
2021/5/28 更新,二元优化没啥作用,可能还是环境的影响吧。另外说一点新发现,Widar2.0里面构建匹配空间时ToF有负值,所以估计出的ToF可以为负。调试后发现保留负的ToF,使得hample滤波器处理后的ToF整体变化趋势更正确,定位的精确度会比不保留负值时高。