说明:本文为转载加上自己的编辑,转载请注明出处。

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 shift 详解,Matlab fftshift 详解相关推荐

  1. 基于深度神经网络的图像分类与训练系统(MATLAB GUI版,代码+图文详解)

    摘要:本博客详细介绍了基于深度神经网络的图像分类与训练系统的MATLAB实现代码,包括GUI界面和数据集,可选择模型进行图片分类,支持一键训练神经网络.首先介绍了基于GoogleNet.ResNet进 ...

  2. matlab对图像操作函数的详解(笔记1)

    matlab对图像操作函数的详解 一. 读写图像文件 1. imread imread函数用于读入各种图像文件,如:a=imread('e:\w01.tif') 注:计算机E盘上要有w01相应的.ti ...

  3. 粒子群(pso)算法详解matlab代码,粒子群(pso)算法详解matlab代码

    粒子群(pso)算法详解matlab代码 (1)---- 一.粒子群算法的历史 粒子群算法源于复杂适应系统(Complex Adaptive System,CAS).CAS理论于1994年正式提出,C ...

  4. 牛顿斯科特MATLAB求积分,详解Matlab求积分的各种方法

    详解Matlab求积分地各种方法 一.符号积分 符号积分由函数int来实现.该函数地一般调用格式为: int(s):没有指定积分变量和积分阶数时,系统按findsym函数指示地默认变量对被积函数或符号 ...

  5. matlab guide图像处理实例,现代数字图像处理技术提高及应用案例详解 MATLAB版-教科书.pdf...

    数字,图像处理,技术,提高,应用,案例,详解,教科书 [General Information] 书名=现代数字图像处理技术提高及应用案例详解 MATLAB版 作者=赵小川编著 页数=384 SS号 ...

  6. matlab求积分 没有解,详解Matlab求积分的各种方法

    详解Matlab求积分的各种方法 一.符号积分 符号积分由函数int来实现.该函数的一般调用格式为: int(s):没有指定积分变量和积分阶数时,系统按findsym函数指示的默认变量对被积函数或符号 ...

  7. MATLAB调用refprop计算物性参数详解

    MATLAB调用refprop计算物性参数详解 欢迎使用Markdown编辑器 欢迎使用Markdown编辑器 REFPROP(REference Fluid PROPerties)是一款国际权威工质 ...

  8. 有没有matlab软件教程基础讲课的老师,详解MATLAB快速入门与应用之MATLAB软件教学视频...

    本教程为<详解MATLAB快速入门与应用>的DVD部分,没有PDF教材, 本文件夹中提供各章范例的源程序.程序编号与书中例子的编号不完全相同,如"2.1.1-5"表示为 ...

  9. matlab车牌匹配时读取,基于Matlab的车牌识别(完整版)详解.doc

    基于Matlab的车牌识别(完整版)详解.doc 基于Matlab的车牌识别 摘要:车牌识别技术是智能交通系统的重要组成部分,在近年来得到了很大的发展.本文从预处理.边缘检测.车牌定位.字符分割.字符 ...

最新文章

  1. 内存地址对齐提升程序性能
  2. C++ new和delete运算符
  3. netty Demo
  4. 2750个通用停用词表整理,免费下载
  5. 微软开源软件特征源码分析工具 Application Inspector
  6. 更新 箫心病毒分析专家2006 build 5.23(C#2.0)
  7. redis aof 备份和恢复_深入理解Redis持久化
  8. python complex 如何取出实数部分_【PYthon报错】np.complex128数字的虚数部分为0j
  9. 头文件malloc.h:函数 mallopt()的选项
  10. Neutron中的网络I/O虚拟化
  11. python爬虫百度翻译997_python爬取百度翻译返回:{'error': 997, 'from': 'zh', 'to': 'en', ......
  12. 【nebula graph】RPM离线搭建nebula graph集群
  13. 学习FLTK 使用Fl_Menu_Bar
  14. 反射机制,类的加载机制,和注解的配置参数的结合使用详解
  15. Android读ipconfig.txt配置文件乱码
  16. android studio用mysql_Android Studio使用JDBC远程连接mysql的注意事项(附示例)
  17. 淘宝评价计分规则讲解
  18. 星敏感器 matlab,星敏感器姿态确定仿真综合实验.docx
  19. goland + dlv
  20. TypeScrpt 学习指南

热门文章

  1. 虾皮入驻shopee注册开店申请店铺开通所需资料及操作流程
  2. Jquery的鼠标移入移出事件
  3. Parallels Desktop虚拟机怎么完全卸载? PD虚拟机完全卸载方法
  4. 如何从零开始制作APP
  5. 沃尔玛入股1号店交易完成 已开始业务对接
  6. Oracle查询银行卡数、修改余额及验证登录
  7. 计算机辅助设计是运用计算机,计算机辅助设计在艺术设计中的应用
  8. js判断是否是微信浏览器或者支付宝浏览器
  9. Java、Python和PHP三者的区别
  10. JSON串转化为List