I have a series of unfolded phases with some pivot errors that consist of a +/- fold Pi jump:
import numpy
a = numpy.array([0.5, 1.3, 2.4, 10.3, 10.8, 10.2, 7.6, 3.2, 2.9])
In this example, there is a first jump in 2 cycles between 2.4 and 10.3 and a -1 cycle jump between 7.6 and 3.2. I want to remove the jumps. The trick is that when you delete a jump, you need to increase or decrease the rest of the series, and not just the value in which the transition occurs.
Is there a cleaner way (no / fewer cycles, faster) to do this:
jumpsexist = 1
while jumpsexist:
jump = numpy.abs((numpy.roll(a,-1) -a)) > numpy.pi
if jump[:-1].any():
jumpind = numpy.argmax(jump) + 1
cycles = ((a[jumpind] - a[jumpind- 1]) / numpy.pi).astype("Int8")
a[jumpind:] -= cycles * numpy.pi
else:
break
source
share