jax.numpy.unwrap#
- jax.numpy.unwrap(p, discont=None, axis=-1, period=6.283185307179586)[源代码]#
解包一个周期性信号。
numpy.unwrap()
的 JAX 实现。- 参数:
p (ArrayLike) – 输入数组
discont (ArrayLike | None) – 序列中允许的最大不连续性。 默认为
period / 2
axis (int) – 解包的轴; 默认为 -1
period (ArrayLike) – 信号的周期,默认为 \(2\pi\)
- 返回:
p
的解包副本。- 返回类型:
示例
考虑这样一种情况,您正在通过磁盘上某个点的
x
和y
位置来测量旋转磁盘的位置。 底层变量是一个始终递增的角度,我们将使用这种方式生成它,为方便表示使用度数>>> rng = np.random.default_rng(0) >>> theta = rng.integers(0, 90, size=(20,)).cumsum() >>> theta array([ 76, 133, 179, 203, 230, 233, 239, 240, 255, 328, 386, 468, 513, 567, 654, 719, 775, 823, 873, 957])
我们对这个角度的观察是
x
和y
坐标,由这个底层角度的正弦和余弦给出>>> x, y = jnp.sin(jnp.deg2rad(theta)), jnp.cos(jnp.deg2rad(theta))
现在,假设给定这些
x
和y
坐标,我们希望恢复原始角度theta
。 我们可以通过atan2()
函数来实现>>> theta_out = jnp.rad2deg(jnp.atan2(x, y)).round() >>> theta_out Array([ 76., 133., 179., -157., -130., -127., -121., -120., -105., -32., 26., 108., 153., -153., -66., -1., 55., 103., 153., -123.], dtype=float32)
前几个值与上面的输入角度
theta
相匹配,但在此之后,这些值会被包裹,因为sin
和cos
观测值掩盖了相位信息。unwrap()
函数的目的是从这个包裹的视图中恢复原始信号>>> jnp.unwrap(theta_out, period=360) Array([ 76., 133., 179., 203., 230., 233., 239., 240., 255., 328., 386., 468., 513., 567., 654., 719., 775., 823., 873., 957.], dtype=float32)
它通过假设真实的底层序列在一个步骤内不会相差超过
discont
(默认为period / 2
)来实现这一点,并且当它遇到更大的不连续性时,它会将周期的因子添加到数据中。 对于满足此假设的周期性信号,unwrap()
可以恢复原始相位信号。