模擬訊號進行奈奎斯特取樣後成為離散的數碼訊號,時域分析不太方便,通常要進行頻域變換更好的分析訊號,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 ...