最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

phase函数和angle函数有什么区别

来源:懂视网 责编:小OO 时间:2024-07-26 17:02:03
文档

phase函数和angle函数有什么区别

1.phase 只支持标量和一维(行、列)向量输入,不支持二维或高维矩阵输入。angle 可以支持标量或任意维数矩阵输入。2.对于向量输入,phase 会对输出结果做判断,如果相邻两个输出角度的差的绝对值超过 3.5,phase 会对其重新处理,确保相邻两个角度差值的绝对值永远不超过3.5。而 angle 函数对每个数据独立求其辐角,不会因为相邻角度差超出某个数值而做特殊处理。所以,从这个意义上讲,angle 函数是我们通常需要使用的求角度的函数,而 phase 的特殊处理,会导致得出与angle不同的结果。下面举例说明。Example 1: 1维向量。g = [-1-1i -1+1i];% 对应角度为 -3*pi/4 (=-2.3562) 和 3*pi/4 (=-2.3562)。
推荐度:
导读1.phase 只支持标量和一维(行、列)向量输入,不支持二维或高维矩阵输入。angle 可以支持标量或任意维数矩阵输入。2.对于向量输入,phase 会对输出结果做判断,如果相邻两个输出角度的差的绝对值超过 3.5,phase 会对其重新处理,确保相邻两个角度差值的绝对值永远不超过3.5。而 angle 函数对每个数据独立求其辐角,不会因为相邻角度差超出某个数值而做特殊处理。所以,从这个意义上讲,angle 函数是我们通常需要使用的求角度的函数,而 phase 的特殊处理,会导致得出与angle不同的结果。下面举例说明。Example 1: 1维向量。g = [-1-1i -1+1i];% 对应角度为 -3*pi/4 (=-2.3562) 和 3*pi/4 (=-2.3562)。

hase 和 angle 在输入为单个标量数据时,没有差别,二者都是用 atan2 函数来求输入数据的四象限辐角。但是对于向量或矩阵数据输入时,二者差别非常大。

1. phase 只支持标量和一维(行、列)向量输入,不支持二维或高维矩阵输入。angle 可以支持标量或任意维数矩阵输入

2. 对于向量输入,phase 会对输出结果做判断,如果相邻两个输出角度的差的绝对值超过 3.5,phase 会对其重新处理,确保相邻两个角度差值的绝对值永远不超过3.5。而 angle 函数对每个数据独立求其辐角,不会因为相邻角度差超出某个数值而做特殊处理。所以,从这个意义上讲,angle 函数是我们通常需要使用的求角度的函数,而 phase 的特殊处理,会导致得出与angle不同的结果。

下面举例说明。

Example 1: 1维向量
g = [-1-1i -1+1i];% 对应角度为 -3*pi/4 (=-2.3562) 和 3*pi/4 (=-2.3562)

ang = angle(g)

pha = phase(g)
复制代码
输出结果是:
ang =
-2.35622.3562

pha =
-2.3562 -3.9270
很显然,由于 2.3562与-2.3562的差值的绝对值超过了3.5,phase函数的处理使得得到的结果并非我们想要的,而angle函数是直接对每个输入数据求角度,不会考虑相邻两个角度的差值大小。所以,angle 求得的是我们需要的

Example 2:2维矩阵
g = [-1-1i -1+1i; -1-1i -1+1i];

ang = angle(g)

pha = phase(g)
复制代码
输出结果是:
ang =
-2.35622.3562
-2.35622.3562

Error using phase (line 17)
PHASE applies only to row or column vectors.
For matrices you have to decide along which dimension the
phase should be continuous.
从这个例子可以看出,对于矩阵输入,只有angle函数能正常工作,phase函数无法支持矩阵输入。

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
综上所述,如果我们对输出角度的差值没有限制,而只是单纯的求输入数据的辐角,我们应该用 angle 函数。所以,对于楼主的代码,最好将 phase 换成 angle 函数。

最后,建议楼主用 edit angle 和 edit phase 分别打开angle和phase两个函数,看看其内部具体实现,二者的差别就一目了然了。下面给出 angle 和 phase 函数的内部源代码,楼主可以自行比较:

% angle.m
function p = angle(h)

%ANGLEPhase angle.

% ANGLE(H) returns the phase angles, in radians, of a matrix with

% complex elements.

%

% Class support for input X:

%float: double, single

%

% See also ABS, UNWRAP.

% Copyright 1984-2010 The MathWorks, Inc.

% $Revision: 5.7.4.2 $$Date: 2010/04/21 21:31:19 $

p = atan2(imag(h), real(h));
复制代码
% phase.m
function PHI=phase(G)

%PHASEComputes the phase of a complex vector

%

% PHI=phase(G)

%

% G is a complex-valued row vector and PHI is returned as its

% phase (in radians), with an effort made to keep it continuous

% over the pi-borders.

% L. Ljung 10-2-86

% Copyright 1986-2004 The MathWorks, Inc.

% $Revision: 1.5.4.2 $$Date: 2004/07/31 23:24:49 $

%PHI = unwrap(angle(G));

[nr,nc] = size(G);

if min(nr,nc) > 1

error(sprintf(['PHASE applies only to row or column vectors.'...

'\nFor matrices you have to decide along which dimension the'...

'\nphase should be continuous.']))

end

if nr>nc

G = G.';

end

PHI=atan2(imag(G),real(G));

N=length(PHI);

DF=PHI(1:N-1)-PHI(2:N);

I=find(abs(DF)>3.5);

for i=I

if i~=0,

PHI=PHI+2*pi*sign(DF(i))*[zeros(1,i) ones(1,N-i)];

end

end

if nr>nc

PHI = PHI.';

end
复制代码
http://www.ilovematlab.cn/thread-259049-1-1.html

文档

phase函数和angle函数有什么区别

1.phase 只支持标量和一维(行、列)向量输入,不支持二维或高维矩阵输入。angle 可以支持标量或任意维数矩阵输入。2.对于向量输入,phase 会对输出结果做判断,如果相邻两个输出角度的差的绝对值超过 3.5,phase 会对其重新处理,确保相邻两个角度差值的绝对值永远不超过3.5。而 angle 函数对每个数据独立求其辐角,不会因为相邻角度差超出某个数值而做特殊处理。所以,从这个意义上讲,angle 函数是我们通常需要使用的求角度的函数,而 phase 的特殊处理,会导致得出与angle不同的结果。下面举例说明。Example 1: 1维向量。g = [-1-1i -1+1i];% 对应角度为 -3*pi/4 (=-2.3562) 和 3*pi/4 (=-2.3562)。
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top