Разверните угол, чтобы иметь непрерывную фазу - PullRequest
0 голосов
/ 12 сентября 2018

Допустим, у меня есть массив фаз, подобных этому:

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

(со многими такими скачками)

image

Как получить из него массив более "непрерывных" фаз?

Конечно, я уже пробовал с np.unwrap:

plt.plot(np.unwrap(phase))

или

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

но он остается точно таким же:

image

То, что я ожидал, было распаковкой, подобной этой:

enter image description here

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018

Если вы хотите сохранить свою первоначальную фазу с пи-периодичностью, вы должны сначала удвоить ее, развернуть, а затем разделить на две части:

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

0 голосов
/ 12 сентября 2018

Моя проблема возникла из-за того, что в моем реальном коде был двумерный массив (n,1) (не замечая этого) вместо одномерного массива длиной n.Затем параметр axis:

np.unwrap(phase, axis=0)

решил ее.

Другие ответы все еще полезны из-за 2 pi против pi вопроса.

0 голосов
/ 12 сентября 2018

Из документа np.unwrap:

Развернуть фазу радиана p, изменив абсолютные скачки больше чем discont до их 2 * пи дополнения по заданной оси.

Но дополнением 2 * пи всех элементов в вашем векторе являются сами значения, поскольку никакое значение не является каждым> 2 * пи.

Попробуйте это:

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))

enter image description here

...