作者:桂。

时间: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. android形状drawable

    1.在res目录下新建drawable目录. 2.新建一个xml文件. 3.採用drawable来定义资源. <? xml version="1.0" encoding=&q ...

  2. 前台登录和Token信息交互流程

    原来总是对前台登录,怎么利用token有点迷惑,后面仔细的想了一遍,把自己简单的想法记录下来,留作记录,以便后续优化 各路大神有什么看法也可以说,能更完善整个流程. 不说了,暴力的上图: 该图是出自c ...

  3. iWatch应用开发-oc篇

    1.创建项目 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/di ...

  4. 〖Android〗dropbear一些操作命令备忘

    相关命令行: # 启动dropbear后台运行 /data/local/tmp/dropbear \ -A -N android -I -C -G -p \ -R /data/local/tmp/au ...

  5. python之模块calendar(汇集了日历相关的操作)

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #calendar日历模块 import calendar #3个大类: calendar.Calendar( ...

  6. JUC-线程池

    一,问题 在没有使用线程池的时候,每次需要一个线程都得手动new Thread()方式创建线程,用完了再销毁. 我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发 ...

  7. ISO七层协议

    1 OSI参考模型 谈到网络不能不谈OSI参考模型,虽然OSI参考模型的实际应用意义不是很大,但其的确对于理解网络协议内部的运作很有帮助,也为我们学习网络协议提供了一个很好的参考.在现实网络世界里,T ...

  8. std::string std::wstring 删除最后元素 得到最后元素

    std::string str = "abcdefg,"; std::cout << "last character:"<<str.ba ...

  9. 【LeetCode】Missing Ranges

    Missing Ranges Given a sorted integer array where the range of elements are [lower, upper] inclusive ...

  10. 【MAVEN】如何在Eclipse中创建MAVEN项目

    目录结构: contents structure [+] 1,Maven简介 2,Maven安装 2.1,下载Maven 2.2,配置环境变量 2.3,测试 3,Maven仓库 3.1,Maven仓库 ...