作者:桂。

时间:2017-01-18  23:07:50

链接:http://www.cnblogs.com/xingshansi/articles/6298391.html


前言

FFT是信号处理的常用手段,许多应用场景同时需要两个甚至多个傅里叶变换结果。例如:计算输入信号通过一个系统的输出结果,为了进行快速运算,通常需要利用补零操作使得二者长度相同,并借助FFT实现。许多场景中输入信号以及滤波器冲激响应都为实数,本文主要分析如何通过一个FFT运算同时得出两个实数DFT的结果。

 一、利用一组复数FFT实现两组实数FFT

  A.模型构造

图1 本文理论的应用场景示意图

应用需求如图1所示,定义新变量$z(n)$:

$z(n)= f(n) + jh(n)$

$z(n)$对应的频域变换为:

$Z(k)=X(k)+jH(k)$

  B.理论推导

对于信号$z(n)$以及其共轭信号,

$z(n)=f(n)+jh(n)$
$z^*(n)=f(n)-jh(n)$

对应的频域变换为:

$Z(k)=F(k)+jH(k)$
$Z^*(k)=F(k)-jH(k)$

又信号$z^*(n)$的频域变换存在如下性质,

$DFT(z^*(n))=\sum^{N-1}_{n=0}z^*(n)e^{-\frac{j2\pi kn}{N}}= Z^*(N-k)$

从而由一个FFT运算得到两个FFT结果:

$F(k)=\frac{Z(k)+Z^*(N-k)}{2}$
$H(k)=\frac{Z(k)-Z^*(N-k)}{2j}$

当然输出结果也可以直接得出

$Y(k)=F(k)H(k)=\frac{[Z(k)]^2-[Z^*(N-k)]^2}{4j}$

对于N点的FFT,对应复数乘法个数为:

  • 基2FFT:N/2*log2(N)
  • 基4FFT:N/2*log2(N)-N

二、复数乘法的变形

对于两个复数:x1 = a+jb;  x2 = c+jd:

进一步变形:

可以看出I、Q的第一项是相同的,这样便实现了:复数乘法由4个实数乘法器组成,简化为复数乘法由3个实数乘法器组成。

FFT节省资源的思路的更多相关文章

  1. 为什么使用LUT比GAL 节省资源

    为什么使用LUT比GAL 节省资源 A[1:0]    B[1:0]     实现一个比较器,如果A=B输出1 否则输出0 传统的GAL 需要 24= 16个存储单元(ROM)来存储结果数据,实现方法 ...

  2. AngularJS使用OData请求ASP.NET Web API资源的思路

    本篇整理AngularJS使用OData请求ASP.NET Web API资源的思路. 首先给ASP.NET Web API插上OData的翅膀,通过NuGet安装OData. 然后,给control ...

  3. 在你的 Rails App 中开启 ETag 加速页面载入同时节省资源

    转自http://huacnlee.com/blog/use-etag-in-your-rails-app-to-speed-up-loading/ 什么是 ETag 网上关于 ETag 的解释有很多 ...

  4. 有关AngularJS请求Web API资源的思路

    页面部分大致如下: <body ng-app="productManagement"> ... <div ng-include="'app/produc ...

  5. Xilinx 常用模块汇总(verilog)【01】

    作者:桂. 时间:2018-05-07  19:11:23 链接:http://www.cnblogs.com/xingshansi/p/9004492.html 前言 该文私用,不定期更新,主要汇总 ...

  6. cocos2dx 资源合并.

    文件合并之前 文件合并之后 吐槽 我们项目比较奇葩, ui用cocostudio做, 这项光荣的任务由美术接手. 这个美术是个新手, 经过我长时间的观察, 她似乎不用怎么画画. 至少在很长一段时间里, ...

  7. 2018年美国大学生数学建模竞赛(MCM/ICM) B题解题思路

    老套路,把我们在解决B题时候采用的思路分享给大家,希望大家能学到点东西~~~ B题思路整理:Part1:先整理出说某种语言多的十个国家给找出来,或者说是把十种语言对应的国家找出来 然后再对各个国家的人 ...

  8. 关于FFT的硬件实现

    DFT在实际应用中非常重要,可以计算信号的频谱,功率谱和线性卷积等. 离散傅里叶变换的公式: 其中:  称为旋转因子. 由欧拉公式可得: 直接按DFT变换进行计算,当序列长度N很大时,计算量非常大,所 ...

  9. 【转载】Unity 优雅地管理资源,减少占用内存,优化游戏

    转自:星辰的<Unity3D占用内存太大的解决方法> 最近网友通过网站搜索Unity3D在手机及其他平台下占用内存太大. 这里写下关于Unity3D对于内存的管理与优化. Unity3D  ...

随机推荐

  1. http 三次握手

    1.三次握手 目的:主要规避由于网络阻塞,传输不畅等原因导致服务器端端口一直被占用,无法释放端口资源.(想想假设只要一次就建立连接,服务器响应后浏览器若是没收到数据,等待一段时间后,网络超时,浏览器重 ...

  2. 一条SQL语句获取具有父子关系的分类列表(mysql)

    有如下表数据: 获取“菜单”分类的子分类数据列表: SELECT a.cat_id, a.cat_name, a.sort_order AS parent_order, a.cat_id, b.cat ...

  3. SQL Manager Lite可视化工具部分中英对照

    .Refresh //刷新表数据 .compile,//提交数据. .connect to host //链接到服务器 .disconnect from all databases //断开链接 . ...

  4. Python yield 使用

    老是看到好的文章,不由自主的收集过来. 原文链接:https://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/ 廖大写的, ...

  5. oracle11g-R2静默安装报错[INS-32013]解决方案

    问题描述: oracle静默安装很强大...,参数搞不对.安装就扯dan了....这个报错搞了一个下午.终于搞定了如释负重.... 如果当初选择仅仅安装oracle软件就没多事情.想一步完成(数据库软 ...

  6. U盘安装win10

    1. 下载win10的安装ISO, 这里使用的是 LENOVO_Win10_multiple_editions_x64_zh-cn_DV5.iso 2. 准备一个大小不低于8G的U盘, 因为ISO文件 ...

  7. 转: Ogre实现无缝地图要改的地方 记下来 用的时候可以看

    //OgreTerrainQuadTreeNode.hSceneNode* getLocalSceneNode(){return mLocalNode;} //OgreTerrain.huint16 ...

  8. uri.js的用法事例

    来源于:http://smoothprogramming.com/tutorials/get-set-query-string-values-from-url-using-uri-js/ Get or ...

  9. 使用 kubectl drain 从集群中移除节点

    对节点执行维护操作之前(例如:内核升级,硬件维护等),您可以使用 kubectl drain 安全驱逐节点上面所有的 pod.安全驱逐的方式将会允许 pod 里面的容器遵循指定的 PodDisrupt ...

  10. Alamofire使用报错Extra argument 'method' in call解决办法

    使用Alamofire的时候,在用这句的时候报错了: Extra argument 'method' in call Alamofire.request("", method: H ...