用一个N点复序列的FFT同时计算两个N点实序列离散傅里叶变换
一、功能
用一个\(N\)点复序列快速傅立叶变换算法来同时计算两个\(N\)点实序列的离散傅立叶变换。
二、方法简介
假设\(x(n)\)与\(y(n)\)都是长度为\(N\)的实序列,为计算其离散傅立叶变换\(X(k)\)与\(Y(k)\),我们将\(x(n)\)与\(y(n)\)组合成一个复数序列\(h(n)\),
\]
通过FFT 运算可以获得\(h(n)\)的离散傅立叶变换\(H(k)\),\(H(k)\)可表示为
\]
根据求得的\(H(k)\),并利用DFT的奇偶共辄性,我们得到\(X(k)\)和\(Y(k)\)为
\]
三、使用方法
/************************************
x ----长度为n。开始时存放要变换的实数据,最后存放变换结果的前n/2+1个值,
其存储顺序为[Re(0),Re(1),...,Re(n/2),Im(n/2-1),...,Im(1)]。
其中Re(0)=X(0),Re(n/2)=X(n/2)。根据X(k)的共轭对称性,很容易写
出后半部分的值。
y ----长度为n。开始时存放要变换的实数据,最后存放变换结果的前n/2+1个值,
其存储顺序为[Re(0),Re(1),...,Re(n/2),Im(n/2-1),...,Im(1)]。
其中Re(0)=Y(0),Re(n/2)=Y(n/2)。根据Y(k)的共轭对称性,很容易写
出后半部分的值。
n ----数据长度,必须是2的整数次幂,即n=2^m。
************************************/
#include "fft.c"
void r2fft(double *x, double *y int n)
{
int i, n1;
double tr, ti;
n1 = n / 2;
fft(x, y, n, 1);
for(i = 1; i < n1; i++) {
tr = (x[i] + x[n - i]) / 2;
ti = (y[i] - y[n - i]) / 2;
y[i] = (y[n - i] + y[i]) / 2;
y[n - i] = (x[n - i] - x[i]) / 2;
x[i] = tr;
x[n - i] = ti;
}
}
fft.c文件参见快速傅里叶变换
用一个N点复序列的FFT同时计算两个N点实序列离散傅里叶变换的更多相关文章
- 两通道实信号使用一个FFT同时计算算法
前言 在工程的实际应用场景中,往往是需要最省资源量.而DSP资源和BRAM资源对FPGA来说弥足珍贵. 对于同时存在多个通道的实信号需要做FFT而言,常规做法是每个通道用一个FFT IP,FFT IP ...
- 【转】离散傅里叶变换-DFT(FFT)基础
转:https://blog.csdn.net/zhangxz259/article/details/81627341 什么是离散傅里叶变换 matlab例子 本文是从最基础的知识开始讲解,力求用最通 ...
- 实验四 (1):定义一个形状类(Shape)方法:计算周长,计算面积
(1)定义一个形状类(Shape)方法:计算周长,计算面积子类:矩形类(Rectangle) :额外的方法:differ() 计算长宽差圆形类(Circle)三角形类(Triangle)正方形类(Sq ...
- 给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度为O(N),且要求不能用非基于比较的排序
题目: 给定一个数组,求如果排序之后,相邻两数的最大差值,要求时间复杂度为O(N),且要求不能用非基于比较的排序 public static int maxGap(int nums[]) { if ( ...
- 青蛙的约会 扩展欧几里得 方程ax+by=c的整数解 一个跑道长为周长为L米,两只青蛙初始位置为x,y;(x!=y,同时逆时针运动,每一次运动分别为m,n米;问第几次运动后相遇,即在同一位置。
/** 题目:青蛙的约会 链接:https://vjudge.net/contest/154246#problem/R 题意:一个跑道长为周长为L米,两只青蛙初始位置为x,y:(x!=y,同时逆时针运 ...
- Leetcode:105. 从前序与中序遍历序列构造二叉树&106. 从中序与后序遍历序列构造二叉树
Leetcode:105. 从前序与中序遍历序列构造二叉树&106. 从中序与后序遍历序列构造二叉树 Leetcode:105. 从前序与中序遍历序列构造二叉树&106. 从中序与后序 ...
- Java初学者作业——编写Java程序,输入一个数字,实现该数字阶乘的计算。
返回本章节 返回作业目录 需求说明: 编写Java程序,输入一个数字,实现该数字阶乘的计算.一个数字的阶乘是所有小于及等于该数的正整数的积,自然数n的阶乘写作n! .例如,5的阶乘等于1*2*3*4* ...
- 编写Java程序,创建一个父类交通工具类(Vehicles),以及两个子类,分别是轿车类(Car)和卡车类(Truck)。
返回本章节 返回作业目录 需求说明: 创建一个父类交通工具类(Vehicles),以及两个子类,分别是轿车类(Car)和卡车类(Truck). 父类有属性品牌(brand)和颜色(color). 在父 ...
- jQuery实现一个全选复选框联动效果
类似邮件列表里的复选框 要求双向联动 ☛ [实现]: <body> <div> <input type="checkbox" name="c ...
随机推荐
- 123457123456---com.threeObj3.BabyShizi02--- 宝宝识字02
com.threeObj3.BabyShizi02--- 宝宝识字02
- 导出 VuePress构建的网站为 PDF
前言 学 Rust 也有一段时间了,网上也有不少官方文档的中文翻译版,但是似乎只有 Rust中文网站 文档一直是最新的,奈何并没有 PDF 供直接下载,是在是不太方便,为了方便阅读以及方便后续文档更新 ...
- 配置Apache控制浏览器端的缓存的有效期
这个非常有用的优化,mod_expires可以减少20-30%左右的重复请求,让重复的用户对指定的页面请求结果都CACHE在本地,根本不向服务器发出请求.但要注意更新快的文件不要这么做.这个模块控制服 ...
- Kafka管理与监控——broker宕机后无法消费问题
背景 因磁盘满了,导致kafka所有的服务器全部宕机了,然后重启kafka集群,服务是启动成功了,但有一些报错: broker1: broker2: broker3:一直在刷以下错误信息 虽然报了这些 ...
- 小程序scroll-view 使用
<scroll-view class="box" scroll-x="true" > <view </view> <view ...
- WPF窗体应用程序开发
1.Window:登录窗口.主窗体.消息框 2.UserControl:业务界面.消息框(如果使用UC来实现,则需要做特殊的处理,比如中断功能如何处理?)(显示一个UC,必须将其添加到容器中,所以&l ...
- C#登录SSH执行命令,下载文件
前言 批量登录SSH执行命令 ,把应急响应中的日志文件下载回来. 代码实现 Renci.SshNet编译出DLL,引用. using System; using System.Collections. ...
- JMETER安装教程
jmeter的安装教程 1:安装jdk并且配置好环境变量,此处就不做赘述(前面的文档中有) 2:下载jmeter文件和jmeter的插件文件 JMeter:http://jmeter.apache.o ...
- laravel的ORM转为原生sql
注:mysql测试成功,mongoDB测试失败//将laravel的ORM转为原生sql $SubProfits为laravel的ORM对象 $SubProfits = model::where('i ...
- Object Detection in 20 Years: A Survey【持续更新中】
原文:https://www.cnblogs.com/zhaojunjie/p/10886099.html 论文链接:https://arxiv.org/pdf/1905.05055.pdf 1. 引 ...