MATLAB中的FFT的取樣頻率和取樣點怎樣確定

時間 2021-08-11 17:10:49

1樓:小石頭科技

取樣頻率就是準備進行fft變換的時間序列資料的頻率,如資料間隔為0.01s,取樣頻率就為100hz,這是確定的;取樣點則根據時間序列資料長度確定,fft即快速傅立葉變換,取樣點數是2的整數倍,才能實現快速計算,所以如果序列長度為3,取樣長度就設為4,資料會自動補0,如果序列長度為63,取樣長度可設為64,即最接近的2的整數次冪。

2樓:居澤洛谷槐

一.呼叫方法

x=fft(x);

x=fft(x,n);

x=ifft(x);

x=ifft(x,n)

用matlab進行譜分析時注意:

(1)函式fft返回值的資料結構具有對稱性。

例:n=8;

n=0:n-1;

xn=[432

6789

0];xk=fft(xn)→xk

=39.0000

-10.7782

+6.2929i0-

5.0000i

4.7782

-7.7071i

5.0000

4.7782

+7.7071i0+

5.0000i

-10.7782

-6.2929i

xk與xn的維數相同,共有8個元素。xk的第一個數對應於直流分量,即頻率值為0。

(2)做fft分析時,幅值大小與fft選擇的點數有關,但不影響分析結果。在ifft時已經做了處理。要得到真實的振幅值的大小,只要將得到的變換後結果乘以2除以n即可。

二.fft應用舉例

例1:x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t)。取樣頻率fs=100hz,分別繪製n=128、1024點幅頻圖。

clf;

fs=100;n=128;

%取樣頻率和資料點數

n=0:n-1;t=n/fs;

%時間序列

x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);

%訊號y=fft(x,n);

%對訊號進行快速fourier變換

mag=abs(y);

%求得fourier變換後的振幅

f=n*fs/n;

%頻率序列

subplot(2,2,1),plot(f,mag);

%繪出隨頻率變化的振幅

xlabel('頻率/hz');

ylabel('振幅');title('n=128');grid

on;subplot(2,2,2),plot(f(1:n/2),mag(1:n/2));

%繪出nyquist頻率之前隨頻率變化的振幅

xlabel('頻率/hz');

ylabel('振幅');title('n=128');grid

on;%對訊號取樣資料為1024點的處理

fs=100;n=1024;n=0:n-1;t=n/fs;

x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t);

%訊號y=fft(x,n);

%對訊號進行快速fourier變換

mag=abs(y);

%求取fourier變換的振幅

f=n*fs/n;

subplot(2,2,3),plot(f,mag);

%繪出隨頻率變化的振幅

xlabel('頻率/hz');

ylabel('振幅');title('n=1024');grid

on;subplot(2,2,4)

plot(f(1:n/2),mag(1:n/2));

%繪出nyquist頻率之前隨頻率變化的振幅

xlabel('頻率/hz');

ylabel('振幅');title('n=1024');gridon;

採集到離散訊號點,在matlab中進行fft變換時取樣點數怎麼取,直接從採集到的資料裡取點嗎?

3樓:卜項離

取樣點數可以採用n= length(x);來取,x是取樣資料;

取樣頻率fs = 1/ts 即取樣時間的倒數,也就是你說的取樣訊號中兩個資料點的時間間隔的倒數;

取樣頻率一定時,取樣點數越多越好,換種話說就是取樣時間越長越好,這樣fs/n就越小,也就是頻域的頻率解析度越大,fft結果就越準確,最好是2的整數次冪,可以加快fft運算;

當然,實際應用時,由於受記憶體計算等的要求,取樣點數滿足fft計算的一定精度要求就行了,不必太多。

matlab中的fft的取樣頻率和取樣點怎樣確定?

4樓:南瓜蘋果

在matlab中做fft,首先編寫函式,對不同的取樣頻率和取樣點數,計算fft後的頻率序列及其對應的幅值:

function [f amplitude] = yopheefft(samplerate,fft_points)

n = 0:fft_points-1;

t = n/samplerate; %取樣時間序列

f_all = n*samplerate/fft_points; %頻率序列 %構造混有噪聲的週期訊號並取樣

signal = 2*sin(2*pi*10*t)+1*sin(2*pi*20.25*t)+0.2*randn(size(t));   %對訊號進行快速fourier變換,並求振幅

amplitude_all = abs(fft(signal,fft_points))*2/fft_points;

f = f_all(1:fft_points/2);

amplitude = amplitude_all(1:fft_points/2);

擴充套件資料

matlab中fft函式的意義:

fft是離散傅立葉變換的快速演算法,可以將一個訊號變換到頻域。有些訊號在時域上是很難看出什麼特徵的,但是如果變換到頻域之後,就很容易看出特徵了。這就是很多訊號分析採用fft變換的原因。

另外,fft可以將一個訊號的頻譜提取出來,這在頻譜分析方面也是經常用的。

模擬訊號經過adc取樣之後變成數字訊號,可對此數字訊號做fft變換。n個取樣點經過fft之後就可以得到n個點的fft結果。為了方便進行fft運算,通常n取2的整數次冪。

假設取樣頻率為fs,訊號頻率為f,取樣點數為n。則fft之後結果為n點複數,其中每一個點對應著一個頻率點,該點複數的模值為原始訊號在該頻率值下的幅度特性。

具體為:假設原始訊號在某頻率點的幅值為a,則該頻點對應的fft點複數的模值為a的n/2倍。而fft第一點為原始訊號的直流分量,其模值為原始訊號模值的n倍。

