使用python实现离散时间傅里叶变换的方法


Posted in Python onSeptember 02, 2019

我们经常使用傅里叶变换来计算数字信号的频谱,进而分析数字信号,离散时间傅里叶变换的公式为:

使用python实现离散时间傅里叶变换的方法

可是自己动手实现一遍才是最好的学习。

在数字分析里面,傅里叶变换默认等时间间隔采样,不需要时间序列,只需要信号数组即可分析。

分析过程如下:

  • 对于含有 n 个样本值的数字信号序列,根据奈奎斯特采样定律,包含的周期数最大为 n/2,周期数为 0 代表直流分量。所以,当周期数表示为离散的 0,1,2,3…n/2 ,总的数目为 n/2+1
  • 傅里叶变换之后的结果为复数, 下标为 k 的复数 a+b*j 表示时域信号中周期为 N/k 个取样值的正弦波和余弦波的成分的多少, 其中 a 表示 cos 波形的成分, b 表示 sin 波形的成分
  • 首先产生一个长度为 n,一倍周期的 $e^{-jwn} $ (即为 $cos(wn)-jsin(wn) $ )波样本序列.
  • 将数字信号序列中的每一个样本与 1 倍周期的样本波形序列相乘,得到 n 个乘积,将 n 个乘积相加,放入 f[1] 中。
  • 再产生一个长度为 n,两倍周期的 $e^{-jwn} $ (即为 $cos(wn)-jsin(wn) $ )波样本序列,再将数字信号序列中的每一个样本与 2 倍周期的样本波形序列相乘,得到 n 个乘积,将 n 个乘积相加,放入 f[2] 中。依次重复。
  • 对于 0 倍周期,即直流分量来说,可以认为产生的是 0 倍周期的样本波形,重复操作,放入 f[0] 即可。
  • 这样就得到了数字信号序列的傅里叶变换

使用方法:

从以上过程得到数字序列的傅里叶变换之后,如果想要得到真正频谱,还需要做处理:

  • 计算出的每一个频率下的幅值需要除以时间序列的长度,类似求平均的过程
  • 每一个频率下的幅值是一个复数,需要对它求模,而且因为在负频率处也有值,所以需要对于实信号需要乘 2
  • 频率的序列为 0 到采样率的一半,长度为 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()

使用python实现离散时间傅里叶变换的方法

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()

使用python实现离散时间傅里叶变换的方法

此处实现的是传统的傅里叶变换,这种方法实际已经不用了,现在使用快速傅里叶变换,其实两种是等价的,但是快速傅里叶变换时间复杂度要小很多。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python学习之asyncore模块用法实例教程
Sep 29 Python
Python中实现从目录中过滤出指定文件类型的文件
Feb 02 Python
Python基于PycURL实现POST的方法
Jul 25 Python
Python 多线程抓取图片效率对比
Feb 27 Python
Python正则抓取新闻标题和链接的方法示例
Apr 24 Python
python机器学习实战之树回归详解
Dec 20 Python
浅谈Python NLP入门教程
Dec 25 Python
Python多进程池 multiprocessing Pool用法示例
Sep 07 Python
python3文件复制、延迟文件复制任务的实现方法
Sep 02 Python
Django 框架模型操作入门教程
Nov 05 Python
基于python实现简单C/S模式代码实例
Sep 14 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
Dec 07 Python
详解Python图像处理库Pillow常用使用方法
Sep 02 #Python
Django使用中间件解决前后端同源策略问题
Sep 02 #Python
python elasticsearch环境搭建详解
Sep 02 #Python
关于pymysql模块的使用以及代码详解
Sep 01 #Python
使用Python将字符串转换为格式化的日期时间字符串
Sep 01 #Python
Python 使用多属性来进行排序
Sep 01 #Python
详解一种用django_cache实现分布式锁的方式
Sep 01 #Python
You might like
在PHP中利用XML技术构造远程服务(上)
2006/10/09 PHP
source.php查看源文件
2006/12/09 PHP
php empty()与isset()区别的详细介绍
2013/06/17 PHP
smarty模板中使用get、post、request、cookies、session变量的方法
2014/04/24 PHP
php两种无限分类方法实例
2015/04/21 PHP
Jquery在IE7下无法使用 $.ajax解决方法
2009/11/11 Javascript
jQuery 打造动态渐变按钮 详细图文教程
2010/04/25 Javascript
小试JQuery的AutoComplete插件
2011/05/04 Javascript
document.execCommand()的用法小结
2014/01/08 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
javascript实现避免页面按钮重复提交
2015/01/08 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
JS实现的不规则TAB选项卡效果代码
2015/09/18 Javascript
jQuery实现带分组数据的Table表头排序实例分析
2015/11/24 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
2015/12/31 Javascript
JS获取随机数和时间转换的简单实例
2016/07/10 Javascript
JS图片左右无缝隙滚动的实现(兼容IE,Firefox 遵循W3C标准)
2016/09/23 Javascript
yarn的使用与升级Node.js的方法详解
2017/06/04 Javascript
node.js + socket.io 实现点对点随机匹配聊天
2017/06/30 Javascript
说说AngularJS中的$parse和$eval的用法
2017/09/14 Javascript
Bootstrap一款超好用的前端框架
2017/09/25 Javascript
node.js利用mongoose获取mongodb数据的格式化问题详解
2017/10/06 Javascript
完美解决Python2操作中文名文件乱码的问题
2017/01/04 Python
Python中常用的8种字符串操作方法
2019/05/06 Python
Python控制Firefox方法总结
2019/06/03 Python
python 用所有标点符号分隔句子的示例
2019/07/15 Python
使用Django和Postgres进行全文搜索的实例代码
2020/02/13 Python
css3 中translate和transition的使用方法
2020/03/26 HTML / CSS
米兰网婚纱礼服法国网上商店:Milanoo法国
2016/08/20 全球购物
美国在线旅行社:Crystal Travel
2018/09/11 全球购物
市场专员岗位职责
2014/02/14 职场文书
材料员岗位职责
2014/03/13 职场文书
大学生求职信范文
2014/05/24 职场文书
小学生学习保证书
2015/02/26 职场文书
农村结婚典礼主持词
2015/06/29 职场文书
最美劳动诗,致敬所有的劳动者!
2019/07/12 职场文书