numpy.unwrap#
- numpy.unwrap(p, разрыв=None, ось=-1, *, период=6.283185307179586)[источник]#
Развернуть, взяв дополнение больших дельт относительно периода.
Это разворачивает сигнал p изменяя элементы, абсолютная разница которых с предшественником превышает
max(discont, period/2)к их период-дополнительные значения.Для случая по умолчанию, где период является \(2\pi\) и разрыв является \(\pi\), это разворачивает радианную фазу p таким образом, чтобы соседние разности никогда не превышали \(\pi\) путем добавления \(2k\pi\) для некоторого целого числа \(k\).
- Параметры:
- parray_like
Входной массив.
- разрывfloat, опционально
Максимальный разрыв между значениями, по умолчанию
period/2. Значения нижеperiod/2обрабатываются как если бы они былиperiod/2. Чтобы иметь эффект, отличный от стандартного, разрыв должен быть больше, чемperiod/2.- осьint, необязательный
Ось, вдоль которой будет работать unwrap, по умолчанию последняя ось.
- периодfloat, опционально
Размер диапазона, по которому входные данные зацикливаются. По умолчанию это
2 pi.Новое в версии 1.21.0.
- Возвращает:
- выходndarray
Выходной массив.
Примечания
Если разрыв в p меньше, чем
period/2, но больше, чем разрыв, развертывание не выполняется, потому что взятие дополнения только увеличило бы разрыв.Примеры
>>> import numpy as np
>>> phase = np.linspace(0, np.pi, num=5) >>> phase[3:] += np.pi >>> phase array([ 0. , 0.78539816, 1.57079633, 5.49778714, 6.28318531]) # may vary >>> np.unwrap(phase) array([ 0. , 0.78539816, 1.57079633, -0.78539816, 0. ]) # may vary >>> np.unwrap([0, 1, 2, -1, 0], period=4) array([0, 1, 2, 3, 4]) >>> np.unwrap([ 1, 2, 3, 4, 5, 6, 1, 2, 3], period=6) array([1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> np.unwrap([2, 3, 4, 5, 2, 3, 4, 5], period=4) array([2, 3, 4, 5, 6, 7, 8, 9]) >>> phase_deg = np.mod(np.linspace(0 ,720, 19), 360) - 180 >>> np.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.])
Этот пример отображает развёртывание свёрнутого входного сигнала w. Сначала сгенерируйте w, затем применить
unwrapчтобы получить u.>>> t = np.linspace(0, 25, 801) >>> w = np.mod(1.5 * np.sin(1.1 * t + 0.26) * (1 - t / 6 + (t / 23) ** 3), 2.0) - 1 >>> u = np.unwrap(w, period=2.0)
Построить график w и u.
>>> import matplotlib.pyplot as plt >>> plt.plot(t, w, label='w (a signal wrapped to [-1, 1])') >>> plt.plot(t, u, linewidth=2.5, alpha=0.5, label='unwrap(w, period=2)') >>> plt.xlabel('t') >>> plt.grid(alpha=0.6) >>> plt.legend(framealpha=1, shadow=True) >>> plt.show()