fft是一维傅里叶变换,即将时域信号转换为频域信号
fftshift
是针对频域的,将FFT的DC分量移到频谱中心
即对频域的图像,(假设用一条水平线和一条垂直线将频谱图分成四块)对这四块进行对角线的交换与反对角线的交换

FFTSHIFT Shift zero-frequency component to center of spectrum.
For vectors, FFTSHIFT(X) swaps(交换) the left and right halves of
X. For matrices, FFTSHIFT(X) swaps the first and third
quadrants and the second and fourth quadrants. For N-D
arrays, FFTSHIFT(X) swaps “half-spaces” of X along each
dimension.

FFTSHIFT(X,DIM) applies the FFTSHIFT operation along the
dimension DIM.FFTSHIFT is useful for visualizing the Fourier transform with
the zero-frequency component in the middle of the spectrum.

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     5IFFTSHIFT undoes the effects of FFTSHIFT.

注意:在使用matlab的fft及fftshift时,应注意。

假定采样频率fs,采样间隔dt,采样点数N。

fft后,频率为(0:N-1)/N/dt

进行fftshift后,频率为

if mod(N,2)==0

n1=(0:N-1)-N/2;

else

n1=(0:N-1)-(N-1)/2;

end

实际上,频率为N点为周期的,所以

(0:N-1)

所以,对于频率0,1,2,3,4,实际上为0,1,2,-2(3-5),-1(4-5)。

fftshift后的频率为

-2,-1,0,1,2

对于二维fftshift,其与直接用下面的结果一样

if mod(tempN,2)==0

kx=(0:tempM-1)/tempM/dx-tempM/2/tempM/dx;% kx=kx*2*pi

else

kx=(0:tempM-1)/tempM/dx-(tempM-1)/2/tempM/dx;% kx=kx*2*pi

end

kx=kx*2*pi;

if mod(tempM,2)==0

ky=(0:tempN-1)/tempN/dy-tempN/2/tempN/dy;% kx=kx*2*pi

else

ky=(0:tempN-1)/tempN/dy-(tempN-1)/2/tempN/dy;% kx=kx*2*pi

end

ky=ky*2*pi;

temp1=sqrt(kx.^2+ky.^2);

k1=temp1;

[kx,ky]=meshgrid(kx,ky);

如下面程序表明上面两个相同:

dx=50e3;

dy=50e3;

% % % % % % % % % % %

tempN=41;

tempM=41;

% % % % % % % % % % % %

% % % %determining the wavenumber kx and ky

if mod(tempM,2)==0

kx=(0:tempM-1)-tempM/2;% kx=kx*2*pi

else

kx=(0:tempM-1)-(tempM-1)/2;% kx=kx*2*pi

end

kx=kx*2*pi/tempM/dx;

if mod(tempN,2)==0

ky=(0:tempN-1)-tempN/2;% kx=kx*2*pi

else

ky=(0:tempN-1)-(tempN-1)/2;% kx=kx*2*pi

end

ky=ky*2*pi/tempN/dy;

[kxx,kyy]=meshgrid(kx,ky);

k00=sqrt(kx.^2+ky.^2);

% % % % % % % % % % % % % % % %

if mod(tempM,2)==0

temp1=tempM/2-1;temp2=(temp1+1):(tempM-1);temp2=temp2-tempM;temp3=[0:temp1,temp2];kx=temp3/tempM/dx;% kx=kx*2*pi

else

temp1=(tempM-1)/2;temp2=(temp1+1):(tempM-1);temp2=temp2-tempM;temp3=[0:temp1,temp2];kx=temp3/tempM/dx;% kx=kx*2*pi

end

kx=kx*2*pi;

if mod(tempN,2)==0

temp1=tempN/2-1;temp2=(temp1+1):(tempN-1);temp2=temp2-tempN;temp3=[0:temp1,temp2];ky=temp3/tempN/dy;% kx=kx*2*pi

else

temp1=(tempN-1)/2;temp2=(temp1+1):(tempN-1);temp2=temp2-tempN;temp3=[0:temp1,temp2];ky=temp3/tempN/dy;% kx=kx*2*pi

end

ky=ky*2*pi;

[kx,ky]=meshgrid(kx,ky);

kx=fftshift(kx);

ky=fftshift(ky);

k=sqrt(kx.^2+ky.^2);

figure

subplot(3,1,1),contourf(kxx-kx)

subplot(3,1,2),contourf(kyy-ky)

subplot(3,1,3),contourf(k00-k)

%%%%%%%%%%%

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;

