首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >修复Numpy中的相位展开错误

修复Numpy中的相位展开错误
EN

Stack Overflow用户
提问于 2012-04-12 22:52:53
回答 2查看 5.1K关注 0票数 5

我有一系列的解包阶段,有一些解包错误,包括Pi的+/-倍数跳跃:

代码语言:javascript
复制
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个周期的跳跃。我想移除跳跃。问题是,当您删除跳转时,您需要相应地增加或减少序列的其余部分,而不仅仅是发生跳转的值。

有没有一种更干净的方法(没有/更少的循环,更快)来做到这一点:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-17 20:37:13

NumPy提供了用于相位展开的函数numpy.unwrap()。使用默认参数值,它将校正模为2π的相位数组,以便所有跳变小于或等于π:

代码语言:javascript
复制
>>> 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       ])
票数 8
EN

Stack Overflow用户

发布于 2012-04-12 23:24:54

这样如何:

代码语言:javascript
复制
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

这就给出了:

代码语言:javascript
复制
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的倍数,它需要被移除/添加到序列的每个成功元素。

这就是你的意思吗?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10126125

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档