一、Python,使用numpy.fft.fft或scipy的fftpack.fft:

import numpy as np

t=np.array([0.300, 0.550, 1.119, 0.538, 0.857, 1.069, 0.369, 0.206, 1.000,

0.550, 1.119, 1.538, 1.557, 1.069, 1.369, 0.606])

ff=np.fft.fft(t)

print(ff)

from scipy import fftpack

f=fftpack.fft(t)

for i in f:

print("{0.real:.4f}{0.imag:+.4f}j".format(i))

输出结果:

[ 1.38160000e+01+0.j -6.02483817e-03+2.48405969j

-2.74175981e+00-0.65980613j -3.30153876e-01-0.00602484j

-2.62000000e-01-0.35j -2.48405969e+00-0.0202384j

5.13759810e-01+0.34019387j 2.02384005e-02-0.33015388j

1.56400000e+00+0.j 2.02384005e-02+0.33015388j

5.13759810e-01-0.34019387j -2.48405969e+00+0.0202384j

-2.62000000e-01+0.35j -3.30153876e-01+0.00602484j

-2.74175981e+00+0.65980613j -6.02483817e-03-2.48405969j]

13.8160+0.0000j

-0.0060+2.4841j

-2.7418-0.6598j

-0.3302-0.0060j

-0.2620-0.3500j

-2.4841-0.0202j

0.5138+0.3402j

0.0202-0.3302j

1.5640+0.0000j

0.0202+0.3302j

0.5138-0.3402j

-2.4841+0.0202j

-0.2620+0.3500j

-0.3302+0.0060j

-2.7418+0.6598j

-0.0060-2.4841j

二、用Matlab:

A=[0.300; 0.550; 1.119; 0.538; 0.857; 1.069; 0.369; 0.206; 1.000;0.550; 1.119; 1.538; 1.557; 1.069; 1.369; 0.606]

B=fft(A)

输出:

B =

13.8160

-0.0060 + 2.4841i

-2.7418 - 0.6598i

-0.3302 - 0.0060i

-0.2620 - 0.3500i

-2.4841 - 0.0202i

0.5138 + 0.3402i

0.0202 - 0.3302i

1.5640

0.0202 + 0.3302i

0.5138 - 0.3402i

-2.4841 + 0.0202i

-0.2620 + 0.3500i

-0.3302 + 0.0060i

-2.7418 + 0.6598i

-0.0060 - 2.4841i

三、用C语言

// fft20200202.cpp : kangjian, console application.

#include "stdafx.h"

#include

#include

#define PI 3.1415926535

typedef struct{ double R; double I;

}COMPLEX;

COMPLEX add(COMPLEX a,COMPLEX b)

{ COMPLEX c;

c.R=a.R+b.R; c.I=a.I+b.I; return c;

}

COMPLEX sub(COMPLEX a,COMPLEX b)

{ COMPLEX c;

c.R=a.R-b.R; c.I=a.I-b.I; return c;

}

COMPLEX mul(COMPLEX a,COMPLEX b)

{ COMPLEX c;

c.R=a.R*b.R-a.I*b.I; c.I=a.R*b.I+b.R*a.I;

return c;

}

int nx(int k,int p)

