MATLAB中的FFT后用FFTSHIFT 的意义

    科技2025-09-03  23

    1.FFT是一维傅里叶变换,即将时域信号转换为频域信号;

    FFTSHIFT是针对频域信号的,将FFT的DC分量移到频谱中心,重新排列fft,fft2和fftn的输出结果。


    2.fftshift,就是将左右两边的数据对换

    例子:

    x=[1 2 3 4] fftshift(x)

    结果如下图


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

    例子:

    x=[1 2 3 4 5] y=fftshift(x) z=ifftshift(y)

    结果:


    4.直接用fft得出的数据与频率不是对应的,fftshift可以纠正过来

    示例:

    clear all; clc; 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;

    结果:


    5.结论

    1)如果期望绘制的幅频图,频率范围为0~fs,则无需运行fftshift变换,如图1。

    2)如果期望绘制的幅频图,频率范围为-fs/2~fs/2,则需要运行fftshift变换,如图3;

    3)如果不运行fftshift变换,图示的响应频点会发生变换,如图2。


     

    Processed: 0.010, SQL: 8