[引用]MATLAB中的fft后為何要用fftshift


原文地址:MATLAB中的fft后為何要用fftshift

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

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

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

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

x=[1     2     3     4     5];

y=fftshift(x)

y =

     4     5     1     2     3

ifftshift(y)

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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM