1、連續周期信號的傅立葉級數
由傅立葉級數的形式可以看出,其都屬于積分形式,故在MATLAB中和Python中均可以用積分函數來實現求解。
例:Python中代碼如下:
"""
連續周期信號的傅立葉級數
"""
from sympy import cos,sin
from sympy.abc import t,n,y
from scipy import integrate
import numpy as np
import matplotlib.pyplot as plt
nf=30
T=10
tao=1.0
an=np.zeros(nf)
bn=np.zeros(nf)
cn=np.zeros(nf)
phase=np.zeros(nf)
y=1
half0,err0=integrate.quad(lambda t:y,-tao/2,tao/2)
an[0]=2*half0/T
for n in range(1,nf):
half,err=integrate.quad(lambda t:2*y*cos(2.0/T*np.pi*n*t),-tao/2,tao/2)
an[n]=half/10
half1,err1=integrate.quad(lambda t:2*y*sin(2.0/T*np.pi*n*t),-tao/2,tao/2)
bn[n]=half1/10
cn[n]=np.sqrt(an[n]**2+bn[n]**2)
for i in range(0,nf):
if an[i]>=0:
phase[i]=0
else:
phase[i]=np.pi
k=np.arange(0,nf)
plt.subplot(211)
plt.title(u'幅度譜')
plt.stem(k,cn)
plt.subplot(212)
plt.title(u'相位譜')
plt.stem(k,phase)
plt.show()
運行結果:
2、連續非周期信號的傅立葉變換
在MATLAB中實現傅立葉變換的調用格式為:
F=fourier(f)
F是符號函數f的傅立葉變換,默認返回是關于w的函數;
F=fourier(f,v)
F是關于符號對象v的函數,而不是w;
F=fourier(f,u,v)
函數f是關于符號對象u的函數,F是關于符號對象v的函數。
Python中,用fourier_transform函數來實現傅立葉變換,須注意的是,Python運行結果的自變量不是角頻率w而是頻率f。
例:Python代碼如下:
"""
連續非周期信號的傅立葉變換
"""
from sympy import fourier_transform,exp,plot,Heaviside,atan,im,re,pi
from sympy.abc import t,f
ft=exp(-2*t)*Heaviside(t)
F=fourier_transform(ft,t,f)
plot(abs(F))
plot(atan(im(F)/re(F)))
運行結果:
3、連續非周期信號的傅立葉逆變換
在MATLAB中,傅立葉逆變換的調用格式為:
f=ifourier(F)
f=ifourier(F,u)
f=ifourier(F,v,u)
在Python中,用inverse_fourier_transform函數來實現傅立葉逆變換。
例:Python中代碼如下:
"""
傅立葉逆變換
"""
from sympy import inverse_fourier_transform,exp,sqrt,pi,plot
from sympy.abc import t,f
F=1/(1+(2*pi*f)**2)
ft=inverse_fourier_transform(F,f,t)
plot(abs(F))
plot(ft)
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
