作者:桂。

时间: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. 初识:JMX

    来自:http://blog.csdn.net/derekjiang/article/details/4531952 JMX是一份规范,SUN依据这个规范在JDK(1.3.1.4.5.0)提供了JMX ...

  2. python获取PING结果

    # -*- coding: utf-8 -*- import subprocess import re def get_ping_result(ip_address): p = subprocess. ...

  3. Cocos开发小游戏如何实现微信排行榜

    当游戏开发进入尾声,要引入微信数据的时候,需要了解和微信相关的接口了. 关系数据链 开放数据域 相关接口如下: wx.getFriendCloudStorage() 获取当前用户也玩该小游戏的好友的用 ...

  4. 【React Native开发】React Native For Android环境配置以及第一个实例(1)

    年9月15日也公布了ReactNative for Android,尽管Android版本号的项目公布比較迟,可是也没有阻挡了广大开发人员的热情.能够这样讲在2015年移动平台市场上有两个方向技术研究 ...

  5. HDU1211 RSA

    RSA Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submis ...

  6. Linux下找不到动态链接库(转)

    1.生成静态库 生成静态库使用ar工具,其实ar是archive的意思 $ar cqs libhello.a hello.o 2.生成动态库 用gcc来完成,由于可能存在多个版本,因此通常指定版本号: ...

  7. Error:Failed to resolve: android.arch.core:common:1.1.0

    build. gradle(project)中 allprojects { repositories { jcenter() maven { url 'https://jitpack.io' } ma ...

  8. H5移动端JS操作LocalStorage方法

    LocalStorage和SessionStorage LocalStorage 是对Cookie的优化 没有时间限制的数据存储 在隐私模式下不可读取 大小限制在500万字符左右,各个浏览器不一致 在 ...

  9. DLib压缩解压程序示例

    /* 这是一个示例程序,使用了Dlib库的compress_stream和cmd_line_parser组件. 这个示例实现了一个简单实用的命令行压缩程序. 当使用-h选项时候,程序输出如下: 使用: ...

  10. where 1=1和 0=1 的作用

    where 1=1; 这个条件始终为True,在不定数量查询条件情况下,1=1可以很方便的规范语句. 一.不用where 1=1 在多条件查询中的困扰 举个例子,如果您做查询页面,并且,可查询的选项有 ...