当前位置: 首页 > news >正文

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

作者:许欢 来源: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安装注意事项
  • c++定义一个动态对象数组_如何在Python中自定义一个可被调用的对象实例?
  • c++ websocket客户端_golang websocket 客户端
  • stringbuilder可以被继承吗_老人去世后宅基地归谁?子女可以继承吗?
  • python dataframe的某一列变为list_手把手教你用Python爬中国电影票房数据
  • 网站迁移到新服务器的步骤_在网站改版期间如何避免SEO灾难
  • vue按需引入第三方插件_elementui组件按需引入踩过的坑
  • 3842开关电源完整原理图_详细分析开关电源输入端串联的电阻(作用/阻值/功率)...
  • python生成表格文件_【记录】Python中生成(写入数据到)Excel文件中
  • springboot jwt token前后端分离_4小时开发一个SpringBoot+vue前后端分离博客项目附带源码
  • idea serialversionuid怎么生成_这样设置 IDEA,让你爽到飞起!
  • 论文英文参考文献[10]的时候后面多空格_论文干货|论文新手别急,完整的论文写作没那么难...
  • python os open_[原创] python os.open()方法
  • idea构建springboot项目右边没有maven_你们要的干货来了——实战 Spring Boot
  • 使用python下载文件_使用Python下载文件(大文件,重定向文件)
  • 【译】JS基础算法脚本:字符串结尾
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • CSS中外联样式表代表的含义
  • Git同步原始仓库到Fork仓库中
  • Making An Indicator With Pure CSS
  • PHP那些事儿
  • SQLServer插入数据
  • Swift 中的尾递归和蹦床
  • vue-cli3搭建项目
  • 码农张的Bug人生 - 见面之礼
  • 前端技术周刊 2019-02-11 Serverless
  • 移动端唤起键盘时取消position:fixed定位
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • UI设计初学者应该如何入门?
  • zabbix3.2监控linux磁盘IO
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​你们这样子,耽误我的工作进度怎么办?
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • (day 12)JavaScript学习笔记(数组3)
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (转)负载均衡,回话保持,cookie
  • *** 2003
  • .htaccess配置常用技巧
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .Net6 Api Swagger配置
  • .NET开源项目介绍及资源推荐:数据持久层
  • .net快速开发框架源码分享
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • .net专家(张羿专栏)
  • .skip() 和 .only() 的使用
  • /dev下添加设备节点的方法步骤(通过device_create)
  • @Resource和@Autowired的区别
  • [ CTF ]【天格】战队WriteUp- 2022年第三届“网鼎杯”网络安全大赛(青龙组)
  • [ai笔记9] openAI Sora技术文档引用文献汇总
  • [Android 数据通信] android cmwap接入点
  • [ARC066F]Contest with Drinks Hard
  • [BUUCTF]-PWN:[极客大挑战 2019]Not Bad解析
  • [BZOJ 4129]Haruna’s Breakfast(树上带修改莫队)