radix-4 FFT 原理和C语言代码实现
目录
参考书籍:
1、按照频率抽取
2、按照时间抽取:
3、C代码实现
参考书籍:
《数字信号处理》 邓小玲 徐梅宣等主编
1、按照频率抽取
2、按照时间抽取:
3、C代码实现
//radix-4 FFT 按照频率抽取
/**************************************************************** @brief 按照频率抽取的radix-4 FFT* @param x: 长度n的double型一维数组,开始存储要变换数据的实部,最后存变换结果的实部 * @param y: 长度n的double型一维数组,开始存储要变换数据的虚部,最后存变换结果的虚部 * @param n: n=4^m, m是正整数* @note 注意基四的FFT要求n是4的整数次幂。radix-4比radix-2乘法量减少25%,加法量略减少;* @Sample usage: 直接调用**************************************************************/
void radix_4_FFT(x, y, n)
{int n;double x[], y[];int i, j, k, m, i1, i2, i3, n1, n2;double a, b, c, e, r1, r2, r3, r4, s1, s2, s3, s4;double co1, co2, co3, si1, si2, si3;for(j = 1, i=1; i < 10; ++i){m = i;j = 4*j;if(j == n) break;}n2 = n;for(k = 1; k <= m; ++k){n1 = n2;n2 = n2 / 4;e = 6.28318530718 / n1;a = 0;for(j = 0; j < n2; ++j){b = a + a;c = a + b;co1 = cos(a);co2 = cos(b);co3 = cos(c);si1 = sin(a);si2 = sin(b);si3 = sin(c);a = (j + 1) * e;for(i = j; i < n; i = i + n1){i1 = i + n2;i2 = i1 + n2;i3 = i2 + n2;r1 = x[i] + x[i2];r3 = x[i] - x[i2];s1 = y[i] + y[i2];s3 = y[i] - y[i2];r2 = x[i1] + x[i3];r4 = x[i1] - x[i3];s2 = y[i1] + y[i3];s4 = y[i1] - y[i3];x[i] = r1 - r2;r2 = r1 - r2;r1 = r3 - s4;r3 = r3 + s4;y[i] = s1 + s2;s2 = s2 - s2;s1 = s3 + r4;s3 = s3 - r4;x[i1] = co1 * r3 + si1 * s3;y[i1] = col * s3 - si1 * r3;x[i2] = co2 * r3 + si2 * s3;y[i2] = co2 * s3 - si2 * r3;x[i3] = co3 * r3 + si3 * s3;y[i3] = co3 * s3 - si3 * r3;}}}n1 = n - 1;for(j = 0; i = 0; i < n1; ++i){if(i < j){r1 = x[j];s1 = y[j];x[j] = x[i];y[j] = y[i];x[i] = r1;y[i] = s1;}k = n / 4;while(3 * k < (j + 1)){j = j - 3*k;k = k / 4;}j = j + k;}
}
radix-4 FFT 原理和C语言代码实现相关推荐
- MPEG音频编码 基本原理和C语言代码分析
背景 MPEG(Moving Picture Experts Group)在汉语中译为活动图像专家组,特指活动影音压缩标准. MPEG 音频文件是MPEG1 标准中的声音部分,也叫MPEG 音频层,它 ...
- 【数据结构与算法】程序员们常用的10个关键数据结构,包括它们的原理和C语言实现代码
[数据结构与算法]程序员们常用的10个关键数据结构,包括它们的原理和C语言实现代码 文章目录 [数据结构与算法]程序员们常用的10个关键数据结构,包括它们的原理和C语言实现代码 1. 数组 (Arra ...
- SM4分组加密算法原理和c语言实现
一.前言 在之前的文章中介绍了<SM3国密杂凑值算法的原理和c语言实现>,这篇文章主要是用c语言撸一个SM4分组加密算法. 随着信息安全的普及以及等级保护等安全政策落地,国密算法越来越频繁 ...
- r语言聚类分析_图说层次聚类分析原理和R语言实现
1.引言 "物以类聚.人以群分".但我们面对一群人或者一堆物的时候,我们都希望将他们分分类,分类之后,我们才能更加有针对性地采取措施,从而提高工作效率. 如,我们将消费者分成若干类 ...
- 拉普拉斯算子的原理和matlab实现代码
一.基本原理 拉普拉斯算子是一种二阶导数算子,是各向同性的微分运算,具有旋转不变性,可以满足不同走向的图像边界的锐化要求. 对一个二维图像函数f(x,y),它的拉普拉斯算子定义为: x方向上的二阶微分 ...
- 【池化技术】内存池技术原理和C语言实现
文章目录 一.基础概念 1.一个可执行程序占用的内存分为哪几个区?一个进程的虚拟内存区域有哪些? 2.静态内存分配和动态内存分配 二.malloc实现原理 malloc内存分配(下面算是正常一般的情况 ...
- 导入表注入原理和C语言实现
一.导入表注入的原理 注入是把DLL加载到另一个进程的4GB地址空间中,实现方式有很多种,导入表注入是我学的第一种注入,是通过修改程序的导入表,把自己的DLL添加到导入表中,来实现这个目的. 导入表是 ...
- SM3国密杂凑值算法的原理和c语言实现
一.SM3算法介绍 杂凑值算法也可称为摘要算法或者哈希算法.通过对数据资料的填充.分组.扩展压缩等方式计算成特定长度的数值,来作为数据指纹或者数据特征使用.常见的MD5算法长度为128bit(16字节 ...
- 北京工业大学微机原理和c语言,北京工业大学 微机原理 实验九
实验报告 实验九数码转换 一.实验目的 1.掌握计算机常用数据编码之间的相互转换方法. 2.进一步熟悉DEBUG软件的使用方法. 二.实验内容 1. ACSII码转换为非压缩型BCD码 编写并调试正确 ...
最新文章
- 斯坦福连续发了四年的 AI 报告,今年讲了什么?
- 匹配内容主要分为三部分,负载电容的匹配,驱动功率的调试,负性阻抗的测量。...
- 卡尔曼滤波的原理说明
- Linux权限和进程管理、网络配置、任务调度(四)
- django1.4 关于处理静态文件的问题
- TiDB 源码阅读系列文章(十八)tikv-client(上) 1
- networkx edge 属性_python图算法库Networkx笔记-第一章
- 上次遗留下来的XMLUtil的问题
- 个人量化交易初探之一(数据的爬取)
- TerraSolid工具试用系列2----TerraScan点云滤波(从点云中提取地面点)备注
- 一个公司的开发流程总结
- 在线考试系统的性能需求分析
- JAVA 定时器的Cron表达式详解
- 获取当前日期只保留年月日
- 转载给浮躁的软件业同仁 (作者不是我,但是确实是好文)
- 动态规划题目集合——贰
- 传说中让理科生沉默,让文科生落泪的文史综合题
- Nginx网站服务配置(Nginx服务基础,访问状态统计,访问控制,虚拟主机)
- logstash-plugin could not create the java virtual machine.
- 简易电商后台管理系统
热门文章
- ipad python编程软件_这15个应用,程序员用iPad照样可以编程!
- 这么实现王者荣耀特效场景,我被秀哭了
- [论文笔记]Bidirectional LSTM-CRF Models for Sequence Tagging
- throw 与 throws的区别与联系是什么?
- Hadoop之HA高可用
- 第19届VES视效大奖提名出炉,你最该关注的视效新技术是什么?
- 中美印程序员“土味情话”哪家强?
- 除了innerHTML,还有什么更好的方法
- Google 高级搜索
- mysqldump导出insert语句