MATLAB中的fft后为何要用fftshift?相关推荐

  1. matlab ifft频率分辨率,[FFT] matlab中关于FFT的使用(理解频率分辨率、补零问题)

    [FFT] matlab中关于FFT的使用(理解频率分辨率.补零问题).txt我这人从不记仇,一般有 仇当场我就报了.没什么事不要找我,有事更不用找我!就算是believe中间也藏了一个lie! 我那 ...

  2. 利用卷积定理进行信道估计 + 深入探究 DFT 与 matlab 中的 fft 用法

    文章目录 1 背景 2 DFT & FFT 公式级别解析 2.1 DFT / IDFT 2.2 FFT 3 利用卷积定理进行信道估计 1 背景 最近尝试用时域卷积定理来进行信道估计 假设 TX ...

  3. matlab安装m_map,MATLAB中安装m_map后不能用,求解

    MATLAB中安装m_map后不能用,求解 因为画图,所以今天在MATLAB中安装了m_map,之后还写了几个m文件,后来MATLAB突然卡住,就关了,之后再打开,就显示如下: Warning: Di ...

  4. fftw3/gsl/kissfft/OouraFFT库中傅里叶变换/反傅里叶变换函数和Matlab中的fft/ifft的对应关系

    先分析一维度的 一.fftw_plan_dft_1d 正变换: fftw_complex *in = fftw_malloc ( sizeof ( fftw_complex ) * n ); fftw ...

  5. matlab中的fft变换后的频率的缩放系数问题。

    本文的目的在于说明fft变换之后的幅值对应的真实频率到底是多少. 为了方便大家理解fft的基础知识,在下面附上<小波分析与傅里叶变换基础>的pdf,dft,fft相关在第三章. 链接:ht ...

  6. Matlab中IFFT/FFT注意事项及在OFDM仿真中的应用问题

    1.Matlab里的IFFT/FFT函数系数的问题 Matlab里的ifft函数会在做完正常的变换后除以ifft变换的点数,而fft函数中没有系数. Matlab里的IFFT变换及FFT变换: 因此在 ...

  7. Matlab中N是什么意思,MATLAB中y=FFT(X,N)中的N是什么意思

    matlab傅里叶变换中fft(x,n),x,n分别是什么含义? fft(x,n)是一维快速傅里叶变换,x相当于信号,n是变换点数.离散傅里叶变换DFT的快速算法就是FFT. matlab中FFT函数 ...

  8. matlab中 y =ft(x)的意思,matlab中y=fft(x)语句的意思

    matlab傅里叶变换中fft(x,n),x,n分别是什么含义? fft(x,n)是一维快速傅里叶变换,x相当于信号,n是变换点数.离散傅里叶变换DFT的快速算法就是FFT. matlab中FFT函数 ...

  9. MATLAB中利用FFT进行频谱分析

    =============================================== 首先产生一个由不同频率波形叠加形成的波形用于分析,在命令行中调用代码如下: f0=80000; f1=8 ...

最新文章

  1. sublime golang 开发的时候(go get)第三方包没办法自动提示问题
  2. Python---常见问题
  3. spss主成分综合得分_【SPSS因子分析】在SPSS中对医学多个数值变量进行因子分析 —【杏花开医学统计】...
  4. WPF实战案例-打印
  5. c++ 获取时间戳_分布式系统理论基础三-时间、时钟和事件顺序
  6. 轴承新旧型号对照表_精密机床主轴轴承,高端轴承进口清关报关流程
  7. mysql-5.7在CentOS-7下的rpm安装
  8. 使用 varchar(max)、nvarchar(max) 和 varbinary(max) 数据类型代替text、ntext 和 image 数据类型...
  9. 机器人也开始怕疼了?科学家开发无需人工干预即可自愈的机器人
  10. C# DataTable 用法简介
  11. oracle 开并行写入命令,Oracle等待事件“日志文件并行写入”更改
  12. 怎样测试通达信软件,如何测试通达信指标成功率?
  13. 磊科nw336 linux驱动程序,磊科NW336无线网卡驱动程序
  14. 深入dwr2-commet模式
  15. 全局序列比对 c语言实现,序列比对(一)——全局比对Needleman-Wunsch算法
  16. 什么是smarty及其安装
  17. 超级计算机为什么不能玩游戏,韦杰:东方文明像一台超级计算机,不能只用来玩游戏...
  18. 1135 mysql_mysql的1135错误解决方法
  19. 利用树莓派3和RTL-SDR V3搭建一个低成本的QRP小功率监测点
  20. 杩滅▼涓绘満寮鸿揩鍏抽棴浜嗕竴涓幇鏈夌殑杩炴帴銆�

热门文章

  1. 常用的 css hack实例
  2. SQL output子句的用法
  3. spring cloud微服务分布式云架构 - 整合企业架构的技术点
  4. 数据结构与算法基础-试题
  5. 高可用集群中的选举机制
  6. 设计模式 策略模式
  7. linux一键优化脚本1.0
  8. Node.js技术手册
  9. cacti 安装过程笔记
  10. LAN,城域网,广域网,国际互联网