2015-03-03 530 views
1

我正在处理Matlab中的复数,并且我的角度有一些问题。防止Matlab将复数中的相角缠绕到0-2pi

我有角度的矢量中,Ph然后我想构造复杂数的向量C作为:

C=exp(j*Ph). 

的问题是,博士包含负相,因为它具有奇对称,以便它可以是进一步用于使用IFFT合成信号。这个负相位在矢量C中被包裹到0-2pi,失去它们的奇对称性。

有什么办法可以阻止Matlab环绕角度?

做这样的事情可能是不可能的,因为我们知道数学上-30º的阶段与330º的阶段相同。但我想知道是否包装阶段正在破坏他们想要的奇怪的对称。

我附上一张照片说明我的问题,谢谢!

enter image description here

+0

我不认为相位折返是这里的问题 - 你发送给IFFT函数值在直角坐标,所以角被绘制阶段(其中我在文档中找不到 - 角度是正常的选择)实际上并不是函数的输入。只要输入是共轭对称的,它应该没问题,如果你的实数是偶数并且你的虚数是奇对称的,那就是真的。我不确定你的描述和情节是否正确 - 你所描述的与我所看到的并不完全一致,但我也可能会误解某些东西...... – Katie 2015-03-03 16:16:49

+0

C的实际部分是偶对称的,虚部是奇对称的,对不起,我改变了上面的条款,现在编辑。我认为这里的问题是使用“freqz”功能。如果我将Y的相位作为角度(fft(Y)),我将得到与存储在Ph矢量中相同的相位。谢谢! – JavaRar 2015-03-03 16:27:54

回答

1

如果你有映射工具箱,有一个wrapToPi功能,将你想要做什么。

没有它,你需要实现自己:

function [ lambdaWrapped ] = myWrapToPi(lambda) 
    lambdaWrapped = lambda - floor(lambda/(2*pi)) * 2*pi; 
    lambdaWrapped(lambdaWrapped > pi) = lambdaWrapped(lambdaWrapped > pi) - 2*pi; 
end 

第一行包一切从0-2pi,和下一个需要是比PI更大的值,并将其移动到-pi到0范围。

phase = linspace(0, 2*pi, 100); 
plot(phase); 
plot(myWrapToPi(phase)); 

Original plot Wrapped plot

+0

谢谢凯蒂,但它不能解决我的问题。如果我想定义-pi和pi之间的奇对称性,你建议的就好了。我真正想要的是构造一个在其相位上具有奇对称性的复数,即phase(k)= - phase(N-k),其中N是元素的数量。但它似乎是不可能的,因为Matlab将任何负面的阶段包装到0-2pi – JavaRar 2015-03-03 14:12:09

+0

@JavaRar,我认为你的评论的结尾被切断了。我想你需要扩展你的问题来澄清一下 - 我不确定你从哪里得到0-2pi的情节。用于获得复数相位角的'angle'函数将-pi转换为pi。 – Katie 2015-03-03 14:24:36

+0

您编辑的评论刚刚通过。我认为缠绕 - pi会导致阶段中任何奇怪的对称出现,就像你想要的一样,尽管我很困惑为什么除了在绘制对称图形或制作对称验证程序时使对称性明显之外,还需要它。就像你在你的问题中所说的那样,-30度和330度在数学上是相同的,因为你正在使用圆形单位。当你做IFFT时不应该引起任何问题。您是否遇到与您认为相位包装有关的特定问题? – Katie 2015-03-03 14:31:54