我与来自Mathworks公司的人讨论我回复:unwrap
功能,拥有比其他π跳公差在它“错误”,并希望得到一些其他观点:MATLAB:解包功能
说明
Q = unwrap(P)
通过添加&plusmn倍数校正在矢量P弧度的相位角; 2,当P的连续元件之间的绝对跳转大于或等于的π弧度默认跳跃公差π。如果P是一个矩阵,则解包操作以列为单位。如果P是一个多维数组,则unwrap将在第一个非单一维上运行。
Q = unwrap(P,tol)
使用跳转公差tol而不是默认值π。
有文档的两种可能的解释:
Q = unwrap(P,tol)
通过添加&plusmn倍数校正在矢量P弧度的相位角; P的连续元件之间的2个π当绝对跳转被更大大于或等于tol弧度。如果P是一个矩阵,则解包操作以列为单位。如果P是一个多维数组,则unwrap将在第一个非单一维上运行。实施例:
>> 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
Q = unwrap(P,tol)
通过添加&plusmn倍数校正在矢量P的元素; 2 * TOL当P的连续元件之间的绝对跳转大于或等于TOL。如果P是一个矩阵,则解包操作以列为单位。如果P是一个多维数组,则unwrap将在第一个非单一维上运行。实施例:
>> 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匹配,则对于缓慢变化的输入,即,对于矢量x,其中连续元素变化小于tol = T/2,则解缠可以用作mod的逆。
请注意,此第二种解释比角度更一般,并且可以用环绕周期T解开任何东西。(对于弧度,是否默认为T = 2 π,对于度数为360,对于8位数字是256,对于65536 16位号码等)
所以我的问题是:
是行为#1有可能的用途?哪种解释更有意义?
有趣......我的解释#2的观点是(正如你所提到的)那里真的没有任何特定的与弧度,度数或任何角度的联系,除了环绕时期,默认情况下是2pi,但可以是任何东西(对于度数是360,对于16位整数是65536等)。跳跃宽容应该是环绕期的1/2 ...我不确定为什么你会选择两者之间的不同关系。 – 2010-07-07 16:39:12
我想你可以有两种方法来实现这个功能。无论是特定于弧度(如文档中所述),并且您可以自由选择跳转公差。或者你在1/2环绕时修复跳转容限,并且你将该输入用于任何类型的范围。 – Jonas 2010-07-07 18:28:38
我会为后者投票,但这只是我的承担。我可能最终只是编写自己的函数(这是相当简单的),而不再依赖于Mathworks的正确运行的unwrap()实现。 – 2010-07-07 20:45:16