您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
我们经常使用傅里叶变换来计算数字信号的频谱,进而分析数字信号,离散时间傅里叶变换的公式为:
可是自己动手实现一遍才是最好的学习。
在数字分析里面,傅里叶变换默认等时间间隔采样,不需要时间序列,只需要信号数组即可分析。
分析过程如下:
n/2+1
个使用方法:
从以上过程得到数字序列的傅里叶变换之后,如果想要得到真正频谱,还需要做处理:
完整程序:
# 离散时间傅里叶变换的 python 实现 import numpy as np import math import pylab as pl import scipy.signal as signal import matplotlib.pyplot as plt sampling_rate=1000 t1=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()
此处实现的是传统的傅里叶变换,这种方法实际已经不用了,现在使用快速傅里叶变换,其实两种是等价的,但是快速傅里叶变换时间复杂度要小很多。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持亿速云。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。