fftshift的作用正是讓正半軸部分和負半軸部分的圖像分別關於各自的中心對稱。因為直接用fft得出的數據與頻率不是對應的,fftshift可以糾正過來。
假設f(x,y)是壹個離散空間中的二維函數,則該函數的二維傅立葉變換的定義如下:
p=0,1…M-1 q=0,1…N-1 (1)
或 p=0,1…M-1 q=0,1…N-1 (2)
離散傅立葉反變換的定義如下:
m=0,1…M-1 n=0,1…N-1(3)
F(p,q)稱為f(m,n)的離散傅立葉變換系數。這個式子表明,函數f(m,n)可以用無數個不同頻率的復指數信號和表示,而在頻率(w1,w2)處的復指數信號的幅度和相位是F(w1,w2)。
2、MATLAB提供的快速傅立葉變換函數
(1)fft2
fft2函數用於計算二維快速傅立葉變換,其語法格式為:
B = fft2(I)
B = fft2(I)返回圖象I的二維fft變換矩陣,輸入圖象I和輸出圖象B大小相同。
例如,計算圖象的二維傅立葉變換,並顯示其幅值的結果,如圖所示,其命令格式如下
load imdemos saturn2
imshow(saturn2)
B = fftshift(fft2(saturn2));
imshow(log(abs(B)),[],'notruesize')
(2)fftshift
MATLAB提供的fftshift函數用於將變換後的圖象頻譜中心從矩陣的原點移到矩陣的中心,其語法格式為:
B = fftshift(I)
對於矩陣I,B = fftshift(I)將I的壹、三象限和二、四象限進行互換。
(2)ifft2
ifft2函數用於計算圖象的二維傅立葉反變換,其語法格式為:
B = ifft2(I)
B = ifft2(A)返回圖象I的二維傅立葉反變換矩陣,輸入圖象I和輸出圖象B大小相同。其語法格式含義與fft2函數的語法格式相同,可以參考fft2函數的說明。
如果信號是二維的,用上面的函數即可!直接調用。
如果信號是壹維的,給妳下面的例子,妳應該能明白!
clear
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變換,逆變換函數為ifft
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;