快速傅里叶变换(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语言实现相关推荐

  1. 快速傅里叶变换FFT C语言实现 可用于嵌入式系统进行模拟采样频谱分析

    快速傅里叶变换C语言实现 模拟采样进行频谱分析 FFT是DFT的快速算法用于分析确定信号(时间连续可积信号.不一定是周期信号)的频率(或相位.此处不研究相位)成分,且傅里叶变换对应的 ω \omega ...

  2. C语言二维数组范德蒙,浅谈范德蒙德(Vandermonde)方阵的逆矩阵的求法以及快速傅里叶变换(FFT)中IDFT的原理...

    浅谈范德蒙德(Vandermonde)方阵的逆矩阵与拉格朗日(Lagrange)插值的关系以及快速傅里叶变换(FFT)中IDFT的原理 标签: 行列式 矩阵 线性代数 FFT 拉格朗日插值 只要稍微看 ...

  3. Java编程实现快速傅里叶变换FFT

    快速傅里叶变换的时间复杂度分析 1 快速傅里叶变换FFT 1.1 理论分析 1.1.1 离散傅里叶变换 1.1.2 快速傅里叶变换 1.2 编程实现 1.2.1 算法思想 1.2.2 实验结果 1 快 ...

  4. 基于python的快速傅里叶变换FFT(二)

    基于python的快速傅里叶变换FFT(二) 本文在上一篇博客的基础上进一步探究正弦函数及其FFT变换. 知识点   FFT变换,其实就是快速离散傅里叶变换,傅立叶变换是数字信号处理领域一种很重要的算 ...

  5. 基于python的快速傅里叶变换FFT(一)

    基于python的快速傅里叶变换FFT(一) FFT可以将一个信号变换到频域.有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了.这就是很多信号分析采用FFT变换的原因. ...

  6. MIT 线性代数 Linear Algebra 26:复矩阵,傅里叶矩阵, 快速傅里叶变换 FFT

    这一讲我们来讲一下复矩阵.线性代数中,复矩阵是避免不了的话题,因为一个简单实矩阵都有可能有复数特征值. 复矩阵 我们着重看一下复矩阵和实矩阵在运算上的区别. 距离 首先,一个复数向量的的距离求法发生了 ...

  7. Java中实现快速傅里叶变换FFT

    Java中实现快速傅里叶变换FFT 一.概述 1.傅里叶变换(FT) 2.离散傅里叶变换(DFT) 3.快速傅里叶变换(FFT) 1)单位根 2)快速傅里叶变换的思想 3)蝶形图 4)快速傅里叶变换的 ...

  8. OpenCV快速傅里叶变换(FFT)用于图像和视讯流的模糊检测

    OpenCV快速傅里叶变换(FFT)用于图像和视频流的模糊检测 翻译自[OpenCV Fast Fourier Transform (FFT) for blur detection in images ...

  9. Matlab如何进行利用离散傅里叶变换DFT (快速傅里叶变换FFT)进行频谱分析

    文章目录 1. 定义 2. 变换和处理 3. 函数 4. 实例演示 例1:单频正弦信号(整数周期采样) 例2:单频正弦信号(非整数周期采样) 例3:含有直流分量的单频正弦信号 例4:正弦复合信号 例5 ...

最新文章

  1. 江阴市职称计算机考试,要评职称的人请注意!!江阴这些新变化了解一下
  2. 深度学习与计算机视觉:基于Python的神经网络的实现
  3. js获取当前日期_vue项目中获取前后N天日期
  4. 北航c语言简答题目汇总_2020下半年至2021年【化学/计算机/生物类】国际竞赛汇总!...
  5. jquery程序 windows移植到linux显示不了,windows程序移植linux
  6. Fabric--使用多通道
  7. 牛客网测试题--小a和黄金街道
  8. BCI2000对win10的支持
  9. 生成随机长度字符串,比如密码等
  10. andriod studio 查看项目依赖_如何实施CRM项目管理
  11. 调查了 10,975 位 Go 语言开发者,我们有了这些发现!
  12. 面向项目(一) —— 代码编写
  13. python替换word中字符串_python:替换/替换字符串中的所有wholeword匹配
  14. 全源最短路径 - floyd算法 - O(N ^ 3)
  15. python爬虫之模拟登陆(CSDN篇)
  16. 单片机原理及应用姜志海pdf_单片机原理及应用.pdf
  17. 系统架构师--考试大纲
  18. 资源——对话框(Dialog Box)
  19. 【悠然】mysql简单指令笔记
  20. Kali [Aquatone]子域名探测工具

热门文章

  1. linux vi 移动光标,linux中vi命令的光标移动操作linux网页制作 -电脑资料
  2. 计算机专业课的核心素养是什么,基于信息技术学科核心素养的职业高中计算机课程教学研究...
  3. 洛谷P4799 世界冰球锦标赛 折半搜索
  4. 曾仕强--情绪管理学习笔记--中国人最需要情绪管理
  5. 你必须十分努力,才能看起来毫不费力
  6. 强盗问题动态规划详解
  7. ​Mirth调用存储过程报错ORA-01861: 文字与格式字符串不匹配​
  8. Windows部署服务(WDS)
  9. c++ 求四边形面积和周长_C++中运用类求一个矩形的面积和周长
  10. 蓝桥杯--平行四边形的面积