使用python实现离散时间傅里叶变换的方法
Python  /  管理员 发布于 7年前   197
我们经常使用傅里叶变换来计算数字信号的频谱,进而分析数字信号,离散时间傅里叶变换的公式为:
可是自己动手实现一遍才是最好的学习。
在数字分析里面,傅里叶变换默认等时间间隔采样,不需要时间序列,只需要信号数组即可分析。
分析过程如下:
n/2+1
个使用方法:
从以上过程得到数字序列的傅里叶变换之后,如果想要得到真正频谱,还需要做处理:
完整程序:
# 离散时间傅里叶变换的 python 实现import numpy as npimport mathimport pylab as plimport scipy.signal as signalimport matplotlib.pyplot as pltsampling_rate=1000t1=np.arange(0, 10.0, 1.0/sampling_rate)x1 =np.sin(15*np.pi*t1)# 傅里叶变换def fft1(xx):# t=np.arange(0, s) t=np.linspace(0, 1.0, len(xx)) f = np.arange(len(xx)/2+1, dtype=complex) for index in range(len(f)): f[index]=complex(np.sum(np.cos(2*np.pi*index*t)*xx), -np.sum(np.sin(2*np.pi*index*t)*xx)) return f# len(x1)
xf=fft1(x1)/len(x1)freqs = np.linspace(0, sampling_rate/2, len(x1)/2+1)plt.figure(figsize=(16,4))plt.plot(freqs,2*np.abs(xf),'r--')plt.xlabel("Frequency(Hz)")plt.ylabel("Amplitude($m$)")plt.title("Amplitude-Frequency curve")plt.show()
plt.figure(figsize=(16,4))plt.plot(freqs,2*np.abs(xf),'r--')plt.xlabel("Frequency(Hz)")plt.ylabel("Amplitude($m$)")plt.title("Amplitude-Frequency curve")plt.xlim(0,20)plt.show()
此处实现的是传统的傅里叶变换,这种方法实际已经不用了,现在使用快速傅里叶变换,其实两种是等价的,但是快速傅里叶变换时间复杂度要小很多。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号