日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2024/1/23 python 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python3的fft_科学网—用Python、Matlab、C实现傅立叶变换FFT() - 康建的博文 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、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() - 康建的博文的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。