Функция unwrap
Функция unwrap устраняет скачки фазовых углов, возникающие
из-за периодичности тригонометрических функций. Когда фаза
пересекает границу между π и -π, происходит скачок
на величину, близкую к 2π. Функция обнаруживает такие скачки
и корректирует последующие значения, добавляя или вычитая 2π
для восстановления непрерывной последовательности.
Первым параметром функция принимает массив углов в радианах.
Вторым параметром discont можно задать порог скачка
(по умолчанию π). Третий параметр axis указывает
ось, вдоль которой выполняется корректировка (по умолчанию
последняя ось). Функция возвращает новый массив с
скорректированными фазами.
Синтаксис
np.unwrap(phase, discont=np.pi, axis=-1)
Пример
Создадим массив фазовых углов, содержащий скачок между
3.0 и -2.8 радиан:
import numpy as np
phase = np.array([0.0, 1.0, 2.0, 3.0, -2.8, -1.8, -0.8])
res = np.unwrap(phase)
print("Original:", phase)
print("Unwrapped:", res)
Результат выполнения кода:
"Original: [ 0. 1. 2. 3. -2.8 -1.8 -0.8]"
"Unwrapped: [ 0. 1. 2. 3. 3.48318531 4.48318531 5.48318531]"
Как видно, значение -2.8 было скорректировано до
3.48318531 (то есть прибавлено 2π ≈ 6.28318531),
и все последующие значения также были увеличены на эту же
величину, чтобы сохранить непрерывность.
Пример
Изменим порог скачка с помощью параметра discont.
Установим его в 1.5 радиан, тогда скачок будет
обнаружен только при разнице более 1.5:
import numpy as np
phase = np.array([0.0, 1.2, 2.5, 3.8, 1.0, 2.0])
res = np.unwrap(phase, discont=1.5)
print("Original:", phase)
print("Unwrapped:", res)
Результат выполнения кода:
"Original: [0. 1.2 2.5 3.8 1. 2. ]"
"Unwrapped: [0. 1.2 2.5 3.8 7.28318531 8.28318531]"
Значение 1.0 было изменено на 7.28318531
(прибавлено 2π), так как разница с предыдущим
значением 3.8 составила -2.8 по модулю,
что больше порога 1.5.
Пример
Применим функцию к двумерному массиву вдоль разных осей. Создадим массив с несколькими скачками:
import numpy as np
phase = np.array([
[0.0, 1.0, 2.0, 3.0, -2.8],
[0.0, 1.0, 2.0, 3.0, -2.8],
[0.0, 1.0, 2.0, 3.0, -2.8]
])
# Корректируем вдоль строк (по умолчанию axis=-1)
res_rows = np.unwrap(phase)
# Корректируем вдоль столбцов
res_cols = np.unwrap(phase, axis=0)
print("Reshaped rows:\n", res_rows)
print("Reshaped columns:\n", res_cols)
Результат выполнения кода:
"Reshaped rows:\n [[0. 1. 2. 3. 3.48318531]\n [0. 1. 2. 3. 3.48318531]\n [0. 1. 2. 3. 3.48318531]]"
"Reshaped columns:\n [[0. 1. 2. 3. 3.48318531]\n [0. 1. 2. 3. 3.48318531]\n [0. 1. 2. 3. 3.48318531]]"