快速傅里叶变换(FFT)c语言实现
快速傅里叶变换(FFT)c语言实现:(参考:FFT多种编程语言实现)。注意:输入数据个数必须为2的n次方,数据不够可以用0补齐。
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define PI 3.14159265358979typedef struct Complex
{double real;double image;
} CPLX;void _fft(CPLX buf[], CPLX out[], int n, int step)
{int i;CPLX t;double a, b, c, d, theta;if (step < n) {_fft(out, buf, n, step * 2);_fft(out + step, buf + step, n, step * 2);for (i = 0; i < n; i += 2 * step) {theta = -PI * i / n;a = cos(theta);b = sin(theta);c = out[i + step].real;d = out[i + step].image;t.real = a * c - b * d;t.image = b * c + a * d;buf[i / 2].real = out[i].real + t.real;buf[i / 2].image = out[i].image + t.image;buf[(i + n) / 2].real = out[i].real - t.real;buf[(i + n) / 2].image = out[i].image - t.image;}}
}int fft(CPLX buf[], int n)
{int i;CPLX *out = (CPLX *)malloc(n * sizeof(CPLX));if (out == NULL){return 0;}for (i = 0; i < n; i++){out[i].real = buf[i].real;out[i].image = buf[i].image;}_fft(buf, out, n, 1);free(out);out = NULL;return 1;
}int main()
{#define COUNT 8CPLX buf[COUNT] = { {1.0, 0.0}, {1.0, 0.0}, {1.0, 0.0}, {1.0, 0.0},{0.0, 0.0}, {0.0, 0.0}, {0.0, 0.0} ,{0.0, 0.0} }; //实向量[1, 1, 1, 1, 0, 0, 0, 0]fft(buf, COUNT);for (int i = 0; i < COUNT; i++){if (buf[i].image >= 0.0){printf("%.4f + %.4fi\n", buf[i].real, buf[i].image);}else{printf("%.4f - %.4fi\n", buf[i].real, fabs(buf[i].image));}}return 0;
}
计算结果与matlab的完全一致。
快速傅里叶变换(FFT)c语言实现相关推荐
- 快速傅里叶变换FFT C语言实现 可用于嵌入式系统进行模拟采样频谱分析
快速傅里叶变换C语言实现 模拟采样进行频谱分析 FFT是DFT的快速算法用于分析确定信号(时间连续可积信号.不一定是周期信号)的频率(或相位.此处不研究相位)成分,且傅里叶变换对应的 ω \omega ...
- C语言二维数组范德蒙,浅谈范德蒙德(Vandermonde)方阵的逆矩阵的求法以及快速傅里叶变换(FFT)中IDFT的原理...
浅谈范德蒙德(Vandermonde)方阵的逆矩阵与拉格朗日(Lagrange)插值的关系以及快速傅里叶变换(FFT)中IDFT的原理 标签: 行列式 矩阵 线性代数 FFT 拉格朗日插值 只要稍微看 ...
- Java编程实现快速傅里叶变换FFT
快速傅里叶变换的时间复杂度分析 1 快速傅里叶变换FFT 1.1 理论分析 1.1.1 离散傅里叶变换 1.1.2 快速傅里叶变换 1.2 编程实现 1.2.1 算法思想 1.2.2 实验结果 1 快 ...
- 基于python的快速傅里叶变换FFT(二)
基于python的快速傅里叶变换FFT(二) 本文在上一篇博客的基础上进一步探究正弦函数及其FFT变换. 知识点 FFT变换,其实就是快速离散傅里叶变换,傅立叶变换是数字信号处理领域一种很重要的算 ...
- 基于python的快速傅里叶变换FFT(一)
基于python的快速傅里叶变换FFT(一) FFT可以将一个信号变换到频域.有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了.这就是很多信号分析采用FFT变换的原因. ...
- MIT 线性代数 Linear Algebra 26:复矩阵,傅里叶矩阵, 快速傅里叶变换 FFT
这一讲我们来讲一下复矩阵.线性代数中,复矩阵是避免不了的话题,因为一个简单实矩阵都有可能有复数特征值. 复矩阵 我们着重看一下复矩阵和实矩阵在运算上的区别. 距离 首先,一个复数向量的的距离求法发生了 ...
- Java中实现快速傅里叶变换FFT
Java中实现快速傅里叶变换FFT 一.概述 1.傅里叶变换(FT) 2.离散傅里叶变换(DFT) 3.快速傅里叶变换(FFT) 1)单位根 2)快速傅里叶变换的思想 3)蝶形图 4)快速傅里叶变换的 ...
- OpenCV快速傅里叶变换(FFT)用于图像和视讯流的模糊检测
OpenCV快速傅里叶变换(FFT)用于图像和视频流的模糊检测 翻译自[OpenCV Fast Fourier Transform (FFT) for blur detection in images ...
- Matlab如何进行利用离散傅里叶变换DFT (快速傅里叶变换FFT)进行频谱分析
文章目录 1. 定义 2. 变换和处理 3. 函数 4. 实例演示 例1:单频正弦信号(整数周期采样) 例2:单频正弦信号(非整数周期采样) 例3:含有直流分量的单频正弦信号 例4:正弦复合信号 例5 ...
最新文章
- 江阴市职称计算机考试,要评职称的人请注意!!江阴这些新变化了解一下
- 深度学习与计算机视觉:基于Python的神经网络的实现
- js获取当前日期_vue项目中获取前后N天日期
- 北航c语言简答题目汇总_2020下半年至2021年【化学/计算机/生物类】国际竞赛汇总!...
- jquery程序 windows移植到linux显示不了,windows程序移植linux
- Fabric--使用多通道
- 牛客网测试题--小a和黄金街道
- BCI2000对win10的支持
- 生成随机长度字符串,比如密码等
- andriod studio 查看项目依赖_如何实施CRM项目管理
- 调查了 10,975 位 Go 语言开发者,我们有了这些发现!
- 面向项目(一) —— 代码编写
- python替换word中字符串_python:替换/替换字符串中的所有wholeword匹配
- 全源最短路径 - floyd算法 - O(N ^ 3)
- python爬虫之模拟登陆(CSDN篇)
- 单片机原理及应用姜志海pdf_单片机原理及应用.pdf
- 系统架构师--考试大纲
- 资源——对话框(Dialog Box)
- 【悠然】mysql简单指令笔记
- Kali [Aquatone]子域名探测工具
热门文章
- linux vi 移动光标,linux中vi命令的光标移动操作linux网页制作 -电脑资料
- 计算机专业课的核心素养是什么,基于信息技术学科核心素养的职业高中计算机课程教学研究...
- 洛谷P4799 世界冰球锦标赛 折半搜索
- 曾仕强--情绪管理学习笔记--中国人最需要情绪管理
- 你必须十分努力,才能看起来毫不费力
- 强盗问题动态规划详解
- ​Mirth调用存储过程报错ORA-01861: 文字与格式字符串不匹配​
- Windows部署服务(WDS)
- c++ 求四边形面积和周长_C++中运用类求一个矩形的面积和周长
- 蓝桥杯--平行四边形的面积