本文内容和程序来自参考书《Python科学计算》

为了减少FFT所截取的数据段前后的跳变,可以对数据先乘以一个窗函数,使得其前后数据能平滑过渡。例如常用的hann窗函数的定义如下:

其中N为窗函数的点数,下面是一个512点hann窗的曲线:

>>> import pylab as pl
>>> import scipy.signal as signal
>>> pl.figure(figsize=(8,3))
>>> pl.plot(signal.hann(512))


窗函数都在scipy.signal库中定义,它们的第一个参数为点数N。可以看出hann窗函数是完全对称的,也就是说第0点和第511点的值完全相同,都为0。在这样的函数和信号数据相乘的话,结果中会出现前后两个连续的0,这样FFT的结果所表示的周期信号中有两个连续的0值,会对信号的周期性有一定的影响。

-计算周期信号的一个周期的数据

考虑对一个正弦波取样10个点,那么第一个点的值为0,而最后一个点的值不应该是0,这样这10个数据的重复才能是精确的正弦波,下面的两种计算中,前者是正确的:

>>> np.sin(np.arange(0, 2*np.pi, 2*np.pi/10))
array([  0.00000000e+00,   5.87785252e-01,   9.51056516e-01,9.51056516e-01,   5.87785252e-01,   1.22464680e-16,-5.87785252e-01,  -9.51056516e-01,  -9.51056516e-01,-5.87785252e-01])
>>> np.sin(np.linspace(0, 2*np.pi, 10))
array([  0.00000000e+00,   6.42787610e-01,   9.84807753e-01,8.66025404e-01,   3.42020143e-01,  -3.42020143e-01,-8.66025404e-01,  -9.84807753e-01,  -6.42787610e-01,-2.44929360e-16])

为了解决连续0值的问题,hann函数提供了一个sym关键字参数,如果设置其为0的话,那么将产生一个N+1点的hann窗函数,然后取其前N个数,这样得到的窗函数适合于周期信号:

>>> signal.hann(8)
array([ 0.        ,  0.1882551 ,  0.61126047,  0.95048443,  0.95048443,        0.61126047,  0.1882551 ,  0.        ])
>>> signal.hann(8, sym=0)
array([ 0.        ,  0.14644661,  0.5       ,  0.85355339,  1.        ,        0.85355339,  0.5       ,  0.14644661])

50Hz正弦波与窗函数乘积之后的重复波形如下:

>>> t = np.arange(0, 1.0, 1.0/8000)
>>> x = np.sin(2*np.pi*50*t)[:512] * signal.hann(512, sym=0)
>>> pl.plot(np.hstack([x,x,x]))
>>> pl.show()


回到前面的例子,将200Hz, 300Hz的叠加波形与hann窗乘积之后再计算其频谱,得到如下频谱图:

可以看到与hann窗乘积之后的信号的频谱能量更加集中于200Hz和300Hz,但是其能量有所降低。这是因为hann窗本身有一定的能量衰减:

>>> np.sum(signal.hann(512, sym=0))/512
0.5

因此如果需要严格保持信号的能量的话,还需要在乘以hann窗之后再乘以2。

