谷动谷力

 找回密码
 立即注册
查看: 2000|回复: 0
打印 上一主题 下一主题
收起左侧

python实现简单的傅里叶变换

[复制链接]
跳转到指定楼层
楼主
发表于 2022-10-14 21:17:16 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
python实现简单的傅里叶变换

傅里叶变换参考:

傅里叶变换之掐死教程-前言-谷动谷力 (sunsili.com)

傅里叶变换之掐死教程-傅里叶级数(Fourier Series)-谷动谷力 (sunsili.com)

傅里叶变换之掐死教程-指数形式的傅里叶变换-谷动谷力 (sunsili.com)

傅里叶变换之掐死教程-嘛叫频域 概念讲解-谷动谷力 (sunsili.com)

傅里叶变换之掐死教程-宇宙耍帅第一公式:欧拉公式-谷动谷力 (sunsili.com)

傅里叶变换之掐死教程-相位普-谷动谷力 (sunsili.com)


python实现实例

实例1.


实例2.


实例3.


具体代码

以第一个函数为例

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-

  3. from pylab import *
  4. import matplotlib.pyplot as plt
  5. from sympy import * #用于求导积分等科学计算
  6. from scipy.integrate import tplquad,dblquad,quad

  7. #原函数f(x)={ exp(x),  -pi≤x<0
  8. #              1, 0≤x<pi}

  9. ax1 = plt.subplot(2, 2, 1)
  10. ax2 = plt.subplot(2, 2, 2)
  11. ax3=plt.subplot(2, 2, 3)
  12. ax4=plt.subplot(2, 2, 4)

  13. #原函数
  14. x_value=[]
  15. y_value=[]
  16. for i in np.arange(-pi, pi, 0.01):
  17.     if(i<0):
  18.         x_value.append(i)
  19.         y_value.append(i+pi)
  20.     else:
  21.         x_value.append(i)
  22.         y_value.append(pi-i)

  23. plt.sca(ax1)
  24. plt.plot(x_value,y_value,'orange',linewidth=0.6)
  25. plt.title('original function')

  26. a_value = []
  27. b_value = []

  28. from pylab import *
  29. x = mgrid[-10:10:0.02]  
  30. def fourier_transform():
  31.     plt.sca(ax2)
  32.     m1, err1 = quad(lambda m: np.exp(m), -np.pi, 0)
  33.     m2,err2=quad(lambda m: 1, 0, np.pi)
  34.     a0 = 1 / pi * m1 + 1 / pi * m2
  35.     s=a0/2
  36.     for i in range(1,100,1):
  37.         mm1,errm1=quad(lambda m: np.exp(m)* np.cos(i * m), -np.pi, 0)
  38.         mm2,errm2=quad(lambda m: np.cos(i * m), 0, np.pi)
  39.         a=1 / pi * mm1 + 1 / pi * mm2
  40.         a_value.append(a)

  41.         nn1, errn1 = quad(lambda m: np.exp(m) * np.sin(i * m), -np.pi, 0)
  42.         nn2, errn2 = quad(lambda m: np.sin(i * m), 0, np.pi)
  43.         b = 1 / pi * nn1 + 1 / pi * nn2
  44.         b_value.append(b)

  45.         s0 = ( 1 / pi *a*cos(i*x) + 1 / pi *b* sin(i*x) )
  46.         s=s+s0
  47.     plot(x,s,'orange',linewidth=0.6)
  48.     title('fourier_transform')

  49. fourier_transform()

  50. plt.sca(ax3)
  51. plot(np.arange(len(x_value)),x_value,'orange',linewidth=0.6)
  52. title('X')

  53. plt.sca(ax4)
  54. plot(np.arange(len(y_value)),y_value,'orange',linewidth=0.6)
  55. title('Y')
  56. plt.show()
复制代码


+10
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-11-17 16:16 , Processed in 0.245730 second(s), 42 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表