簡體   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