【技术实现步骤摘要】
一种基于双计数器的相位展开算法
[0001]本专利技术涉及信号处理
,具体地说是一种基于双计数器的相位展开算法。
技术介绍
[0002]相位展开是一个经典的信号处理问题,它指的是从值区间(
‑
π,π]或(0,2π]中恢复原始相位值。在运用反正切函数计算相位时,实际提取的相位都是包裹在一个周期相位区间的包裹相位值,并非真实得到的相位,将包裹的相位恢复为真实连续的相位即为相位展开。
[0003]传统的算法假设包裹的相位信号为x
w
(n),被展开的相位为x
u
(n):使x
u
(n)=x
w
(n);计算数据的差值即包裹的相位信号一阶差分ΔPhase=x
w
(n)-x
w
(n
‑
1);若数据差值ΔPhase>π,则x
w
(n)当前点以及后续所有点均减去2π;若数据差值ΔPhase<π,则x
u
(n)当前点以及后续所有点均加上2π。
[0004]Kazuyoshi Itoh最早于1982年在论文Analysis ofthe phase unwrapping problem里面提出了相位展开算法,相位展开算法原理详述如下:
[0005]假设包裹的相位信号为x
w
(n),被展开的相位为x
u
(n),则可根据以下步骤展开相位:
[0006]步骤1:使x />u
(n)=x
w
(n);
[0007]步骤2:计算差值ΔPhase=x
w
(n)
‑
x
w
(n
‑
1);
[0008]步骤3:若差值ΔPhase>π,则x
u
(n)当前点以及后续所有点均减去2π;若差值ΔPhase<
‑
π,则x
u
(n)当前点以及后续所有点均加上2π;
[0009]步骤4:重复以上步骤,直到遍历x
u
(n)。
[0010]相应的MATLAB算法描述如下:
[0011][0012]根据以上步骤就可以对包裹的相位进行展开。
[0013]上述算法在计算机上运行起来速度极慢,在FPGA上由于其空间复杂度高,根本无法实现。
[0014]现有技术中还有一种算法如下:
[0015]MATLAB中相位展开函数使用的相位展开算法核心部分描述如下:
[0016]与上面相同,假设包裹的相位信号为x
w
(n),被展开的相位为x
u
(n),则可根据以下步骤展开相位:
[0017]步骤1:使x
u
(n)=x
w
(n);
[0018]步骤2:计算差值即包裹的相位信号一阶差分除以2π的结果dp_corr=[x
w
(n)
‑
x
w
(n
‑
1)]/2π;
[0019]步骤3:对有符号数dp_corr取整得到dp_corr_round;
[0020]步骤4:将当前相位加上dp_corr_round累计和的2π倍,即x
w
(n)=x
w
(n)+2π*dp_corr_round
[0021]步骤5:重复以上步骤,直到遍历x
u
(n)。
[0022]根据以上步骤就可以对包裹的相位进行展开。
[0023]上述算法在实际实现中包含取余、取整及除法运算,无法在硬件上实现。
[0024]因此需要设计一种基于双计数器的相位展开算法,通过对MATLAB的代码设计和程序流程的设计,将软件平台上的一维相位展开算法进行改造以适用于FPGA平台,且计算速度提升,空间复杂度降低,同时可适用于硬件平台,提高了实用性。
技术实现思路
[0025]本专利技术的目的是克服现有技术的不足,提供了一种基于双计数器的相位展开算
法,通过对MATLAB的代码设计和程序流程的设计,将软件平台上的一维相位展开算法进行改造以适用于FPGA平台,且计算速度提升,空间复杂度降低,同时可适用于硬件平台,提高了实用性。
[0026]为了达到上述目的,本专利技术提供一种基于双计数器的相位展开算法:包括算法第一大步和第二大步,其特征在于所述第一大步包括以下步骤:
[0027]S1:计算前一个相位与后一个相位数值间差值diff1=xu(k)
‑
xu(k
‑
1)及后一个相位与前一个相位数值间差值diff2=xu(k
‑
1)
‑
xu(k);
[0028]S2:判断diff1与diff2是否大于相位发生截断的界限值bound,如果diff1大于bound,则对i上跳变计数器加1;如果diff2大于bound,则对j下跳变计数器加1;如果都不满足,则判断i,j计数器数值的相对大小,让数值大的计数器减去数值小的计数器,将计算结果赋值给数值大的计数器,再将数值小的计数器数值置0;
[0029]S3:计算上下跳变计数器的差值delta,令delta=i
‑
j;
[0030]S4:对相位进行补偿,令xu(k
‑
1)=xu(k
‑
1)
‑
2*(delta)*bound,得到第一大步的相位展开结果;
[0031]所述第二大步包括以下步骤:
[0032]S10:计算当前相位值my_phase_out(t)与后一个相位值my_phase_out(t
‑
1)间差值diff3及当前相位值my_phase_out(t)与前一个相位值my_phase_out(t+1)间差值diff4;
[0033]S20:判断diff3,diff4与bound的大小,若diff3,diff4均大于bound,则对当前相位值my_phase_out(t)减去2倍的bound数值;若diff3,diff4均小于
‑
bound,则对当前相位值my_phase_out(t)加上2倍的bound数值;否则保持不变。
[0034]根据权利要求所述的一种基于双计数器的相位展开算法,其特征在于:所述S2的算法也可以为:
[0035]如果diff1大于bound,则对i计数器加1;如果diff1小于
‑
bound,则对j计数器加1;如果都不满足,则判断i,j计数器数值的相对大小,让数值大的计数器减去数值小的计数器,将计算结果赋值给数值大的计数器,再将数值小的计数器数值置0。
[0036]上述算法在MATLAB上实现的封装函数源代码为:
[0037][003本文档来自技高网...
【技术保护点】
【技术特征摘要】
1.一种基于双计数器的相位展开算法,包括算法第一大步和第二大步,其特征在于所述第一大步包括以下步骤:S1:计算前一个相位与后一个相位数值间差值diff1=xu(k)
‑
xu(k
‑
1)及后一个相位与前一个相位数值间差值diff2=xu(k
‑
1)
‑
xu(k);S2:判断diff1与diff2是否大于相位发生截断的界限值bound,如果diff1大于bound,则对i上跳变计数器加1;如果diff2大于bound,则对j下跳变计数器加1;如果都不满足,则判断i,j计数器数值的相对大小,让数值大的计数器减去数值小的计数器,将计算结果赋值给数值大的计数器,再将数值小的计数器数值置0;S3:计算上下跳变计数器的差值delta,令delta=i
‑
j;S4:对相位进行补偿,令xu(k
‑
1)=xu(k
‑
1)
‑
2*(delta)*bound,得到第一大步的相位展开结果;所述第二大步包括以下步骤:S10:计算当前相位值my_phase_out(t)与后一个相位值my_phase_out(t
‑
1)间差值diff3及当前相位值my_phase_out(t)与前一个相位值my_phase_out(t+1)间差值diff4;S20:判断diff3,diff4与bound的大小,若diff3,diff4均大于bound,则对当前相位值my_phase_out(t)减去2倍的bound数值;若diff3,diff4均小于
‑
bound,则对当前相位值my_phase_out(t)加上2倍的bound数值;否则保持不变。2.根据权利要求所述的一种基于双计数器的相位展开算法,其特征在于:所述S2的算法也可以为:如果diff1大于bound,则对i计数器加1;如果diff1小于
‑
bound,则对j计数器加1;如果都不...
【专利技术属性】
技术研发人员:冯秀娟,柯伟,李立京,何龙标,牛锋,杨平,郑云山,
申请(专利权)人:北京航空航天大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。