首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >展开atan与atan2

展开atan与atan2
EN

Stack Overflow用户
提问于 2019-01-28 21:24:59
回答 1查看 1.7K关注 0票数 1

我可以使用atan()atan2()函数在Matlab中提取复数的相位。

atan()以受限于[-pi/2,pi/2]的间隔返回,atan2()以受限于[-pi,pi]的间隔返回。

我想看看是否可以使用unwrap()函数在每种情况下展开提取的阶段,但是unwrap只对通过atan2()提取的阶段有效。

代码语言:javascript
复制
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  

我用每种方法绘制未包装的提取阶段:

代码语言:javascript
复制
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()阶段。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-28 22:01:53

unwrap的第二个参数不是输入数据的周期,而是公差。函数总是在2π间隔的情况下打开数据。也就是说,它希望看到x(i)-x(i+1)大于展开前的公差,展开后的公差更小。对于pi/2的容差,例如,x(i)=0x(i+1)=3,跳转大于公差,但是向x(i+1)添加或减去2*pi并不能改善情况。

一种方法是将输入乘以2,展开后除以2:

代码语言:javascript
复制
unwrap(theta_atan * 2) / 2

然而,总是最好使用atan2来获得一个角度。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54410492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档