转载自https://blog.csdn.net/myathappy/article/details/51344618。

Matlab 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)复信号没有负频率,以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

作用:将零频点移到频谱的中间

用法:

Y=fftshift(X)
Y=fftshift(X,dim)

描述:fftshift移动零频点到频谱中间,重新排列fft,fft2和fftn的输出结果。将零频点放到频谱的中间对于观察傅立叶变换是有用的。

示例1 -实信号的情况:

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');gridon;

subplot(3,1,3),plot(f2, mag2,'c');  %绘出随频率变化的振幅
xlabel('频率/Hz');
ylabel('振幅');title('图3:FFT after fftshift','color','c');gridon;

结论:

1)如果期望绘制的幅频图的频率范围为0~fs,则无需运行fftshift变换,正频率对应在[0, fs/2],

大于fs/2的频谱的频率值为对应[-fs/2  , 0 ]负频率f + fs,注意f是负频率,是个负数。如图1。

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

如果不变换,图示的响应频点会发生变换,如图2,分析见顶端。

示例2 -复信号的情况:

close all; clear; clf;

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;

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');gridon;

subplot(3,1,3),plot(f2,mag2,'c');   %绘出随频率变化的振幅
xlabel('频率/Hz');
ylabel('振幅');title('图3:FFT after fftshift','color','c');gridon;

¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥

说明:以上为转载内容。转载地址:http://wenku.baidu.com/link?url=oWrQiwZhXZDML52WKvXorP6-k1MDXWdl9iQg6TfOHDZF9ztvhexoyw04jSiHdISehvz6QqoXRDFbvnWOmUpSJP4VquYAWddOtk248Zgm0v_

看了上面的内容后,大家可能还是不明白fftshift是怎么转换的,现在上一张图解释。DFT是对fft的结果进行离散采样,DFT也是为了计算机处理的需要而产生的一种运算,此处的fftshift实际上是为了把结果和fft运算的结果一致。现在大家可能还是不明白,好,,我来解释。

fft:对模拟信号进行变换,变换结果是左右对称的,有负频率,如下图(a)中的作图所示。

DFT的求和区间是0~N-1,DFT的物理意义是对fft的结果等间隔的采样N点,但是人为的规定0~N-1使得只采样了正频率,和fft结果不一致。由于fft的对称性或者说是周期性(见(b)的右图),所以可以以DFT结果以Fs/2为中心, 把Fs/2频率右半部分移到左半部分(即N/2~N-1)个点平移到负半轴,这样的结果的形状就同(a)中右面的图一致了,这也即是fftshift的原因。。其实是为了与fft结果一致

matlab fftshift相关推荐

  1. matlab shift 详解,Matlab fftshift 详解

    说明:本文为转载加上自己的编辑,转载请注明出处. Matlab fftshift 详解 一.实信号情况 因为实信号以fs为采样速率的信号在fs/2处混叠,所以实信号fft的结果中前半部分对应[0, f ...

  2. matlab fftshift函数编写

    %我的fftshift函数 function re=myfftshift(a) [m,n]=size(a); m1=ceil(m/2);%向上取整 n1=ceil(n/2); %左右半边进行交换 te ...

  3. MATLAB频域图像处理

    为什么要在频率域研究图像增强 可以利用频率成分和图像外表之间的对应关系.一些在空间域表述困难的增强任务,在频率域中变得非常普通滤波在频率域更为直观,它可以解释空间域滤波的某些性质 给出一个问题,寻找某 ...

  4. MATLAB中的fft后为何要用fftshift?

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

  5. matlab常用函数通俗解释(fft2和fftshift函数设置问题等)

    本文是作者在自己使用matlab过程中,针对用到的函数,试图用自己的理解去通俗解释这个函数用途的过程,如有错误,欢迎留言交流. 1. peaks函数 生成由峰峰值组成的矩阵,峰峰值由peaks函数的内 ...

  6. matlab中fftshift的意义

    在matlab中,经过fft变换后,数据的频率范围是从[0,fs]排列的.而一般,我们在画图或者讨论的时候,是从[-fs/2,fs/2]的范围进行分析.因此,需要将经过fft变换后的图像的[fs/2, ...

  7. matlab函数fftshift,matlab中fft算法_matlab中fftshift函数_matlab中fft函数的用法(2)

    plot([0 : PointNum/2 - 1], x1(1:PointNum/2)); grid on subplot(3,1,2); % [REX IMX] am = sqrt(abs(REX. ...

  8. Matlab中用fft作频谱后为什么要用fftshift

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

  9. ifftshift和fftshift函数在画图时的作用(matlab)

    %ifftshift和fftshift都是移位.圆周位移的步长等于数组或矩阵长度的一半, 对于偶数是N/2,对于奇数是(N-1)/2.. % fftshift将数组或矩阵沿正方向圆周位移(向右和向下) ...

  10. 使用matlab读取图像并通过matlab自带的fft2,fftshift,ifftshift,ifft2等函数获取该图像的傅里叶频谱图,幅度图,相位谱图,幅度图,相位谱图,幅度谱重建图以及相位谱重建

    %% 读取图像.预处理 Picture1 = imread('Cameraman.tif');tryPicture1=rgb2gray(Picture1); % 如果是RGB图像,转成灰度图 catc ...

最新文章

  1. LAMP 关键数据集锦技术选项参考
  2. 达摩院清华博士研发了一个AI摸鱼神器!有了它,老板都不好意思打扰你
  3. iOS中UIActionSheet使用详解
  4. semantic segmentation 和instance segmentation
  5. CentOS学习笔记 - 4. 修改端口和禁止root登录
  6. android 使用Binder通信
  7. halcon旋转后坐标_FPGA大赛【八】具体模块设计图像旋转方案
  8. 基于Zookeeper实现简易版服务的注册与发现机制
  9. 4S店卖不出去的库存车都是怎么处理的?
  10. java日常日志打印模板
  11. ym——Android从零开始(27)(山寨版微信-下)(新)
  12. telnet登陆入门
  13. SQL2008用户sa登录失败(错误18456)解决方法
  14. 项目成功部署到idea ,并且成功运行,访问却是404
  15. 飞鸽短信平台发送国际短信
  16. 向上取整⌈⌉ 和 向下取整⌊⌋ 和四舍五入
  17. 为什么要学网络安全?如何学习网络安全?这3个理由告诉你(自己整理的50G网安资料)
  18. Intent Service 和Service的区别
  19. Linux C/C++ or 嵌入式面试之《C/C++笔面试系列》(1) C语言经典笔面试题(上)
  20. 查看kafka的topic清单以及topic的内容

热门文章

  1. 下载OruxMaps离线高清卫星地图
  2. 全国计算机等级考试二级Web程序设计考试大纲(2018年版)
  3. html 滑动条 实时计算,滑动条:拖动滑块改变进度
  4. 服务器如何连接到虚拟机PXE,实机通过PXE启动虚拟机,如何设置
  5. H3C Wx5004无线控制器修改SSID名称
  6. 【知识兔】Excel教程小案例之字帖制作
  7. 分布式系统之paxos算法
  8. html5手机的注册页面,H5页面结合vue实现登录注册组件
  9. 语义分割网络-Segnet
  10. GB与CE标准对照表-转载