防止Matlab以复数形式将相位角包裹到0-2pi

时间:2015-03-03 11:04:34

标签: matlab signal-processing fft ifft phase

我正在处理Matlab中的复数,我的角度有些问题。

我有一个角度矢量,Ph。然后我想构造一个复数的矢量C:

C=exp(j*Ph). 

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

有什么方法可以阻止Matlab包装角度吗?

可能无法做到这一点,因为我们知道在数学上-30º的相位与330º的相位相同。但我想知道包裹相是否正在破坏他们想要的奇怪对称性。

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

enter image description here

1 个答案:

答案 0 :(得分:1)

如果您有Mapping Toolbox,那么有一个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