3

假设我想绘制一个相位阵列

ph = [1, 40, 80, 179, -173, -150, -90, -40, -3, 3] on an X-Y plot.

[179, -173] 之间的跳跃是如此可怕,以至于我使用 mod(ph+360, 360) 来摆脱它。然而,这使得 [-3, 3] 变为 [357,3]。

我知道我可以有一个循环来消除这种类型的所有不连续性。但我想知道是否有更优雅的方式。

4

2 回答 2

6

您应该研究一维相位展开。在 Matlab 中有unwrap函数和 Python 中的类似函数numpy.unwrap用于弧度参数。在 Matlab 中:

ph = [1, 40, 80, 179, -173, -150, -90, -40, -3, 3];
ph2 = unwrap(ph*pi/180)*180/pi

返回:

ans =

  Columns 1 through 7

    1.0000   40.0000   80.0000  179.0000  187.0000  210.0000  270.0000

  Columns 8 through 10

  320.0000  357.0000  363.0000

如果您想查看代码或者如果您确实需要特定于学位的版本,edit unwrap请在命令窗口中输入。这是向量输入的简化版本(请参阅unwrap每行的详细注释):

function p = unwrap_deg(p)
m = length(p);
dp = diff(p,1);
dps = mod(dp+180,360)-180;
dps(dps==-180 & dp>0) = 180;
dp_corr = dps-dp;
dp_corr(abs(dp)<180) = 0;
p(2:m) = p(2:m)+cumsum(dp_corr);

然后

ph = [1, 40, 80, 179, -173, -150, -90, -40, -3, 3];
ph2 = unwrap_deg(ph)

返回

ans =

     1    40    80   179   187   210   270   320   357   363
于 2013-10-18T16:43:55.860 回答
1

您可以将数据表示为quaternions,这基本上是一种在三维空间中表示坐标加上旋转的紧凑方式。四元数最酷的地方在于它们避免了角度不连续。

您可以在这里看到使用这些的优势,大约是页面下方的 1/4。您的旋转角度始终[-1, 1]通过操作映射到区间q4 = cos(theta / 2)。这可以帮助您无间断地表示您的数据。

于 2013-10-18T16:59:25.207 回答