離散傅利葉變換dft的計算公式如下,fft為dft的一種快速演算法。
% n = 64時
%***************
fs = 100; %取樣頻率
n = 64; %資料點數
n = 0 : n-1;
% 抽樣間隔ts=1/fs,所以t=n*ts=n/fs為時間序列
t = n / fs; %時間序列
x = 0.5*sin(2*pi*15*t) + 2*sin(2*pi*40*t);
y = fft(x, n); %對訊號進行64點快速傅利葉變換
mag1 = abs(y); %求傅利葉變換後的振幅
% 在fs(100hz)內做n(64)點fft,頻率解析度為fs/n=1.5625
f = n * fs / n; %頻率序列
subplot(2,2,1);
plot(f, mag1,'linewidth',1); %繪製隨頻率變化的振幅
xlabel('頻率/hz');
ylabel('振幅');
title('n=64');
subplot(2,2,2);
plot(f(1:n/2), mag1(1:n/2)); %繪製奈奎斯特頻率之間隨頻率變化的振幅
xlabel('頻率/hz');
ylabel('振幅');
title('n=64');
%***************
% n = 1024時
%***************
fs = 100; %取樣頻率
n = 1024; %資料點數
n = 0 : n-1;
% 抽樣間隔ts=1/fs,所以t=n*ts=n/fs為時間序列
t = n / fs; %時間序列
x = 0.5*sin(2*pi*15*t) + 2*sin(2*pi*40*t);
y = fft(x, n); %對訊號進行1024點快速傅利葉變換
mag2 = abs(y); %求傅利葉變換後的振幅
% 在fs(100hz)內做n(1024)點fft,頻率解析度為fs/n=0.097656
f = n * fs / n; %頻率序列
subplot(2,2,3);
plot(f, mag2,'linewidth',1); %繪製隨頻率變化的振幅
xlabel('頻率/hz');
ylabel('振幅');
title('n=1024');
subplot(2,2,4);
plot(f(1:n/2), mag2(1:n/2)); %繪製奈奎斯特頻率之前隨頻率變化的振幅
xlabel('頻率/hz');
ylabel('振幅');
fft結果具有對稱性,通常我們只用前半部分的結果,也就是小於取樣頻率一半的結果。同時,只有在取樣頻率一半以內、具有一定幅值的訊號頻率才是真正的訊號頻率。
原訊號為
0.5 si
n(2∗
pi∗15
∗t)+
2sin
(2∗p
i∗40∗
t)0.5sin(2*pi*15*t) + 2sin(2*pi*40*t)
0.5sin
(2∗p
i∗15
∗t)+
2sin
(2∗p
i∗40
∗t)f1=15hz,f2=40hz,最高頻率fm為40hz,根據奈奎斯特抽樣定理,抽樣頻率fs必須大於等於原訊號最高頻率的2倍,即 fs>=2fm。本例中,fs取100hz。
由上圖可以看出,n越大,頻譜就越逼真。且只有在f1=15hz,f2=40hz時,其模值才會出現峰值,而其他頻率點上模值接近於0。
我們分別來檢視n=64和n=128時15hz和40hz處的模值。頻率f = n * fs / n,所以n = f * n / fs。
n = 64,f1 = 15hz時n = 15 * 64 /100 =9.6,向上取整加1為11
n = 64,f2 = 40hz時n = 40 * 64 /100 =25.6,向上取整加1為27
n = 1024,f1 = 15hz時n = 15 * 1024 /100 =153.6,向上取整加1為155
n = 1024,f2 = 40hz時n = 40 * 1024 /100 =409.6,向上取整加1為411
另外,細心的讀者會發現(圖中有標註)n=1024時頻率比n=64時更接近50hz。這是由於n=64時的頻率解析度為fs / n = 100 / 64 = 1.5625,而n = 1024時的頻率解析度為fs / n = 100 / 1024 = 0.097656,n = 1024時的頻率解析度明顯高於n = 64時的頻率解析度。
MATLAB中FFT的分析總結
1 取樣頻率和取樣週期的設定 取樣頻率的設定應滿足奈奎斯特準則,當取樣頻率設定之後求倒數即為取樣週期。如 fs 1000 sampling frequency 取樣頻率 t 1 fs sampling period 取樣週期 2 取樣點數的確定 若想要規定取樣點數,則採用如下方式 l 1000 le...
基於matlab的fft變換中引數的設定
簡單總結 n為取樣點數,經過fft之後,就可以得到n個點的fft結果。為了方便進行fft運算,通常n取2的整數次方。假設取樣頻率為fs,訊號頻率f,取樣點數為n。那麼fft之後結果就是乙個為n點的複數。每乙個點就對應著乙個頻率點。這個點的模值,就是該頻率值下的 幅度特性。具體跟原始訊號的幅度有什麼關...
FFT和Matlab中操作FFT
fft 離散傅氏變換的快速演算法 fft fast fourier transformation 是離散傅氏變換 dft 的快速演算法。即快速傅氏變換。輸入n 1個數,輸出n 1個數 意義不同 輸入是時域,輸出為頻域 輸出是 每個取樣點對應的振幅或者能量值 輸出值的第乙個對應直流分量的振幅,第二個值...