2013-03-05 28 views
0

我有一個100赫茲的頻率波(它是一組數據)。我想繪製幅度和相角相對於頻率。 這是我做的,但我的振幅顯示在錯誤的頻率,我錯過了什麼?現在我需要幫助設置正確的頻率矢量

given x=[....] set of data representing wave of frequency = 100 Hz, of length 1500. 
first: Nfft = 2^nextpow2(length(x)); 
second: Fs = 1000; (that is 10 times my frequency of 100, is that correct?) 
third: get fft : xdft = fft(x,Nfft); 
forth: get amplitude: amp = abs(xdft); 
fifth: get phase : ang = unwrap(angle(xdft)); 

我的主要問題是要正確設置頻率向量,這是我做的

f_fold = Fs/2; % folding frequency = max frequency of FFT (Hz) 
T = Nfft/Fs % total sample time (s) 
del_f = 1/T; % (Hz) 
f_v = [0:del_f:f_fold]'; % frequency (Hz) 

我也試過MATLAB的建議: f_v = FS *表示(0:NFFT-1)/Nfft

但我的振幅總是顯示錯誤的頻率。我能做些什麼來解決這個問題? 謝謝

回答

3

首先,FS(您的採樣頻率)不是任意的。如果您在時域中給出一組數據,那麼該數據的採樣頻率已經確定。您可以通過上採樣(在現有數據點之間插值)或較低的採樣頻率(下采樣)通過刪除數據點來獲得更高的採樣頻率。

其次,當你在Matlab行向量的FFT,你回來

[positive frequency data, negative frequency data] 

功能fftshift可以用來把這個更加「可視」格式。

fftshift(fft(x)) 

將返回

[negative frequency data, positive frequency data] 

沒有你的數據集,我不能提供爲什麼你的振幅不排隊(雖然我懷疑它與您選擇的做一個精確解採樣頻率)。但是,這裏是一個說明這些概念的例子。

fs = 500; % 500 Hz sampling frequency: 500 > 2*100 => satifies Nyquist 
t = 0:1/fs:10; % 10 seconds of data sampled at fs 
y = sin(2*pi*100.*t) + sin(2*pi*25.*t); % Two sinusoids at 25 Hz and 100 Hz 
Y=fftshift(fft(y)); 
f=linspace(-fs/2, fs/2, length(Y)); 
plot(f, abs(Y)); 

你應該有四個幅度尖峯-100,-25,25和100

這是類似於你的代碼多一點的另一個例子。

fs = 500; % 500 Hz sampling frequency: 500 > 2*100 => satifies Nyquist 
t = 0:1/fs:10; % 10 seconds of data sampled at fs 
y = sin(2*pi*100.*t) + sin(2*pi*25.*t); % Two sinusoids at 25 Hz and 100 Hz 
NFFT = 2^nextpow2(y); %8192 
Y=fft(y, NFFT); 
delta_f = fs/(NFFT-1); 
f=0:delta_f:fs/2; 
plot(f, abs(Y(1:length(f))); 
+0

謝謝pax,我會研究一下。 – 2013-03-05 17:03:51