问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-23 09:36

我来回答

5个回答

热心网友 时间:2023-10-05 01:47

phase 和 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.3562 2.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.3562 2.3562
-2.3562 2.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)
%ANGLE Phase 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)
%PHASE Computes 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

热心网友 时间:2023-10-05 01:48

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.3562 2.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.3562 2.3562
-2.3562 2.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)

%ANGLE Phase 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)

%PHASE Computes 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

热心网友 时间:2023-10-05 01:48

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

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

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

热心网友 时间:2023-10-05 01:49

这是在MATLAB论坛看到的答案:
phase 和 angle 在输入为单个标量数据时,没有差别,二者都是用 atan2 函数来求输入数据的四象限辐角。但是对于向量或矩阵数据输入时,二者差别非常大。
1. phase 只支持标量和一维(行、列)向量输入,不支持二维或高维矩阵输入。angle 可以支持标量或任意维数矩阵输入
2. 对于向量输入,phase 会对输出结果做判断,如果相邻两个输出角度的差的绝对值超过 函数中定义的数值,phase 会对其重新处理,确保相邻两个角度差值的绝对值永远不超过函数中定义的数值。而 angle 函数对每个数据独立求其辐角,不会因为相邻角度差超出某个数值而做特殊处理。所以,从这个意义上讲,angle 函数是我们通常需要使用的求角度的函数,而 phase 的特殊处理,会导致得出与angle不同的结果。

热心网友 时间:2023-10-05 01:50

一、区别:
phase 和 angle 在输入为单个标量数据时,没有差别,二者都是用 atan2 函数来求输入数据的四象限辐角。但是对于向量或矩阵数据输入时,二者差别非常大:
1、 phase 只支持标量和一维(行、列)向量输入,不支持二维或高维矩阵输入。angle 可以支持标量或任意维数矩阵输入。
2、对于向量输入,phase 会对输出结果做判断,如果相邻两个输出角度的差的绝对值超过 3.5,phase 会对其重新处理,确保相邻两个角度差值的绝对值永远不超过3.5。而 angle 函数对每个数据独立求其辐角,不会因为相邻角度差超出某个数值而做特殊处理。所以,从这个意义上讲,angle 函数是我们通常需要使用的求角度的函数,而 phase 的特殊处理,会导致得出与angle不同的结果。
二、下面举例说明。

1、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.3562 2.3562
pha =-2.3562 -3.9270
很显然,由于 2.3562与-2.3562的差值的绝对值超过了3.5,phase函数的处理使得得到的结果并非我们想要的,而angle函数是直接对每个输入数据求角度,不会考虑相邻两个角度的差值大小。所以,angle 求得的是我们需要的。
2、Example 2:2维矩阵
g = [-1-1i孩虎粉臼莠铰疯歇弗忙 -1+1i; -1-1i -1+1i];
ang = angle(g)
pha = phase(g)
复制代码
输出结果是:
ang =-2.3562 2.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 函数。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? matlab中图像旋转 MATLAB 中angle的计算过程问题 在matlab中的角度如何表示 matlab中real(), imag(), abs()和angle()函数要怎样使用? 在matlab中,角度用什么字母表示 matlab中phase与angle的区别 matlab中angle是什么函数 matlab 中angle的用法 matlab中angle是什么意思 如何查询自己的身份证有没有办理贷款? 熟肉再次食用时,怎样加热才能食用? 索迪亚之风的物品合成 三国之谁主天下武器精炼攻略 有什么好看的日本动漫?最好人物画得精致一点。剧情不要太老套,但不要血腥,最好讲的是校园故事。 天书奇谈精致狼抓铠甲怎么来的 谁有《习蛮俏御医》里张哲三的精典台词 画国画用狼毫的还是用羊毛的? 要一段(精致)激励员工的话! 请推荐几部画面精致的动漫 红斑狼疮能不能喝燕窝 matlab中的angle函数是不是不能用在符号表达式上 体检的条形码编号丢了怎么查? Matlab怎样提取复数数组的角度 公司发了张体检卡,不小心弄丢了,怎么办啊?能补办吗? 关于matlab求信号相位的问题 我的体检报告ID号丢失了怎么查询 matlab如何求复数的相位角 我体检过了,单子丢了,可以用身份证拿吗 Matlab怎么样将图像旋转一定的度数? 体检号丢了,用身份证能不能查体检结果? 平安好医生体检卡丢了怎么办? matlab中求信号相位,有没有什么好的方法 体检单丢了怎么办? 用MATLAB处理一个信号,求其相位 我把单位发的体检卡弄丢了。。。怎么办啊。我到医院发现没带单位发的体检卡。。那个门诊部说无所谓,到... matlab里的unwrap的命令用法 体检结果单丢了,能补办吗? 去爱康国宾体检忘了带身份证怎么办 美年大健康的体检卡丢了能补办不 高考体检报告单丢了 怎么办!!!