我可以使用atan()或atan2()函数在Matlab中提取复数的相位。
atan()以受限于[-pi/2,pi/2]的间隔返回,atan2()以受限于[-pi,pi]的间隔返回。
我想看看是否可以使用unwrap()函数在每种情况下展开提取的阶段,但是unwrap只对通过atan2()提取的阶段有效。
R = 1; % Magnitude
theta = linspace(0,6*pi,100); % (radians) Angle array
theta_atan = zeros(1,length(theta)); % Prellocate for calculation
theta_atan2 = zeros(1,length(theta)); % Prellocate for calculation
X = zeros(1,length(theta)); %Prelloc.
Y = zeros(1,length(theta)); %Prelloc.
for i = 1:length(theta)
X(i) = R*cos(theta(i)); % Real part
Y(i) = R*sin(theta(i)); % Imaginary part
theta_atan(i) = atan(Y(i)/X(i));
theta_atan2(i) = atan2(Y(i),X(i));
end 我用每种方法绘制未包装的提取阶段:
figure(666)
plot(theta,unwrap(theta_atan));
hold on
plot(theta,unwrap(theta_atan2));
legend('theta atan','theta atan2')
xlabel('input phase')
ylabel('extracted phase')但是,如您所见,展开仅在atan2()情况下是有效的。即使我使用unwrap(theta_atan, pi/2) (在本例中,展开是基于pi/2的增量,而不是默认的pi),我也无法正确地展开atan()阶段。

发布于 2019-01-28 22:01:53
unwrap的第二个参数不是输入数据的周期,而是公差。函数总是在2π间隔的情况下打开数据。也就是说,它希望看到x(i)-x(i+1)大于展开前的公差,展开后的公差更小。对于pi/2的容差,例如,x(i)=0和x(i+1)=3,跳转大于公差,但是向x(i+1)添加或减去2*pi并不能改善情况。
一种方法是将输入乘以2,展开后除以2:
unwrap(theta_atan * 2) / 2然而,总是最好使用atan2来获得一个角度。
https://stackoverflow.com/questions/54410492
复制相似问题