{ int q,t=0;

for(q=0;q

if((1<

t+=1<

return t;

}

void kj_FFT(COMPLEX *T,COMPLEX *F,int p)

{ int N,q,k,r,j,i,t;

COMPLEX *A1,*A2, *W;

double a;

N=1<

A1=(COMPLEX *)malloc(sizeof(COMPLEX)*N);

A2=(COMPLEX *)malloc(sizeof(COMPLEX)*N);

W =(COMPLEX *)malloc(sizeof(COMPLEX)*N/2);

for(i=0;i

A1[i]=T[i];

for(i=0;i

{ a=-i*2*PI/N;

W[i].R=cos(a);

W[i].I=sin(a);

}

for(q=0;q

{for(k=0;k<1<

{ r=1<

for(j=0;j

{ t=k*( 1<

A2[j+t] =add(A1[j+t], mul(A1[j+t+r],W[ nx((j+t)>>(p-q-1),p)]) );//

A2[j+t+r]=sub(A1[j+t], mul(A1[j+t+r],W[ nx((j+t)>>(p-q-1),p)]) );

}

}

for(i=0;i

A1[i]=A2[i];

}

for(i=0;i

{

F[i].R=A2[nx(i,p)].R/N;

F[i].I=A2[nx(i,p)].I/N;

}

}

int testfft()

{ int n=16,i,p=4;

double y[16]={0.300, 0.550, 1.119, 0.538, 0.857, 1.069, 0.369, 0.206, 1.000,

0.550, 1.119, 1.538, 1.557, 1.069, 1.369, 0.606};

COMPLEX *pT,*pF;

pT=(COMPLEX *)malloc(sizeof(COMPLEX)*n);//no free

pF=(COMPLEX *)malloc(sizeof(COMPLEX)*n);

for(i=0;i

{ pT[i].R=y[i];

pT[i].I=0.;

}

kj_FFT(pT,pF,p);

for(i=0;i

{ pF[i].R=pF[i].R*n; // python,no /N,

pF[i].I=pF[i].I*n;

printf("%.4lf,%+.4lfj\n" ,pF[i].R, pF[i].I );

}

return 0;

}

int main(int argc, char* argv[])

{ testfft();

return 0;

}

输出结果:

13.8160,+0.0000j

-0.0060,+2.4841j

-2.7418,-0.6598j

-0.3302,-0.0060j

-0.2620,-0.3500j

-2.4841,-0.0202j

0.5138,+0.3402j

0.0202,-0.3302j

1.5640,+0.0000j

0.0202,+0.3302j

0.5138,-0.3402j

-2.4841,+0.0202j

-0.2620,+0.3500j

-0.3302,+0.0060j

-2.7418,+0.6598j

-0.0060,-2.4841j

C语言不容易调试,一但编写成功,速度和可用性还是有优势的。

转载本文请联系原作者获取授权,同时请注明本文来自康建科学网博客。

链接地址:http://blog.sciencenet.cn/blog-797552-1216569.html

上一篇:让EXCEL帮你念成绩单,录入校对

下一篇:准备上网课时用到的小程序段

python3的fft_科学网—用Python、Matlab、C实现傅立叶变换FFT() - 康建的博文相关推荐

  1. c语言 奥数题目及答案,科学网—C语言做一道小学奥数题 - 康建的博文

    见过一道小学奥数题,记得题目是:从5月1日到7月1日数字0-9无重复的时间有多少个?(如0512142804是05月12日14:28:04,其中0.1.4有重复, 0526174839无重复). 大概 ...

  2. c语言 奥数题目及答案,科学网-C语言做一道小学奥数题-康建的博文

    见过一道小学奥数题,记得题目是:从5月1日到7月1日数字0-9无重复的时间有多少个?(如0512142804是05月12日14:28:04,其中0.1.4有重复, 0526174839无重复). 大概 ...

  3. python的安装包下载_科学网—[转载]python常用的安装包下载 - 林清莹的博文

    Python常用的安装包下载 1.首先应该下载dlib安装包(例如:dlib-19.8.1-cp36-cp36m-win_amd64.whl) 可以通过此网址进行下载对应的dlib包   https: ...

  4. 如何用python爬视频_科学网—利用python爬取一个小视频 - 李鸿斌的博文

    工具 : requests 库 解析: beautifulsoup 任务: 视频抓取 1,分析目标网站 寻找一个虚拟的头文件 User-Agent: Mozilla/5.0 (Windows NT 6 ...

  5. matlab回归分析结果输出,科学网—回归分析的MATLAB和R程序实现 - 王福昌的博文...

    前面博客中已经讲过MATLAB中常用的命令拟合polyfit() , lsqcurvefit() ,nlinfit()  和 cftool等,这里简单介绍简单的回归分析的MATLAB和R语言实现. 例 ...

  6. 为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换?

    https://www.douban.com/note/164400821/ 写在最前面:本文是我阅读了多篇相关文章后对它们进行分析重组整合而得,绝大部分内容非我所原创.在此向多位原创作者致敬!!! ...

  7. 【转】为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换?...

    写在最前面:本文是我阅读了多篇相关文章后对它们进行分析重组整合而得,绝大部分内容非我所原创.在此向多位原创作者致敬!!!一.傅立叶变换的由来关于傅立叶变换,无论是书本还是在网上可以很容易找到关于傅立叶 ...

  8. 为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换

    [纯技术帖]为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换来源: 陈诚--WECN的日志 写在最前面:本文是我阅读了多篇相关文章后对它们进行分析重组整合而得,内容 ...

  9. 傅立叶变换的原理、意义以及如何用Matlab实现快速傅立叶变换

    本帖最后由 xiaoliu 于 2011-7-28 21:00 编辑 一.傅立叶变换的由来 关于傅立叶变换,无论是书本还是在网上可以很容易找到关于傅立叶变换的描述,但是大都是些故弄玄虚的文章,太过抽象 ...

最新文章

  1. 广东科技学院专插本c语言考卷_广东科技学院第二届红色文化节之红色影视经典配音大赛决赛...
  2. 自定义notebook扩展插件_Jupyter notebook安装扩展插件
  3. Metasploit advanced命令使用技巧
  4. linux c 常用函数
  5. DB2 导入导出总结
  6. HDU 1506 Largest Rectangle in a Histogram(dp、单调栈)
  7. matlab循环遍历数组_Matlab - 访问for循环中最大值的索引,并使用它从数组中删除值...
  8. webview 防止js注入_天台县js聚合物水泥防水涂料的作用
  9. matlab 散点图 线性回归图_吴恩达机器学习编程作业ex1-Matlab版
  10. android权限检查
  11. matlab编写LDA,lda算法matlab实现
  12. 公路护栏设计技术简析
  13. android studio 官方虚拟机,Android Studio 移动虚拟机
  14. 点, 直线, 平面的位置关系剩余部分快速学习笔记
  15. 1th matlab与遗传算法工具箱
  16. spi通信问题-有波形但无法获取正确数据:MOSI和SCK
  17. mscbsc移动通信论坛_中国移动5G资费被确认,流量低至1毛/G, 联通电信又被动,网友:良心价...
  18. 损坏的映像 错误0xc0000020
  19. Error handling response: TypeError: Cannot read property ‘1‘ of null
  20. 区间再现公式的理解与应用

热门文章

  1. java设计模式--单例设计模式
  2. P8实战(一):架构概论,从过去到未来
  3. Java程序员需要掌握的计算机底层知识(四):内存管理
  4. 【Spring MVC】自定义拦截器 Interceptor
  5. 并发和Read-copy update(RCU)
  6. @SessionAttributes 和 @SessionAttribute的区别
  7. mysql移植海思_海思Hi3518EV200(5)图像sensor驱动开发
  8. Maven——常用命令详解
  9. Spring之高级装配(二)
  10. 微信小程序开发与应用 第一章 微信小程序的基本知识1