關於fftshift----將零頻率的份量移到頻譜的中心

fftshifthtml

做用:將零頻點移到頻譜的中間spa

用法:.net

Y=fftshift(X)htm

Y=fftshift(X,dim)blog

描述:fftshift移動零頻點到頻譜中間,從新排列fft,fft2和fftn的輸出結果。將零頻點放到頻譜的中間對於觀察傅立葉變換是有用的。it

fftshift就是對換數據的左右兩邊好比 x=[1 2 3 4] fftshift(x) ->[3 4 1 2] IFFTSHIFT Inverse FFT shift.(就是fftshift的逆)(IFFTSHIFT undoes the effects of FFTSHIFT.grid

x=[1     2     3     4     5];程序

y=fftshift(x)im

y =數據

     4     5     1     2     3

ifftshift(y)

ans =

     1     2     3     4     5

 

 須要fftshift的緣由:  

一、在matlab中,通過fft變換後,數據的頻率範圍是從[0,fs]排列的。

二、而通常,咱們在畫圖或者討論的時候,是從[-fs/2,fs/2]的範圍進行分析。

三、所以,須要將通過fft變換後的圖像的[fs/2,fs]部分移動到[-fs/2,0]這個範圍內。而fftshift就是完成這個功能。一般,若是想獲得所見的中間是0頻的圖像,通過fft變換後,都要再通過fftshift。

=================================================================================================================================

一.對於實信號:

由於實信號以fs爲採樣速率的信號在 fs/2處混疊,因此實信號fft的結果中前半部分對應[0, fs/2],後半部分對應[ -fs/2, 0];

1)實信號fft的結果前半部分對應[0, fs/2]是正頻率的結果,後半部分對應[ -fs/2, 0]是負頻率的結果。大於fs/2的部分的頻譜其實是實信號的負頻率加fs的結果。故要獲得正確的結果,只需將視在頻率減去fs便可獲得頻譜對應的真實負頻率;

2)若是要讓實信號fft的結果與[-fs/2, fs/2]對應,則要fft後fftshift一下便可,fftshift的操做是將fft結果以fs/2爲中心左右互換;

3)若是實信號fft的繪圖頻率f從[-fs/2, fs/2],而且沒有fftshift,則fft正頻譜對應f在[0, fs/2]的結果將混疊到(f - fs/2)的位置;

fft負頻譜對應f在[-fs/2, 0]的結果混疊到 f + fs - fs/2 的位置,注意這裏f爲負值,也就是說此種狀況下fft負頻譜對應的視在頻率減去fs/2便可獲得頻譜對應的真實負頻率。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

結論:

1.若是但願繪製的頻譜圖的頻率範圍爲:0-fs,則無需進行fftshift,正頻率對應0-fs/2;大於fs/2的頻譜的頻率值爲對應[-fs/2  , 0 ]負頻率f + fs,注意f是負頻率,是個負數。

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

 

 

二.覆信號狀況

1)覆信號沒有負頻率,以fs爲採樣速率的信號,fft的頻譜結果是從[0,fs]的。

2)在 f> fs/2時,對覆信號的fft結果進行fftshift會產生頻率混疊(將下面的示例2中的頻率從f=15改成f=85能夠驗證f=85的譜線在fftshift後跑到 f= -15 = 85 - fs = 85 - 100的位置了),因此覆信號也通常要求 f <= fs/2

3)在對雷達的慢時間維(覆信號)進行fft後,因爲要用doppler= ((0:LFFT-1)/LFFT  - 0.5)*PRF; 計算多普勒頻率,因此對該慢時間信號fft後要fftshift下,以便和正確的頻率單元相對應。注意多普勒頻率fd < = PRF/2 時才測的準!

 

%=====================================================================================================================================

補充:

%====================================================================================================================================

%關於fftshift的程序理解
clc;close all;clear all;
fs=100;N=256;   %採樣頻率和數據點數
n=0:N-1;t=n/fs;   %時間序列,從0到2.55s
x=0.5*sin(2*pi*15*t)+2*sin(2*pi*40*t); %信號
y1=fft(x,N);      %對信號進行快速Fourier變換,256點DFT
y2=fftshift(y1);  %fftshift的操做是將fft結果以fs/2爲中心左右互換
mag1=abs(y1);     %求得Fourier變換後的振幅
mag2=abs(y2);   
f1=n*fs/N;    %頻率序列
f2=n*fs/N-fs/2; %頻率序列向左移fs/2
figure;
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;

%===============================================================================================================================

%覆信號的狀況:
fs=100;N=256;   %採樣頻率和數據點數
n=0:N-1;t=n/fs;   %時間序列
x=0.5*exp(j*2*pi*15*t)+2*exp(j*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;
figure;
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;

%=============================================================================================

更直觀的程序:

t=0:0.001:2;
n=2001;
Fs=1000;
Fc=200;
x=cos(2*pi*Fc*t);
y1=fft(x);
y2=fftshift(y1);
f=(0:2000)*Fs/n-Fs/2;
figure;
hold on;
plot(f,abs(y1),'r')
plot(f,abs(y2),'b')

總之用fftshift後頻率序列要減去fs/2

 

 

參考:

http://www.cnblogs.com/limanjihe/p/10014142.html

fft後爲何要fftshift:        https://blog.csdn.net/ssdxiao01/article/details/6687721

https://blog.csdn.net/zhyoulun/article/details/12859339

https://wenku.baidu.com/view/c6a7964476c66137ee06199a.html

相關文章
相關標籤/搜索