flopscope.

flopscope.numpy.unwrap

fnp.unwrap(p: 'ArrayLike', discont: 'float | None' = None, axis: 'int' = -1, *, period: 'float' = 6.283185307179586) -> 'FlopscopeArray'[flopscope source][numpy source]

Unwrap by taking the complement of large deltas with respect to the period.

Adapted from NumPy docs np.unwrap

Areacore
Typecustom
NumPy Refnp.unwrap
Cost
numel(input)\text{numel}(\text{input})
Flopscope Context

Phase unwrap. Cost: $\text{numel}(\text{input})$ (diff + conditional adjustment).

This unwraps a signal p by changing elements which have an absolute difference from their predecessor of more than max(discont, period/2) to their period-complementary values.

For the default case where period is 2π2\pi and discont is π\pi, this unwraps a radian phase p such that adjacent differences are never greater than π\pi by adding 2kπ2k\pi for some integer kk.

Parameters

p:array_like

Input array.

discont:float, optional

Maximum discontinuity between values, default is period/2. Values below period/2 are treated as if they were period/2. To have an effect different from the default, discont should be larger than period/2.

axis:int, optional

Axis along which unwrap will operate, default is the last axis.

period:float, optional

Size of the range over which the input wraps. By default, it is 2 pi.

Added in version 1.21.0.

Returns

out:ndarray

Output array.

See also

Notes

If the discontinuity in p is smaller than period/2, but larger than discont, no unwrapping is done because taking the complement would only make the discontinuity larger.

Examples

>>> import flopscope.numpy as fnp
>>> phase = flops.linspace(0, flops.pi, num=5)
>>> phase[3:] += flops.pi
>>> phase
array([ 0.        ,  0.78539816,  1.57079633,  5.49778714,  6.28318531]) # may vary
>>> flops.unwrap(phase)
array([ 0.        ,  0.78539816,  1.57079633, -0.78539816,  0.        ]) # may vary
>>> flops.unwrap([0, 1, 2, -1, 0], period=4)
array([0, 1, 2, 3, 4])
>>> flops.unwrap([ 1, 2, 3, 4, 5, 6, 1, 2, 3], period=6)
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> flops.unwrap([2, 3, 4, 5, 2, 3, 4, 5], period=4)
array([2, 3, 4, 5, 6, 7, 8, 9])
>>> phase_deg = flops.mod(flops.linspace(0 ,720, 19), 360) - 180
>>> flops.unwrap(phase_deg, period=360)
array([-180., -140., -100.,  -60.,  -20.,   20.,   60.,  100.,  140.,
        180.,  220.,  260.,  300.,  340.,  380.,  420.,  460.,  500.,
        540.])