繁体   English   中英

在MATLAB上通过FFT查找相位

[英]Finding the phase from FFT on MATLAB

我知道我的信号的基本频率,因此我也知道谐波的其他频率,我使用FFT命令来计算前5个谐波(我知道它们的频率)。 我是否可以使用此可用信息来找到阶段?

请注意,我不能确定我的信号只有一个周期,因此需要通过已知的频率值来计算相位。


代码似乎可以正常工作:

 L = length(te(1,:));               % Length of signal
 x = te(1,:); 
 NFFT = 2^nextpow2(L);              % Next power of 2 from length of y
 Y = fft(x,NFFT)/L;
 f = linspace(1,5,5);   
 Y(1) = [];                          % First Value is a sum of all harmonics
 figure(1);
 bar(f,2*abs(Y(1:5)), 'red') 
 title('Transmission Error Harmonics')
 xlabel('Harmonic')
 ylabel('|Y(f)|')
 figure(2);
 bar(f,(angle(Y(1:5))))
 title('Transmission Error Phase')
 xlabel('Harminic')
 ylabel('Angle (radians)')

通常,您的傅立叶变换是复杂的。 因此,如果您想知道某个频率的相位,可以使用tan(ImaginaryPart(Sample)/ RealPart(Sample))进行计算。 这可以通过使用angle()完成。 就你而言

1-计算fft()

2-为FFT的所有样本或您感兴趣的样本(即基频/谐波的样本)计算angle()

编辑:一个例子是

t = [0 0 0 1 0 0 0];
f = fft(t);
phase = angle(f);
phase = angle(f(3)); % If you are interested in the phase of only one frequency

EDIT2:您不应该将实值频谱[基本上是abs(fft())]与复杂的傅立叶变换[只是fft()]混合起来。 但是,正如您所写的那样,您自己计算了fft,我想您具有复数的“原始” FFT。

请注意,如果您的基本频率在fft长度上不是完全周期性的,则由于fft两端之间的不连续性(或由于矩形窗卷积),结果相位(atan2(xi,xr))将在相邻仓之间翻转符号),使相位插值变得有趣。 因此,您可能希望通过执行fftshift(通过fft结果中的前/后/移位/旋转元素或后置,通过翻转符号)来将相位估计重新引用到fft的中心,从而使相位插值看起来更加合理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM