matlab進行傅利葉變換fft和shiftfft

2021-08-28 07:28:51 字數 3249 閱讀 6756

模擬訊號進行奈奎斯特取樣後成為離散的數碼訊號,時域分析不太方便,通常要進行頻域變換更好的分析訊號,matlab中的fft和shiftfft兩個函式可以快速的幫助我們進行頻譜分析。兩個函式存在一些差別。

由奈奎斯特取樣定理知,要使訊號無失真的還原,頻譜不出現混疊,取樣頻率必須是訊號(基帶訊號)最高頻率的兩倍。這裡設訊號頻率f=100hz,取樣頻率fs=500hz,取樣點n=8192。fs/n是頻譜解析度,就是頻譜中兩根譜線的間距,理論上n越大,頻譜越好,但是硬體實現要求高,fft蝶形運算的開銷和時間都會增加,這裡就不討論了。fft(x)運算後得到的是n的結果對應[0,fs]頻點的對應的值,進行(abs(fft(x))*2/n)後才是頻斜體樣式點對應的真是幅度值,其中abs是數值的絕對值和複數的幅值。這裡abs(fft(x))出來並不是真正的幅度值,還需要(*2/n),如果是支流部分是1/n,不需要乘2,之所以有這個操作和matlab的fft內部積分求和實現有關,可以看作是一種歸一化處理吧。

實訊號的頻譜特點:關於原點對稱,是雙邊譜。

使用fft得到只有正頻域的,如圖1,我們可以在正頻率部分看到兩根譜線,一根在100hz,一根在400hz,有數字訊號處理的知識可知這是因為進行了時域的取樣,取樣頻率500hz,使得頻域出現週期性,週期為500hz,相當與把頻譜從零頻搬移到了500hz處,我們看到的400hz處的譜線,實際是-100處的譜線搬移過來的。

為了看到負頻率部分的頻譜,我們可以使用shiftfft函式,效果如圖2。使用shiftfft時需要注意的是橫座標刻度是[-fs/2,fs/2]。

% clear all; close all; clc;

f=100

;%訊號頻率

fs=500

;%取樣頻率

ts=1

/fs;

%取樣時間間隔

n=8192

;%取樣點數t=0

:t:(n-1)

*t;x=

100*

sin(

2*pi*f*t)

;%單音訊號

figure(1

);f1_index=(0

:n-1)*

(fs/n)

;y1=

abs(

fft(x)).

*2/n;subplot(2

,2,1

);plot

(f1_index,y1)

;xlabel

('頻率(hz)');

ylabel

('幅度(v)');

title

('fft sin');

f2_index =

(-n/2:

(n-1)/

2)*(fs/n)

;y2=

abs(

fftshift

(fft

(x))).

*2/n;subplot(2

,2,2

);plot

(f2_index,y2)

;xlabel

('頻率(hz)');

ylabel

('幅度(v)');

title

('fftshift sin');

pyf1 =20*

log10

(y1)

;subplot(2

,2,3

);plot

(f1_index,pyf1)

;xlabel

('頻率(hz)');

ylabel

('幅度(db)');

title

('fft sin');

pyf2 =20*

log10

(y2)

;subplot(2

,2,4

);plot

(f2_index,pyf2)

;xlabel

('頻率(hz)');

ylabel

('幅度(db)');

復訊號是實際訊號處理常用的表示形式:x=x_re+j*x_im;分為實部和虛部,虛部是實部的希爾伯特變換。

復訊號的頻譜特點:只存在正頻域部分,單邊譜。

同樣使用fft和shiftfft進行分析。

從圖中可以看出,復訊號頻譜只有正頻域部分。

% clear all; close all; clc;

f=100

;%訊號頻率

fs=500

;%取樣頻率

n=8192

;%取樣點數

ts=1

/fs;t=0

:ts:

(n-1

)*ts;

x_re=

100*

cos(

2*pi*f*t)

;%單音實部

x_im=

100*

sin(

2*pi*f*t)

;%單音虛部

x=x_re+

1i*x_im;

figure(1

);f1_index=(0

:n-1)*

(fs/n)

;y1=

abs(

fft(x)).

*2/n;subplot(2

,1,1

);plot

(f1_index,y1)

;xlabel

('頻率(hz)');

ylabel

('幅度(v)');

title

('fft complex');

f2_index =

(-n/2:

(n-1)/

2)*(fs/n)

;y2=

abs(

fftshift

(fft

(x))).

*2/n;subplot(2

,1,2

);plot

(f2_index,y2)

;xlabel

('頻率(hz)');

ylabel

('幅度(v)');

matlab 傅利葉變換

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

用matlab對訊號進行傅利葉變換

傅氏變換分析是訊號分析中很重要的方法,借助matlab可以很方便的對各類訊號進行傅氏頻域分析。本文介紹了集中離散的傅氏變換以及matlab實現方法。1.離散序列的傅利葉變換dtft discrete time fourier transform 1 n 8 原離散訊號有8點 2 n 0 1 n 1 ...

用matlab對訊號進行傅利葉變換

傅氏變換分析是訊號分析中很重要的方法,借助matlab可以很方便的對各類訊號進行傅氏頻域分析。本文介紹了集中離散的傅氏變換以及matlab實現方法。1.離散序列的傅利葉變換dtft discrete time fourier transform 1 n 8 原離散訊號有8點 2 n 0 1 n 1 ...