展开角度以具有连续相位

Unwrap angle to have continuous phase

假设我有一组与此类似的阶段:

import numpy as np
import matplotlib.pyplot as plt
phase = np.linspace(0., 100., 1000) % np.pi
plt.plot(phase)
plt.show()

(有很多这样的不连续性)

如何从中获取更多 "continuous" 个相位的数组?

当然,我已经尝试过 np.unwrap:

plt.plot(np.unwrap(phase))

plt.plot(np.unwrap(phase),discont=0.1)

但它保持完全相似:

我期望的是像这样展开:

来自 np.unwrap 的文档:

Unwrap radian phase p by changing absolute jumps greater than discont to their 2*pi complement along the given axis.

但是向量中所有元素的 2*pi 补码是值本身,因为没有值是每个 > 2*pi。

试试这个:

phase = np.linspace(0., 20., 1000) % 2*np.pi

plt.figure()

plt.subplot(1, 2, 1)
plt.plot(phase)

plt.subplot(1, 2, 2)
plt.plot(np.unwrap(phase))

如果你想保持你的原始相位具有 pi 周期性,你应该先将它加倍,展开它,然后将它除以二:

plt.plot(np.unwrap(2 * phase) / 2)

我的问题来自于我的真实代码中有一个二维数组 (n,1)(没有注意到),而不是长度为 n 的一维数组。然后参数axis:

np.unwrap(phase, axis=0)

解决了。

由于 2 pipi 问题,其他答案仍然有用。