数字信号处理——窗函数相关推荐

  1. matlab的dft谱分析,数字信号处理基于matlab(用DFT作谱分析,窗函数的设计)

    数字信号处理基于matlab(用DFT作谱分析,窗函数的设计) 1实验一用DFT作谱分析X11111X212344321N108X3COSN1PI/4N208X4SINN2PI/8FIGURESUBP ...

  2. 窗函数 数字信号处理

    窗函数 数字信号处理 使用窗函数解决什么问题? 数据截断与频谱泄露 什么是频谱泄漏? 解决频谱泄露问题的方法 窗函数介绍 窗函数解决频谱泄露问题的原理 窗函数的种类.特点和如何使用 矩形窗 汉宁窗(升 ...

  3. 【数字信号处理】傅里叶变换性质 ( 序列傅里叶变换共轭对称性质 | 实序列的幅频特性偶对称 | 实序列相频特性奇对称 | 示例说明 )

    文章目录 一.实序列的 幅频特性 和 相频特性 对称性质 二.性质由来 三.示例说明 一.实序列的 幅频特性 和 相频特性 对称性质 如果 x(n)x(n)x(n) 序列是 " 实序列 &q ...

  4. 二值化处理c语言程序,数字信号处理c语言程序集

    目录 1.1均匀分布的随机数 第一章 数字信号的产生 1.2正态分布的随机数 1.3指数分布的随机数 1.4拉普拉斯(Laplace)分布的随机数 1.5瑞利(Rayleigh)分布的随机数 1.6对 ...

  5. 西南大学网络教育学院计算机答案,西南大学网络与继续教育学院课程《数字信号处理》2018年春季大作业机考 答案.doc...

    西南大学网络与继续教育学院课程<数字信号处理>2018年春季大作业机考 答案 - PAGE 2 - 西南大学网络与继续教育学院课程考试试题卷 类别:网教 专业:电气工程及其自动化 2018 ...

  6. 离散信号的抽取和内插例题_《数字信号处理》学习指导与题解 2011年版

    <数字信号处理>学习指导与题解 出版时间:2011年版 内容简介 <〈数字信号处理〉学习指导与题解>对"数字信号处理"教学大纲要求的所有知识点进行了提纲挈领 ...

  7. 实验一熟悉matlab环境,数字信号处理报告实验一:熟悉MATLAB环境.doc

    数字信号处理报告实验一:熟悉MATLAB环境.doc 实验一熟悉MATLAB环境一 实验目的1. 熟悉MATLAB的主要操作命令.2. 学会简单的矩阵输入和数据读写.3. 掌握简单的绘图命令.4. 用 ...

  8. matlab如何进行数字信号处理,数字信号处理基础及MATLAB实现(第2版)

    [内容简介] 本书系统地介绍了数字信号处理基本理论.设计方法和实现等方面的内容.全书共分9章,第1章介绍数字信号处理的研究对象.学科概貌.系统基本组成.特点.发展及应用等内容:第2章介绍离散时间信号与 ...

  9. 经典数字信号处理图书的个人评述【转】

    在一网站上得到如下的很好的内容,故存放在此,以方便以后查看... http://emuch.net/html/201206/4595181.html 经典数字信号处理图书的个人评述         数 ...

最新文章

  1. 转录组测序技术和结果解读(二)——文库构建和测序策略
  2. java解锁_Java 姿势解锁 —— Lists.transform
  3. leetcode算法题--摆动序列★
  4. we-rich 小程序渲染富文本js库
  5. java设计模式2--抽象工厂模式(Abstract Factory)
  6. 简易计算器 (C语言)作业
  7. 深入浅出python机器学习_6.3.1_随机森林实例——要不要和相亲对象进一步发展
  8. 嵊州职教中心计算机多少分数,嵊州中考考试分数线
  9. HTML DOM之节点操作方法(1)
  10. 现在企业为何越来越难呢?
  11. 第4章 旋转的圆弧(《Python趣味创意编程》教学视频)
  12. mysql学习day04
  13. ai google 风格化图像_谷歌 AI 新方法:可提升 10 倍图像识别效率,关键还简单易用...
  14. 最强面试题整理第一弹:Python 基础面试题(附答案)
  15. 微信红包系统设计 优化
  16. 接苹果游戏 小学生邀请赛T3
  17. jsp获取主机地址和主机名
  18. 史上最详细Lip-reading with Hierarchical Pyramidal Convolution and Self-Attention文章记录
  19. MATLAB解方程组相关方法
  20. 【面试题】Redis SETEX /SETNX 的用法和区别

热门文章

  1. NLP实战之textRNN中文文本分类
  2. 多层介质中广义反射系数与广义透射系数的计算与编程思路
  3. 计算机无法完成评估,Windows Vista下系统评分无法完成的问题
  4. 瑞云科技联合飞蝶VR教育、大朋VR推出元宇宙 5G VR智慧教育整体解决方案
  5. AD7606分析讲解
  6. Ubuntu安装Burg
  7. 遗传算法最通俗的讲解案例
  8. nodebb接入已有的账号体系及实现单点登陆、更改nodebb样式及页面
  9. Springboot疫苗接种管理系统毕业设计-附源码191451
  10. 相机对焦、标定等近期学习