作者:许欢 来源:EETOP 行者无疆(论坛usrname:ICNO.1) 的博客

Python 是目前的热门语言,一直觉得掌握一门编程语言对作为搞技术的来说还是很有必要的,结合工作中能用到的一些数据处理和分析的内容,觉得从数据分析入手,争取能够掌握Python在数据处理领域的一些应用。下面是基于Python的numpy进行的数字信号的频谱分析介绍

一、傅里叶变换

傅里叶变换是信号领域沟通时域和频域的桥梁,在频域里可以更方便的进行一些分析。傅里叶主要针对的是平稳信号的频率特性分析,简单说就是具有一定周期性的信号,因为傅里叶变换采取的是有限取样的方式,所以对于取样长度和取样对象有着一定的要求。

二、基于Python的频谱分析

# _*_ coding:utf-8 _*_

import numpy as np #导入一个数据处理的模块

import pylab as pl #导入一个绘图模块,matplotlib下的模块

sampling_rate = 8000 ##取样频率

fft_size =512 #FFT处理的取样长度

t = np.arange(0,1.1,1.0/sampling_rate)

#np.arange(起点,终点,间隔)产生1s长的取样时间

x = np.sin(2*np.pi*156.25*t)+2*np.sin(2*np.pi*234.375*t)

#两个正弦波叠加,156.25HZ和234.375HZ,因此如上面简单

#的介绍FFT对于取样时间有要求,

#N点FFT进行精确频谱分析的要求是N个取样点包含整数个

#取样对象的波形。

#因此N点FFT能够完美计算频谱对取样对象的要求

#是n*Fs/N(n*采样频率/FFT长度),

#因此对8KHZ和512点而言,

#完美采样对象的周期最小要求是8000/512=15.625HZ,

#所以156.25的n为10,234.375的n为15。

xs = x[:fft_size]# 从波形数据中取样fft_size个点进行运算

xf = np.fft.rfft(xs)/fft_size # 利用np.fft.rfft()进行FFT计算,rfft()是为了更方便

#对实数信号进行变换,由公式可知/fft_size为了正确显示波形能量

# rfft函数的返回值是N/2+1个复数,分别表示从0(Hz)

#到sampling_rate/2(Hz)的分。

#于是可以通过下面的np.linspace计算出返回值中每个下标对应的真正的频率:

freqs = np.linspace(0,sampling_rate/2,fft_size/2+1)

# np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

#在指定的间隔内返回均匀间隔的数字

xfp = 20*np.log10(np.clip(np.abs(xf),1e-20,1e1000))

#最后我们计算每个频率分量的幅值,并通过 20*np.log10()

#将其转换为以db单位的值。为了防止0幅值的成分造成log10无法计算,

#我们调用np.clip对xf的幅值进行上下限处理

pl.figure(figsize=(8,4))

pl.subplot(211)

pl.plot(t[:fft_size], xs)

pl.xlabel(u"时间(秒)")

pl.title(u"The Wave and Spectrum 156.25Hz234.375Hz")

pl.subplot(212)

pl.plot(freqs, xfp)

pl.xlabel(u"Hz")

pl.subplots_adjust(hspace=0.4)

pl.show()

#绘图显示结果

现在来看看频谱泄露,将采样对象的频率改变

x = np.sin(2*np.pi*100*t)+2*np.sin(2*np.pi*234.375*t)

我们明显看出,第一个对象的频谱分析出现“泄露”,能量分散到其他频率上,

没法准确计算到计算对象的频谱特性。

窗函数

上面我们可以看出可以通过加“窗”函数的方法来处理,尽量保证FFT长度内

的取样对象是对称的。

import pylab as pl

import scipy.signal as signal

pl.figure(figsize=(8,3))

pl.plot(signal.hann(512))#汉明窗函数

pl.show()

对上述出现频谱泄露的函数进行加窗处理,后面会介绍一下各种加窗函数的原理和效果。

推荐--点击 阅读原文,可以查看作者更多相关博客:

