MATLAB: разверните функцию

Я нахожусь в обсуждении с кем-то от ре MathWorks: unwrap функция, которая имеет "ошибку" в нем для допусков перехода кроме π и хотела бы получить некоторые другие перспективы:

Описание

Q = unwrap(P) исправляет фазовые углы радиана в векторе P путем добавления кратных чисел ±2π, когда переходы в абсолютных адресах между последовательными элементами P больше, чем или равны допуску перехода по умолчанию π радианов. Если P является матрицей, разверните, работает по столбцам. Если P является многомерным массивом, разверните, воздействует на первый неодноэлементный размер.

Q = unwrap(P,tol)использует допуск перехода tol вместо значения по умолчанию, π.

Существует две возможных интерпретации документации:

  1. Q = unwrap(P,tol) исправляет фазовые углы радиана в векторе P путем добавления кратных чисел ±2π, когда переходы в абсолютных адресах между последовательными элементами P больше, чем или равны tol радианам. Если P является матрицей, разверните, работает по столбцам. Если P является многомерным массивом, разверните, воздействует на первый неодноэлементный размер.

    Пример:

    >> x = mod(0:20:200,100); unwrap(x, 50)
    ans =
        0 20.0000 40.0000 60.0000 80.0000 81.6814 101.6814 121.6814 141.6814 161.6814 163.3628
    
  2. Q = unwrap(P,tol) исправляет элементы в векторе P путем добавления кратных чисел ±2*tol, когда переходы в абсолютных адресах между последовательными элементами P больше, чем или равны tol. Если P является матрицей, разверните, работает по столбцам. Если P является многомерным массивом, разверните, воздействует на первый неодноэлементный размер.

    Пример:

    >> x = mod(0:20:200,100); unwrap(x, 50)  
    ans =  
        0    20    40    60    80   100   120   140   160   180   200
    

Фактическое поведение unwrap() в MATLAB (по крайней мере, до R2010a) № 1. Моя интерпретация unwrap() это, это, как предполагается, № 2, и поэтому в поведении существует ошибка. Если unwrap()поведение соответствовало № 2, затем разверните, мог использоваться в качестве инверсии для модификации для медленно переменных исходных данных, т.е. unwrap(mod(x,T),T/2) = x для векторов x, где последовательные элементы варьируются меньше, чем tol=T/2.

Обратите внимание, что эта 2-я интерпретация является более общей, чем углы и может развернуть что-либо со всеобъемлющим периодом T. (ли значение по умолчанию T=2π для радианов, 360 для градусов, 256 для 8-разрядных чисел, 65536 для 16-разрядных чисел, и т.д.)

Таким образом, мой вопрос:

Есть ли возможные применения для поведения № 1? Какая интерпретация имеет больше смысла?

6
задан Jason S 7 July 2010 в 16:42
поделиться

2 ответа

Поведение №1 имеет смысл, поскольку предполагается, что на входе радиан , а не градусов . Регулировка добавляет пи / 2, если вы превышаете допуск на скачок, так что это нормально.

Было бы неплохо, если бы в unwrap была функция, позволяющая работать с любыми сериями, а не только с радианными углами.

Допуск на скачок недостаточен, чтобы определить, есть ли у вас ряд в радианах, градусах или любом другом виде, поэтому потребуется дополнительный ввод.

1
ответ дан 17 December 2019 в 00:02
поделиться

Я всегда предполагал, что второе поведение является фактическим, но никогда не проверял его. Буквальное прочтение файла справки действительно указывает на поведение №1. Но это совсем не то, что хотелось бы сделать. В качестве простого примера, рассмотрим разворачивание в градусах

x = mod(0:30:720, 360)
y = unwrap(x,180)

очевидно, что вы хотели бы получить y = 0:30:720, но вместо этого вы получаете ...

y =

Columns 1 through 7

     0   30.0000   60.0000   90.0000  120.0000  150.0000  180.0000

Columns 8 through 14

210.0000  240.0000  270.0000  300.0000  330.0000  333.0088  363.0088

Columns 15 through 21

393.0088  423.0088  453.0088  483.0088  513.0088  543.0088  573.0088

Columns 22 through 25

603.0088  633.0088  663.0088  666.0176

что неправильно (y больше не соответствует тому же углу, что и x, что является точкой разворачивания)

Кто-нибудь может привести пример, когда вам нужно поведение #1 (текущее поведение?)

.
1
ответ дан 17 December 2019 в 00:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: