[引用]MATLAB中的fft後爲什麼要用fftshift

原文地址:MATLAB中的fft後爲什麼要用fftshifthtml

fft是一維傅里葉變換,即將時域信號轉換爲頻域。spa

fftshift是針對頻域的,將FFT的DC份量移到頻譜中心,從新排列fft,fft1和……ftn的輸出結果。htm

fftshift就是對換數據的左右兩邊好比
x=[1 2 3 4]
fftshift(x) ->[3 4 1 2]

IFFTSHIFT Inverse FFT shift.(就是fftshift的逆)blog

x=[1     2     3     4     5];get

y=fftshift(x)it

y =class

     4     5     1     2     3grid

ifftshift(y)im

ans =數據

     1     2     3     4     5

 

在OFDM系統中,將DC份量0移到頻譜中心

x = [0 0 1 1 1 1 1 1 0 0];
fftshift(x)

ans =

1 1 1 0 0 0 0 1 1 1

 

直接用fft得出的數據與頻率不是對應的,fftshift能夠糾正過來

示例:

clf;

fs=100;N=256;   %採樣頻率和數據點數
n=0:N-1;t=n/fs;   %時間序列
x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信號

y1=fft(x,N);    %對信號進行快速Fourier變換
y2=fftshift(y1);

mag1=abs(y1);     %求得Fourier變換後的振幅
mag2=abs(y2);    

f1=n*fs/N;    %頻率序列
f2=n*fs/N-fs/2;

subplot(3,1,1),plot(f1,mag1,'r');   %繪出隨頻率變化的振幅
xlabel('頻率/Hz');
ylabel('振幅');title('圖1:usual FFT','color','r');grid on;

subplot(3,1,2),plot(f2,mag1,'b');   %繪出隨頻率變化的振幅
xlabel('頻率/Hz');
ylabel('振幅');title('圖2:FFT without fftshift','color','b');grid on;

subplot(3,1,3),plot(f2,mag2,'c');   %繪出隨頻率變化的振幅
xlabel('頻率/Hz');
ylabel('振幅');title('圖3:FFT after fftshift','color','c');grid on;

結論:

1)若是指望繪製的幅頻圖的頻率範圍爲0~fs,則無需運行fftshift變換,如圖1。

2)若是指望繪製的幅頻圖的頻率範圍爲-fs/2~fs/2,則須要運行fftshift變換,如圖3;若是不變換,圖示的響應頻點會發生變換,如圖2。

相關文章
相關標籤/搜索