在fft matlab中计算相位角

Computing phase angle in fft matlab

我正在尝试计算由我在 Matlab 工作区中构造的合成信号的傅立叶频谱的第二分量在频域中的相位角(在计算 fft 之后)。我确定相位等于 0(如您在代码中所见),但我得到的结果是 pi/2。代码如下:

t = 0:pi / 128:(2 * pi - pi / 128);
V = sin(t);
L = length(V);
n = 2^nextpow2(L);
Y = fft(V, n);
threshold = max(abs(Y))/10000;
Y(abs(Y)<threshold) = 0;
mag = abs(Y/n);
angle = rad2deg(atan2(imag(Y),real(Y)));

我没看出错误在哪里。

您误以为频率对应于 bin 中心频率(且无相位偏移)的真实周期性 正弦波 的相位为零。表示原始序列实数部分的基函数是余弦函数。

要用余弦波表示正弦波,必须减去 pi/2 的相位偏移:

sin(x) = cos(x - pi/2).

因此,bin 2 中的相位(对应于原始序列的频率)为 -pi/2。

(有关更详尽的解释,请参阅 this question on DSP.SE。)