【问题标题】:Fixing phase unwrapping errors in Numpy修复 Numpy 中的相位展开错误
【发布时间】:2012-04-12 14:52:53
【问题描述】:

我有一系列展开阶段,其中包含一些展开错误,包括 +/- Pi 倍数的跳跃:

import numpy
a = numpy.array([0.5, 1.3, 2.4, 10.3, 10.8, 10.2, 7.6, 3.2, 2.9])

在此示例中,在 2.4 和 10.3 之间有 2 个周期的第一次跳跃,在 7.6 和 3.2 之间有 -1 个周期的跳跃。我想删除跳跃。问题是,当您移除一个跳跃时,您需要相应地增加或减少该系列的其余部分,而不仅仅是跳跃发生的值。

有没有更简洁的方法(没有/更少的循环,更快)这样做:

jumpsexist = 1
while jumpsexist:
    # Look for absolute differences greater than Pi
    jump = numpy.abs((numpy.roll(a,-1) -a)) > numpy.pi
    if jump[:-1].any():
        # Find the index of the first jump
        jumpind = numpy.argmax(jump) + 1
        # Calculate the number of cycles in that jump
        cycles = ((a[jumpind] - a[jumpind- 1]) / numpy.pi).astype("Int8")
        # Remove the cycles
        a[jumpind:] -= cycles * numpy.pi
    else:
        break

【问题讨论】:

  • 注意这个变量不是叫“jump sexist”,而是“jumps exist”。我拿“s words”换200。
  • 与您选择不当的变量名称保持一致,您可能会发现 numpy 函数 cumsum 在这里很有用。这是累积总和,而不是......没关系。
  • 附带说明,存在噪声时的相位展开是一个开放的研究问题...您不会碰巧在处理 InSAR 数据,对吗?

标签: python numpy phase


【解决方案1】:

NumPy 提供函数numpy.unwrap() 用于相位展开。使用默认参数值,它会修正以 2π 为模的相位数组,使得所有跳跃都小于或等于 π:

>>> a = numpy.array([0.5, 1.3, 2.4, 10.3, 10.8, 10.2, 7.6, 3.2, 2.9])
>>> numpy.unwrap(a)
array([ 0.5       ,  1.3       ,  2.4       ,  4.01681469,  4.51681469,
        3.91681469,  1.31681469,  3.2       ,  2.9       ])

【讨论】:

  • 将此更改为接受的答案。虽然我最初的问题并不清楚,但这确实是我所追求的。
  • @Benjamin:我怀疑你是——这就是为什么我敦促你清楚地说明你的要求。 :)
【解决方案2】:

这个怎么样:

import numpy as np 
a = np.array([0.5, 1.3, 2.4, 10.3, 10.8, 10.2, 7.6, 3.2, 2.9])
d = np.diff(a)/np.pi
b = np.empty_like(a)
b[0] = a[0]
b[1:] = a[1:]-(np.floor(np.abs(d))*np.sign(d)).cumsum()*np.pi

给出:

In [40]: print a
[  0.5   1.3   2.4  10.3  10.8  10.2   7.6   3.2   2.9]

In [41]: print b
[ 0.5         1.3         2.4         4.01681469  4.51681469  3.91681469
  1.31681469  0.05840735 -0.24159265]

这里d 持有“跳跃”的有符号数量,适当截断的“跳跃”的累积总和是需要删除/添加到系列的每个连续元素的多个 pi。

这是你的意思吗?

【讨论】:

  • 正确。为了便于阅读,d = (numpy.diff(phases) / numpy.pi).astype("Int8")b[1:] = a[1:] - numpy.cumsum(d) * numpy.pi 可能会更清晰。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-21
  • 1970-01-01
  • 1970-01-01
  • 2020-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多