问题来源:在阅读莱昂斯的《数字信号处理》第三章离散傅里叶变换时,试图验证实数偶对称信号的傅里叶变换实部为偶对称的且虚部为零。验证失败。验证信号为矩形信号,结果显示虚部是不为零且最大幅值等于信号幅值。

  错误原因:MATLAB中的fft函数默认其 N 点输入信号的时间序号为从 0 到 N-1 ,默认其输出信号的频率序号为从 0 到 N-1 。而当试图输入一个时间序号为从 -N/2 到 N/2-1 ( N 为偶数时)或从 -(N-1)/2 到 (N-1)/2 ( N 为奇数)的信号时,输出将会产生相移,看到的频谱的实部、虚部和相位都不是原始信号的 fft 的结果。只有频谱的幅值等于原始信号的 fft 的结果。

  解决方法:在进行 fft 之前须使用 ifftshift 函数对原始信号进行移位,整个正确的 fft 过程为 fft(ifftshift(signal)) 。然而这样计算得到的 fft 也需要在频域使用 fftshift 进行移位才能显示频率序号为从 -N/2 到 N/2-1 ( N 为偶数时)或从 -(N-1)/2 到 (N-1)/2 ( N 为奇数)的频谱,即 fftshift(fft(ifftshift(signal))) 。在对频率序号为从 -(N+1)/2 到 (N+1)/2 的信号进行 ifft 的时候也会有类似的问题,解决方式为 fftshift(ifft(ifftshift(spectrum))) 。

  注意:当 N 为奇数,若要使用 ifftshift 构造偶对称信号,须按照时间序号为从 -N/2 到 N/2-1 构造。即构造 [ 1 2 3 4 5 4 3 2 ] 经过ifftshift之后变为 [ 5 4 3 2 1 2 3 4 ] ,原信号中位于 0 时间序号的“5”依然在 0 时间序号的位置。

参考资料

1. FFT of a real symmtric vector is not real and symmetric

  http://stackoverflow.com/questions/25042379/fft-of-a-real-symmetric-vector-is-not-real-and-symmetric#

2. Correct use of fftshift and ifftshift at input to fft and ifft

  http://www.mathworks.com/matlabcentral/newsreader/view_thread/285244

