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

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]。
我知道我可以有一个循环来消除这种不连续性但我想知道是否有更优雅的方式。

最佳答案

你应该研究一维相位展开在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

10-07 23:43