用一个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 ...
随机推荐
- (错误)在VMmare中安装centos后不能联网
一.问题 在VMmare中安装centos后不能联网 在Xshell无法连接centos 二.解决方法 2.1 点击Network Adapter 设置如下图所示,首先我们在虚拟机中将网络配置设置成N ...
- iOS-收起键盘
1 除了调用相应控件的resignFirstResponder方法外,还有另外三种办法: 2 重载UIViewController中的touchesBegin方法,然后在里面执行在[self.view ...
- 深入理解隐马尔可夫(HMM)模型
1.安装依赖包hmmlearn 直接pip install hmmlearn可能会报错(安装这个模块需要使用C环境编译) 可以尝试用 conda install -c omnia hmmlearn安装 ...
- 使用使用nltk 和 spacy进行命名实体提取/识别
1. 什么是 命名实体提取? 参考:https://towardsdatascience.com/named-entity-recognition-with-nltk-and-spacy-8c4a7d ...
- Chocolate Eating【二分】
题目链接:https://ac.nowcoder.com/acm/contest/1577/K 题目大意: 给出n块巧克力,m天吃完.每块巧克力有a[i]快乐值,每天可以选择吃任意块或者不吃巧克力(按 ...
- webstorm 2019.1.3 破解
2019.11.28日,已过期,出门右转 https://blog.csdn.net/ft_sunshine/article/details/92065158 1.修改host文件,末尾添加 0.0. ...
- 解决maven项目无法读取src/main/java目录下面的配置文件问题
我们在用Mybatis去操作底层数据库的时候,需要用到xml配置文件,一般我们是把配置文件和dao放置在同一层目录. 但是在用idea操作maven项目的时候,我们可能会遇到无法读取到dao对应的ma ...
- Qt程序开机自动运行
一.写入注册表需要管理员权限 1.开发中生成并运行程序需要写入注册表时,应该以管理员权限打开项目: 2.点击程序运行需要写入注册表,则应该以管理员权限打开此程序. 二.实现 void MoreSetW ...
- 2019ICPC南昌网络赛总结
打的很崩的一场比赛.上来签到题我就wa了一发,感觉在梦游.然后我开了H题,队友开B题,f(n)=3f(n-1)+2f(n)傻子都知道矩阵快速幂,但是1e7的强制在线必须把logn优化,然后试图打表寻找 ...
- post请求 大坑 注意点
如果后台接收的是一个list 前台请求的时候 PLdelete() { //批量删除流量计 console.log(this.multipleSelection instanceof Array,9) ...