使用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 相关文章推荐
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
Apr 11 Python
python实现聊天小程序
Mar 13 Python
python将秒数转化为时间格式的实例
Sep 16 Python
DES加密解密算法之python实现版(图文并茂)
Dec 06 Python
Python常用模块之requests模块用法分析
May 15 Python
Python 实现遥感影像波段组合的示例代码
Aug 04 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
Aug 27 Python
Pytorch DataLoader 变长数据处理方式
Jan 08 Python
Python vtk读取并显示dicom文件示例
Jan 13 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
Mar 09 Python
Python代码注释规范代码实例解析
Aug 14 Python
python爬虫selenium模块详解
Mar 30 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
DOTA2 1月28日更新:监管系统降临刀塔世界
2021/01/28 DOTA
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
2014/04/21 PHP
jquery+php实现导出datatables插件数据到excel的方法
2015/07/06 PHP
laravel5创建service provider和facade的方法详解
2016/07/26 PHP
php计算多个集合的笛卡尔积实例详解
2017/02/16 PHP
jquery autocomplete自动完成插件的的使用方法
2010/08/07 Javascript
关于js数组去重的问题小结
2014/01/24 Javascript
js返回上一页并刷新的多种实现方法
2014/02/26 Javascript
jQuery实现简单的列表式导航菜单效果代码
2015/08/31 Javascript
简单谈谈Javascript中类型的判断
2015/10/19 Javascript
AngularJS基础 ng-init 指令简单示例
2016/08/02 Javascript
js中变量的连续赋值(实例讲解)
2017/07/08 Javascript
React Router v4 入坑指南(小结)
2018/04/08 Javascript
小程序实现多选框功能
2018/10/30 Javascript
详解vue 命名视图
2019/08/14 Javascript
Vue 使用beforeEach实现登录状态检查功能
2019/10/31 Javascript
如何在微信小程序中存setStorage
2019/12/13 Javascript
JS apply用法总结和使用场景实例分析
2020/03/14 Javascript
python判断端口是否打开的实现代码
2013/02/10 Python
python使用Flask框架获取用户IP地址的方法
2015/03/21 Python
python实现备份目录的方法
2015/08/03 Python
python实现批量修改图片格式和尺寸
2018/06/07 Python
python编辑用户登入界面的实现代码
2018/07/16 Python
Python常用模块sys,os,time,random功能与用法实例分析
2020/01/07 Python
Python中zip函数如何使用
2020/06/04 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
资深地理教师自我评价
2013/09/21 职场文书
机械工程师的岗位职责
2013/11/17 职场文书
班长演讲稿范文
2014/04/24 职场文书
2014年会策划方案
2014/05/11 职场文书
事业单位鉴定材料
2014/05/25 职场文书
安全生产月宣传标语
2014/10/06 职场文书
实习生辞职信范文
2015/03/02 职场文书
2015教师个人工作总结范文
2015/03/31 职场文书
2016幼儿园中班开学寄语
2015/12/03 职场文书
营销策划分析:怎么策划才能更好销量产品?
2019/09/04 职场文书