python兼职平台信号处理_基于Python的数字信号处理初步相关推荐

  1. python自动化测试平台方案_基于Python的软件测试自动化平台研究

    基于 Python 的软件测试自动化平台研究 沈 啸 [摘 要] 摘要: 21 世纪是计算机和网络技术高速发展的时代,目前我国的软 件行业开发程度明显落后于欧美等发达国家,同时相对于开发工作而言,软件 ...

  2. 基于python的可视化分析_基于Python 的数据分析与可视化平台研究

    基于 Python 的数据分析与可视化平台研究 宋永生 ; 黄蓉美 ; 王军 [期刊名称] <现代信息科技> [年 ( 卷 ), 期] 2019(003)021 [摘要] 数据分析与可视化 ...

  3. 用python做炒股软件-python程序源码_基于python的炒股软件

    股票模拟交易系统设计与实现 不但能够进行界面的设计,还可以实现各个窗口的关联,通过WPF实现和其余窗口的关联,而且WPF中的类不但能够和其中一个窗口进行关联,还可以跟许多功能操作接口,WPF在对窗口对 ...

  4. python实现实时监控_基于 Python 的交换机实时监控系统的设计与实现

    从高校校园网运维工作实际出发,论文提出了一种基于 Python 语言+SNMP协议的网络交换机监测系统设计思路与实现方法.整个系统系统采用B/S模式,基于轻量级的web开发框架web.py实现.后端采 ...

  5. python人脸识别库_基于Python的face_recognition库实现人脸识别

    Python Python开发 Python语言 基于Python的face_recognition库实现人脸识别 一.face_recognition库简介 face_recognition是Pyt ...

  6. python多叉树遍历_基于Python的多叉树遍历算法

    [ 综直厘翹 S 赛理 ) 信息记录材料 2019 年 5 月第 20 卷第 5 期 基于 Python 的多叉树遍历算法 钱雨波 , 王金祥 ( 指导老师 ) ( 延边大学 吉林 延边 1 3300 ...

  7. 基于python的智能家居_基于Python的智能家居自动化测试脚本设计及实现

    投稿网址 http:www.VideoE.cn|<电视技术>第39 卷第5 期(总第458 期) 117 [本文献信息]沈杰,潘科,刘昕,等. 基于 Python 的智能家居自动化测试 ...

  8. 基于python的房地产数据分析_基于Python的数据分析

    转载 | CSDN 编辑 | 雷课小雷 下面来介绍一下基于Python的数据分析,主要介绍数据分析的概念.数据分析流程.Python优势.常用模块的用途以及使用Python进行数据分析的学习方法及步骤 ...

  9. python电影推荐算法_基于Python的电影推荐算法

    原标题:基于Python的电影推荐算法 第一步:收集和清洗数据 数据链接:https://grouplens.org/datasets/movielens/ 下载文件:ml-latest-small ...

最新文章

  1. SCOI2018 退役记
  2. 中考计算机考试作文,中考理化实验计算机考试作文
  3. 使用transform和transition制作CSS3动画
  4. 将自定义功能添加到Spring数据存储库
  5. 去掉数组左右两边的引号
  6. python与tensorflow的关系_python – 在TensorFlow,Session.run()和Tensor.eval()之间有什么区别?...
  7. (连续子序列)唯一的雪花
  8. Mysql事务[学习笔记]
  9. mysql 事件状态enable_mysql事件 - wayhk的个人页面 - OSCHINA - 中文开源技术交流社区...
  10. FFmpeg编解码常用函数ffmpeg av_parser_parse2()函数
  11. 局域网SDN技术硬核内幕 一 从二层到大二层
  12. [报表篇] (11)设置印刷尺寸
  13. 深度学习: 深度学习框架 横向对比
  14. php ci框架后台管理,ci: 羽翼后台管理平台是一个简单的博客系统,后端基于CodeIgniter,前端基于Semantic UI 2.2.10...
  15. 在Linux中,_exit()、exit(0)、exit(1)、和return的区别!!
  16. 简单使用tabby? (前端)
  17. 漏洞复现-electron RCE命令执行CVE-2018-1000006
  18. 神经网络中隐藏层的作用,深度神经网络隐藏层数
  19. 超通俗易懂的Servlet入门教程
  20. 去中心化交易所研究报告

热门文章

  1. [转载] python 第三方模块
  2. hive安装mysql驱动_hive安装与配置
  3. 电信优惠套餐推荐系统的设计与实现
  4. Win10运行怎么打开
  5. java计算机毕业设计公司薪酬管理系统源码+mysql数据库+系统+lw文档+部署
  6. NFT数据查询、交易查询、寻找机会必备工具
  7. Java 遍历 Set 集合的方法,以及如何遍历删除 Set 集合中的元素?
  8. base ring shell skirt skirt 压力容器_专业英语
  9. Pytorch有关学习率的使用总结
  10. git将一个分支合入到另一个分支