MATLAB中fft函数的正确使用方法的更多相关文章

  1. matlab中fprintf函数的具体使用方法

    matlab中fprintf函数的具体使用方法实例如下: fprintf函数可以将数据按指定格式写入到文本文件中.其调用格式为: 数据的格式化输出:fprintf(fid, format, varia ...

  2. Matlab中fread函数的高级使用方法及其帮助文档中容易引起歧义的地方

    参考资料:http://cn.mathworks.com/help/matlab/ref/fread.html 注意:参考资料针对的Matlab版本号R2015a,我使用的是R2013b. Matla ...

  3. MATLAB中FFT的使用方法

    MATLAB中FFT的使用方法 说明:以下资源来源于<数字信号处理的MATLAB实现>万永革主编 一.调用方法X=FFT(x):X=FFT(x,N):x=IFFT(X);x=IFFT(X, ...

  4. [转载]Matlab中fft与fftshift命令的小结与分析

    http://blog.sina.com.cn/s/blog_68f3a4510100qvp1.html 注:转载请注明出处——by author. 我们知道Fourier分析是信号处理里很重要的技术 ...

  5. matlab中patch函数的用法

    http://blog.sina.com.cn/s/blog_707b64550100z1nz.html matlab中patch函数的用法——emily (2011-11-18 17:20:33) ...

  6. NET MVC全局异常处理(一) 【转载】网站遭遇DDoS攻击怎么办 使用 HttpRequester 更方便的发起 HTTP 请求 C#文件流。 Url的Base64编码以及解码 C#计算字符串长度,汉字算两个字符 2019周笔记(2.18-2.23) Mysql语句中当前时间不能直接使用C#中的Date.Now传输 Mysql中Count函数的正确使用

    NET MVC全局异常处理(一)   目录 .NET MVC全局异常处理 IIS配置 静态错误页配置 .NET错误页配置 程序设置 全局异常配置 .NET MVC全局异常处理 一直知道有.NET有相关 ...

  7. matlab 中“newff” 函数的参数设置

    matlab 中"newff" 函数的使用方法技巧|和各参数的意义 先来一个简单的源程序让大家练习一下: % Here input P and targets T define a ...

  8. Matlab中imfilter()函数的用法

    Matlab中imfilter()函数的用法 功能:对任意类型数组或多维图像进行滤波.用法:B = imfilter(A,H) B = imfilter(A,H,option1,option2,... ...

  9. Matlab中 awgn 函数输入参数带有‘measured’ 时snr的含义

    MATLAB中awgn 函数可以为输入信号x 添加一定大小的噪声. out = awgn(in,snr,'measured');  是一种常见的使用方法,意思是在添加噪声前先测量一下输入信号的功率,再 ...

随机推荐

  1. 【图像处理】【SEED-VPM】3.外设信息

    ———————————————————————————————————————————————————————————————————————— 摄像头接口 具有AV端子输出的彩色摄像头,摄像头广角8 ...

  2. keep the bar green to keep the code clean——Junit详解(一)

    测试用例 单元测试时每个开发人员必需掌握的,是保证开发过程中代码的准确性,无误性,保证代码质量.敏捷开发模式是先根据用户需求写测试用例,考虑基本所有用户所需要的情况,再写实现方法.单元测试有很多种,当 ...

  3. Nand Flash,Nor Flash,CFI Flash,SPI Flash 之间的关系

    前言:    在嵌入式开发中,如uboot的移植,kernel的移植都需要对Flash 有基本的了解.下面细说一下标题中的中Flash中的关系 一,Flash的内存存储结构    flash按照内部存 ...

  4. C#中Thread与ThreadPool的比较

    最近同事在编写一个基于UPD RTP协议的通信软件,在处理接收Listen时,发现了一个问题到底是用Thread还是ThreadPool呢? 我看同事的问题比较有典型性,还是做以整理培训一下吧 Thr ...

  5. Windows Server 2003 IIS6.0+PHP5(FastCGI)+MySQL5环境搭建教程

    准备篇 一.环境说明: 操作系统:Windows Server 2003 SP2 32位 PHP版本:php 5.3.14(我用的php 5.3.10安装版) MySQL版本:MySQL5.5.25 ...

  6. Linux 终端常用快捷键

    Tab 自动补全 Ctrl+L 清屏 Ctrl+A 移动到头 Ctrl+E 移动到尾 Ctrl+左键头 左移一个单词 Ctrl+右箭头 右移一个单词 Ctrl+U 删除左边所有字符 Ctrl+K 删除 ...

  7. X3850M2安装CertOS 7 KVM 2--DMMP

    1,在DS8000中调整vg为单台服务器.检查另一台服务器内已经没有磁盘信息. 2,在余下的服务器中安装DMMP. 参考:http://edwin-wang.com/2012/08/device-ma ...

  8. Android 图片浏览器 从原来位置放大至全屏显示

    android 图片浏览器 特点: 1.从网络加载图片,只需要传图片地址数组即可 2.点击图片,从原来位置放大至全屏 3.支持手势操作 4.完全自定义布局 项目源码请到GitHub下载:https:/ ...

  9. Android开源框架:Universal-Image-Loader解析(四)TaskProcess

    Universal-Image-Loader中,对Task的处理有两种方法:FIFO,LIFO 在core/assist下的deque包中,其主要是定义了LIFOLinkedBlockingDeque ...

  10. Python中为feedparser设置超时时间教程

    python有一个用于解析feed的模块:feedparser,feedparser解析各种feed是非常方便的,唯一比较恼火的是遇到一些badurl,经常会导致堵塞,因此需要为feedparser设 ...