python實現傅利葉變換和反變換

2021-09-18 07:15:09 字數 1803 閱讀 3363

首先理解下傅利葉變換

如果還看不懂傅利葉變換,請掐死我吧!

import numpy as np

from math import*x=

[1,2

,3,4

,5]'''傅利葉變換'''

deffft

(x):

x = np.asarray(x, dtype=

float

) n = x.shape[0]

n = np.arange(n)

k = n.reshape(

(n,1))

m = np.exp(-2j

* np.pi * k * n / n)

f = np.dot(m, x)

return f

##########c++裡沒有numpy包,需要迴圈遍歷####################

deffft1

(a):

n =len(a)

f =for k in

range

(n):

f =0for m in

range

(n):

f += a[m]

* e**(-

2j* pi *

(m*k)

/ n)

return f

############三角函式代替指數函式#################

deffft2

(data)

: length=

len(data)

fftdata =[0

+0j]*length

print

(fftdata)

for k in

range

(length)

:for i in

range

(length)

: fftdata[k]

+= data[i]

*(cos(-2

*pi*k*i/length)+1j

*sin(-2

*pi*k*i/length)

)return fftdata

'''傅利葉反變換'''

defifft1

(a):

n =len(a)

f =for k in

range

(n):

f =0for m in

range

(n):

f += a[m]

* e**(2j

* pi *

(m*k)

/ n)

/nreturn f

############三角函式代替指數函式#################

defifft2

(data)

: length=

len(data)

ifftdata =[0

+0j]*length

print

(ifftdata)

for k in

range

(length)

:for i in

range

(length)

: ifftdata[k]

+= data[i]

*(cos(

2*pi*k*i/length)+1j

*sin(

2*pi*k*i/length)

)/length

return ifftdata

快速傅利葉變換程式與反變換程式

快速傅利葉變換程式 include stdafx.h include define pi 3.14159265359 define m 8 取反函式 int rebit int num,int p return rb 1 2的次方函式 inline int pow2 int n for i 0 i ...

離散傅利葉變換 快速傅利葉變換C 實現

傅利葉變換是將時域訊號變換為頻域訊號的一種方式,我主要用它來做兩件事情 1 求一段資料的週期性。2 通過傅利葉變換及其逆變換,進行低通濾波 去躁 首先需要做幾點說明 1.快速傅利葉變換是離散傅利葉變換的快速演算法,當資料來源較大時 大於1000 快速傅利葉變換有明顯優勢。2.快速傅利葉變換的訊號源長...

傅利葉變換與反變換 李永樂老師筆記

一 傅利葉分解 任何乙個時域空間的週期性函式都可以分解成一組正 餘 弦波,圖一 二 傅利葉變換 時域函式 頻域函式 f t 經過f操作分解成一組正余弦波 f操作為傅利葉變換 圖二 怎麼在頻域空間描述這組正余弦波呢,直覺的答案是用不同頻率和相應的振幅來描述 比如3w頻率波的振幅大約是w頻率波振幅的一半...