数字信号处理——窗函数
本文内容和程序来自参考书《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。
数字信号处理——窗函数相关推荐
- matlab的dft谱分析,数字信号处理基于matlab(用DFT作谱分析,窗函数的设计)
数字信号处理基于matlab(用DFT作谱分析,窗函数的设计) 1实验一用DFT作谱分析X11111X212344321N108X3COSN1PI/4N208X4SINN2PI/8FIGURESUBP ...
- 窗函数 数字信号处理
窗函数 数字信号处理 使用窗函数解决什么问题? 数据截断与频谱泄露 什么是频谱泄漏? 解决频谱泄露问题的方法 窗函数介绍 窗函数解决频谱泄露问题的原理 窗函数的种类.特点和如何使用 矩形窗 汉宁窗(升 ...
- 【数字信号处理】傅里叶变换性质 ( 序列傅里叶变换共轭对称性质 | 实序列的幅频特性偶对称 | 实序列相频特性奇对称 | 示例说明 )
文章目录 一.实序列的 幅频特性 和 相频特性 对称性质 二.性质由来 三.示例说明 一.实序列的 幅频特性 和 相频特性 对称性质 如果 x(n)x(n)x(n) 序列是 " 实序列 &q ...
- 二值化处理c语言程序,数字信号处理c语言程序集
目录 1.1均匀分布的随机数 第一章 数字信号的产生 1.2正态分布的随机数 1.3指数分布的随机数 1.4拉普拉斯(Laplace)分布的随机数 1.5瑞利(Rayleigh)分布的随机数 1.6对 ...
- 西南大学网络教育学院计算机答案,西南大学网络与继续教育学院课程《数字信号处理》2018年春季大作业机考 答案.doc...
西南大学网络与继续教育学院课程<数字信号处理>2018年春季大作业机考 答案 - PAGE 2 - 西南大学网络与继续教育学院课程考试试题卷 类别:网教 专业:电气工程及其自动化 2018 ...
- 离散信号的抽取和内插例题_《数字信号处理》学习指导与题解 2011年版
<数字信号处理>学习指导与题解 出版时间:2011年版 内容简介 <〈数字信号处理〉学习指导与题解>对"数字信号处理"教学大纲要求的所有知识点进行了提纲挈领 ...
- 实验一熟悉matlab环境,数字信号处理报告实验一:熟悉MATLAB环境.doc
数字信号处理报告实验一:熟悉MATLAB环境.doc 实验一熟悉MATLAB环境一 实验目的1. 熟悉MATLAB的主要操作命令.2. 学会简单的矩阵输入和数据读写.3. 掌握简单的绘图命令.4. 用 ...
- matlab如何进行数字信号处理,数字信号处理基础及MATLAB实现(第2版)
[内容简介] 本书系统地介绍了数字信号处理基本理论.设计方法和实现等方面的内容.全书共分9章,第1章介绍数字信号处理的研究对象.学科概貌.系统基本组成.特点.发展及应用等内容:第2章介绍离散时间信号与 ...
- 经典数字信号处理图书的个人评述【转】
在一网站上得到如下的很好的内容,故存放在此,以方便以后查看... http://emuch.net/html/201206/4595181.html 经典数字信号处理图书的个人评述 数 ...
最新文章
- 转录组测序技术和结果解读(二)——文库构建和测序策略
- java解锁_Java 姿势解锁 —— Lists.transform
- leetcode算法题--摆动序列★
- we-rich 小程序渲染富文本js库
- java设计模式2--抽象工厂模式(Abstract Factory)
- 简易计算器 (C语言)作业
- 深入浅出python机器学习_6.3.1_随机森林实例——要不要和相亲对象进一步发展
- 嵊州职教中心计算机多少分数,嵊州中考考试分数线
- HTML DOM之节点操作方法(1)
- 现在企业为何越来越难呢?
- 第4章 旋转的圆弧(《Python趣味创意编程》教学视频)
- mysql学习day04
- ai google 风格化图像_谷歌 AI 新方法:可提升 10 倍图像识别效率,关键还简单易用...
- 最强面试题整理第一弹:Python 基础面试题(附答案)
- 微信红包系统设计 优化
- 接苹果游戏 小学生邀请赛T3
- jsp获取主机地址和主机名
- 史上最详细Lip-reading with Hierarchical Pyramidal Convolution and Self-Attention文章记录
- MATLAB解方程组相关方法
- 【面试题】Redis SETEX /SETNX 的用法和区别