對於相位,fft複數的相位即為原始訊號在該頻率點處的相位。

5樓:湯霞姝進越

假設你的訊號是8個點,取樣頻率是100hz。那麼,該訊號的頻率是50hz,那麼頻率軸每個間隔是50/(8-1),設為df那麼,頻率軸是0df2*df3*df4*df也就是說,對於8個點的訊號,你會得到頻率間隔是50/(8-1),可以得到8/2+1個頻率點。也就是說,對於n個點的訊號,你會得到頻率間隔是50/(n-1),可以得到n/2+1個頻率點。

注意,n是2的某次冪

6樓:啟用小號

你的理解也是錯的,取樣頻率,用來確定資料的間隔

,就是每隔取樣頻率倒數,有一個資料點,頻率的間隔是通過取樣頻率和資料點進行確認的,取樣頻率與資料點的相除,資料點的多少2的多少次方和計算方法有關係,你可以複習下快速傅立葉變換。

7樓:匿名使用者

問題1:通常所講的取樣時間間隔與取樣頻率是有倒數關係的,即ts=1/fs;所以你說的fs=1e5是對的。

問題2:matlab中的fft函式的兩種使用方法,都是用一般數字訊號處理教材上所講的基2的cooley-tukey fft演算法,區別是後者指定了fft的點數,我們知道對於基2的fft,當取樣點數為2的冪次時,精度更高,計算速度更快。所以指定2的冪次點數更好。

問題3:取樣點數n自然是看你的取樣頻率了,如果你指的是fft點數,則一般為取樣點數n向上取的最小的2的冪次,當然越大,解析度越高。fft的解析度=(取樣頻率fs)/(fft點數)。

所以相同取樣頻率下,點數越大,解析度越高。

8樓:楊好巨蟹座

一.呼叫方法

x=fft(x);

x=fft(x,n);

x=ifft(x);

x=ifft(x,n)

用matlab進行譜分析時注意:

(1)函式fft返回值的資料結構具有對稱性。

例:n=8;

n=0:n-1;

xn=[4 3 2 6 7 8 9 0];

xk=fft(xn)

→xk =

39.0000 -10.7782 + 6.

2929i 0 - 5.0000i 4.7782 - 7.

7071i 5.0000 4.7782 + 7.

7071i 0 + 5.0000i -10.7782 - 6.

2929i

xk與xn的維數相同,共有8個元素。xk的第一個數對應於直流分量,即頻率值為0。

(2)做fft分析時,幅值大小與fft選擇的點數有關,但不影響分析結果。在ifft時已經做了處理。要得到真實的振幅值的大小,只要將得到的變換後結果乘以2除以n即可。

二.fft應用舉例

例1:x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t)。取樣頻率fs=100hz,分別繪製n=128、1024點幅頻圖。

clf;

fs=100;n=128; %取樣頻率和資料點數

n=0:n-1;t=n/fs; %時間序列

x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %訊號

y=fft(x,n); %對訊號進行快速fourier變換

mag=abs(y); %求得fourier變換後的振幅

f=n*fs/n; %頻率序列

subplot(2,2,1),plot(f,mag); %繪出隨頻率變化的振幅

xlabel('頻率/hz');

ylabel('振幅');title('n=128');grid on;

subplot(2,2,2),plot(f(1:n/2),mag(1:n/2)); %繪出nyquist頻率之前隨頻率變化的振幅

xlabel('頻率/hz');

ylabel('振幅');title('n=128');grid on;

%對訊號取樣資料為1024點的處理

fs=100;n=1024;n=0:n-1;t=n/fs;

x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %訊號

y=fft(x,n); %對訊號進行快速fourier變換

mag=abs(y); %求取fourier變換的振幅

f=n*fs/n;

subplot(2,2,3),plot(f,mag); %繪出隨頻率變化的振幅

xlabel('頻率/hz');

ylabel('振幅');title('n=1024');grid on;

subplot(2,2,4)

plot(f(1:n/2),mag(1:n/2)); %繪出nyquist頻率之前隨頻率變化的振幅

xlabel('頻率/hz');

ylabel('振幅');title('n=1024');grid on;

matlab中使用FFT進行諧波分析的程式

參考 二.fft應用舉例 例1 x 0.5 sin 2 pi 15 t 2 sin 2 pi 40 t 取樣頻率fs 100hz,分別繪製n 128 1024點幅頻圖。clf fs 100 n 128 取樣頻率和資料點數 n 0 n 1 t n fs 時間序列 x 0.5 sin 2 pi 15 t...

matlab的plot命令,matlab中 plot函式全部功能怎麼用

我行我素 畫出圖形後一看就明白了 中括號一般表示區間或資料點,plot 2,1.1 中表示y座標,plot 2,1.1,1.1,2 1.1,1.1,1.1,1.1 中表示x座標和y座標的區間端點和資料值 1 沒有中括號就是表示點的意思,第一個就畫點 2,1.1 2 像樓上說得,中括號是構造矩陣用的,...

matlab中矩陣寫入的問題,matlab中矩陣寫入txt文件的問題

521煙雨曉曉 先新建一個命名tt.txt的文件,在建一個m檔案,把這些copy進去就ok了。a 1 2 3 4 5 b 6 7 8 9 0 fid fopen tt.txt wt i size a j size b m max i 2 j 2 for k 1 m if k i 2 fprintf ...