基於matlab的FFT分析

2021-09-29 08:41:44 字數 2869 閱讀 5859

離散傅利葉變換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個數 意義不同 輸入是時域,輸出為頻域 輸出是 每個取樣點對應的振幅或者能量值 輸出值的第乙個對應直流分量的振幅,第二個值...