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

2021-10-12 01:56:02 字數 1687 閱讀 7097

傅利葉變換是一種線性的積分變換, 它提供了一種可以將訊號從時間幅值座標變換到頻率幅值座標的方法,其具體的定義如下:

上式即為傅利葉變換的表示式。

傅利葉變換將訊號分解為若干個簡諧訊號疊加的形式,通過傅利葉變換畫出頻譜圖之後就可以找到訊號中包含的頻率成分。

matlab中自帶的fft()函式可以幫助我們完成傅利葉變換的計算過程,不過直接呼叫fft(),畫圖之後發現橫縱座標的值和我們想的不一樣,我們對下面這樣的乙個訊號做fft

fs=1000; %取樣率

n = 1; % 週期數

t=n; % 訊號時長 s

n=0:1/fs:t-1/fs; % 取樣時間點,剛好採n 個週期

len = length(n); % 訊號點數

y = sin(2*pi*20*n)+1.5*sin(2*pi*33*n)+0.6*sin(2*pi*50*n); % 採集到的離散訊號

plot(n,y)

title('訊號y')

畫出上面表示式y的影象

直接呼叫fft畫出圖是這樣的

y = fft(y);

y = abs(y);

plot(y(1:len/2));

title('直接呼叫fft')

從y的表示式可以看出,訊號的包含3個頻率成分,20hz、33hz、50hz,其對應的幅值為1、1.5、0.6,但是從上面的圖我們看不出這些資訊,因此需要對變換之後的訊號做一定的處理。

呼叫下面的程式

myfft(y,fs);

function [f,y] = myfft(data,fs,is_plot)

if nargin < 3

is_plot = true;

endx=data;

n = length(x);

df=fs/(n-1);%解析度

f=(0:n-1)*df;%其中每點的頻率

y=fft(x(1:n))/n*2;%真實的幅值

if is_plot

g = figure;

figure(g);

plot(f(1:n/2),abs(y(1:n/2)));

axis normal;

title('fft頻譜','fontname','宋體');

xlabel('頻率(hz)','fontname','宋體');

ylabel('幅值(m/s^2)','fontname','宋體');

endend

得到的如下,從這張圖中我們就可以看出原始訊號的頻率和每個頻率對應的幅值。

Matlab做快速傅利葉變換

快速傅利葉變換 fast fourier transform 是訊號處理與資料分析領域裡最重要的演算法之一。傅利葉變換在物理學 數論 組合數學 訊號處理 概率 統計 密碼學 聲學 光學等領域都有著廣泛的應用。那麼如何用matlab實現快速傅利葉變換呢?直接上 tp 0 2048 時域資料點數n yt...

快速傅利葉變換 及MATLAB函式

快速傅利葉變換實用程式 include include include define pi 3.1415926 typedef struct complexnumber cnumber void quickfft cnumber p,int n,int k,cnumber f,int l,int i...

matlab 傅利葉變換

兩幅影象傅利葉變換後相加 f1 imread rice.tif 讀圖一f2 imread circles.tif 讀圖二f1 fft2 double f1 對圖一進行傅利葉變換 f2 fft2 double f2 對圖二進行傅利葉變換 f f1 f2 兩幅圖在頻率域融合 f ifft2 f 對f 反...