matlab關於fft的應用(一)

2021-08-17 05:08:17 字數 1630 閱讀 3243

在做功率譜分析的時候,週期圖法會用到fft()。

fft()是matlab對訊號做頻譜分析的乙個函式。

語法:y=fft(x);

在實際的處理當中,首先是對資料進行取樣,此時就需要有取樣率fs,那麼取樣時間t=1/fs。因此資料就可以根據y=f(nt)進行取樣。所以做fft時,就會用到如下取樣**:

f0 = 100;

fs = 500;

ts = 1/fs;

n=1:1:1000;

y = sin(2*pi*f0*n*ts);

用y模擬出資料。

然後對y做fft。

plot(n,y)

y_fft=fft(y);

p2_y_fft =abs(y_fft/n);

p1_y_fft = p2_y_fft(1:n/2+1);

p1_y_fft(2:end-1) = 2*p1_y_fft(2:end-1)

f = fs*(0:n/2)/n;

figure

plot(f,p1_y_fft)

xlabel('f (hz)')

ylabel('|p1(f)|')

對上述**的解釋:

一、雙邊譜的幅度

fft()方法得到的是乙個雙邊譜,並且所得到的幅度與真實值相差1/n,n是做fft的數量。所以有如下**:

p2_y_fft =abs(y_fft/n);
二、單邊譜的幅度

實際上,雙邊譜是由單邊譜除以2所獲得頻譜,然後正負對稱頻率疊加到一張,因此零頻率就沒有除以2,所以有如下**:

p1_y_fft = p2_y_fft(1:n/2+1);

p1_y_fft(2:end-1) = 2*p1_y_fft(2:end-1)

三、關於幅度所對應的頻率計算

fs/n稱為頻率解析度,但是實際上稱為步長會更好。因為它並不是真正的頻率解析度。影響頻率解析度的是取樣的時間長度。因為是幅度是對稱的。所以取一般。

f = fs*(0:n/2)/n;
四。matlab**

clear all

f0 = 100;

fs = 500;

ts = 1/fs;

n=1:1:1000;

n = length(n);

y = sin(2*pi*f0*n*ts);

plot(n,y)

y_fft=fft(y);

p2_y_fft =abs(y_fft/n);

p1_y_fft = p2_y_fft(1:n/2+1);

p1_y_fft(2:end-1) = 2*p1_y_fft(2:end-1)

f = fs*(0:n/2)/n;

figure

plot(f,p1_y_fft)

xlabel('f (hz)')

ylabel('|p1(f)|')

五、執行結果

MATLAB中快速傅利葉變換fft的應用

傅利葉變換是一種線性的積分變換,它提供了一種可以將訊號從時間幅值座標變換到頻率幅值座標的方法,其具體的定義如下 上式即為傅利葉變換的表示式。傅利葉變換將訊號分解為若干個簡諧訊號疊加的形式,通過傅利葉變換畫出頻譜圖之後就可以找到訊號中包含的頻率成分。matlab中自帶的fft 函式可以幫助我們完成傅利...

基於matlab的FFT分析

離散傅利葉變換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...

matlab的fft譜振幅

對應的是真實的單邊譜的振幅,這裡的真實值指的是訊號的幅度 如果除以n,則對應雙邊譜的振幅。其實,直接傅利葉變換對應的積分什麼也不用除,當然抽樣定理 要乘以抽樣的週期才是對應原函式的積分值。雙邊的幅度譜除以了取樣點數n,0.01頻率真實的譜分量為2 pi,下圖最高的為 2 pi 2,設定的引數 100...