[英]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.