精华内容
下载资源
问答
  • 窗函数
    千次阅读
    2021-03-15 15:41:28

    什么是窗函数? - linmue-谭祥军的文章 - 知乎 https://zhuanlan.zhihu.com/p/24318554

    本文首发于公众号《模态空间》。

    似乎每次做FFT都需要加窗函数,很少有不加窗函数的时候。那为什么要加窗函数,加窗有什么好处,又有什么坏处呢,凭什么目的来加函数呢?

    本文主要内容包括:

    1. 为什么要加窗函数;

    2. 窗函数的定义;

    3. 窗函数的时频域特征;

    4. 加窗函数的原则;

    5. 模态测试所用窗函数;

    6. 窗函数带来的影响。


     

    1. 为什么要加窗

    在《什么是泄漏?》中已经讲到每次FFT变换只能对有限长度的时域数据进行变换,因此,需要对时域信号进行信号截断。即使是周期信号,如果截断的时间长度不是周期的整数倍(周期截断),那么,截取后的信号将会存在泄漏。为了将这个泄漏误差减少到最小程度(注意我说是的减少,而不是消除),我们需要使用加权函数,也叫窗函数加窗主要是为了使时域信号似乎更好地满足FFT处理的周期性要求,减少泄漏。

    如下图所示,若周期截断,则FFT频谱为单一谱线。若为非周期截断,则频谱出现拖尾,如图中部所示,可以看出泄漏很严重。为了减少泄漏,给信号施加一个窗函数(如图中上部红色曲线所示),原始截断后的信号与这个窗函数相乘之后得到的信号为上面右侧的信号。可以看出,此时,信号的起始时刻和结束时刻幅值都为0,也就是说在这个时间长度内,信号为周期信号,但是只有一个周期。对这个信号做FFT分析,得到的频谱如下部右侧所示。相比较之前未加窗的频谱,可以看出,泄漏已明显改善,但并没有完全消除。因此,窗函数只能减少泄漏,不能消除泄漏。

    因此,加窗的目的是为了减少泄漏。但加窗不能消除泄漏,只能减少。


     

    2. 窗函数的定义

    信号截断时,只能截取一定长度,哪怕原始信号是无限长的,因此,好像是用一个“窗”(确切地说更像个“框”)去作这样的截取了。如下图所示,原始信号是周期信号,时间很长,截取时用红色的“窗”去截取这个周期信号,截取得到的信号如图中下部所示。

    原始信号和时间窗截断后的信号

     

    当然这个“窗”是一个单位权重的加权函数,称为“矩形窗”。这个“窗”外的信号是看不到的,只能看到窗内的信号,这就好比通过窗户看外面的世界,世界很大也很精彩,您能看到的只是位于窗内的世界,而窗外的世界,您是看不到的。因此,这就是为什么这样的加权函数被称为窗函数的真正原因。这样称呼,更为直观形象。

    上图中用于截取信号的时域截取函数(就是上图中红色的那个“窗”)就称为窗函数,它是一种计权函数,不同的窗函数计权是不一样的。也就是说,可以用不同的截取函数(窗函数)来做信号截取。到底用何种窗函数基于信号类型和分析目的。常用的窗函数有矩形窗、汉宁窗、平顶窗、指数窗等。


     

    3. 窗函数的时频域特征

    加窗实质是用一个所谓的窗函数与原始的时域信号作乘积的过程(当然加窗也可以在频域进行,但时域更为普遍),使得相乘后的信号似乎更好地满足傅立叶变换的周期性要求。如下图所示,原始的信号是不满足FFT变换的周期性要求的,变换后存在泄漏,如果施加一个窗函数,会在一定程度上减少泄漏。为了减少泄漏,用一个窗函数与原始周期信号相乘,得到加窗后的信号为周期信号,从而满足FFT变换的周期性要求。

     

    ×

     

    原始周期信号×窗函数

    =加窗后的信号

     

    使用不同的时间窗,它的时域形状和频域特征是不相同的。在这,介绍三种常见的窗函数的时域表达形式,以及它们的时域窗形状和频域特征。这三种窗分别是矩形窗、汉宁窗和平顶窗。它们的时域表达形式如下表所示,并且假设时间窗的范围为0≤t≤T,如果时间t的取值区间不同,窗函数的表达形式也会略有差异。

    矩形窗、汉宁窗和平顶窗的时域形状和频域特征如下图所示,可以看出,窗函数不同,时域和频域都是不同的。

    频谱特征

     

    为了减少泄漏,可采用不同的窗函数来进行信号截取,因而,泄漏与窗函数的频谱特征相关的。窗函数的典型频谱特征如下图所示:

    窗函数的典型频谱特征

     

    各种窗函数频谱特征的主要差别在于:主瓣宽度(也称为有效噪声带宽,ENBW)、幅值失真度、最高旁瓣高度和旁瓣衰减速率等参数。加窗的主要想法是用比较光滑的窗函数代替截取信号样本的矩形窗函数,也就是对截断后的时域信号进行特定的不等计权,使被截断后的时域波形两端突变变得平滑些,以此压低谱窗的旁瓣。因为旁瓣泄露量最大,旁瓣小了泄露也相应减少了。不同的窗函数具有不同的频谱特征,下表列出了一些常用窗函数的特征。

    主瓣宽度主要影响信号能量分布和频率分辨能力。频率的实际分辨能力为有效噪声带宽乘以频率分辨率,因此,主瓣越宽,有效噪声带宽越宽,在频率分辨率相同的情况下,频率的分辨能力越差。如下图所示,红色为平顶窗(3.77∆f),黑色为汉宁窗(1.5∆f),蓝色为信号频率,可以明显地看出,主瓣越窄,频率分辨越准确。对于窗函数宽的主瓣而言,如果有邻近的小峰值频率,则越难辨别出来。

    旁瓣高低及其衰减率影响能量泄漏程度(频谱拖尾效应)。旁瓣越高,说明能量泄漏越严重,衰减越慢,频谱拖尾越严重。对50.5Hz(频率分辨率为1Hz)的信号分别施加矩形窗(红色)、汉宁窗(绿色)和平顶窗(蓝色),用对数显示幅值,加窗后的结果如下图所示。从图中可以看出,矩形窗的频谱拖尾更严重。

    相对而言,如果旁瓣能量较小,高度趋于零,使得信号能量相对集中于主瓣,则较为接近真实的频谱。不同的窗函数对信号频谱的影响是不一样的,这主要是因为不同的窗函数,产生泄漏的大小不一样,频率分辨能力也不一样。


     

    4. 加窗函数的原则

    加窗函数时,应使窗函数频谱的主瓣宽度应尽量窄,以获得高的频率分辨能力;旁瓣衰减应尽量大,以减少频谱拖尾,但通常都不能同时满足这两个要求。各种窗的差别主要在于集中于主瓣的能量和分散在所有旁瓣的能量之比。

    窗的选择取决于分析的目标和被分析信号的类型。一般说,有效噪声频带越宽,频率分辨能力越差,越难于分清有相同幅值的邻近频率。选择性(即分辨出强分量频率邻近的弱分量的能力)的提高与旁瓣的衰减率有关。通常,有效噪声带宽窄的窗,其旁瓣的衰减率较低,因此窗的选择是在二者中取折衷。

    因而,窗函数的选择一般原则如下

    1. 如果截断的信号仍为周期信号,则不存在泄漏,无须加窗,相当于加矩形窗。

    2. 如果信号是随机信号或者未知信号,或者有多个频率分量,测试关注的是频率点而非能量大小,建议选择汉宁窗,像LMS Test.Lab中默认加的就是汉宁窗。

    3. 对于校准目的,则要求幅值精确,平顶窗是个不错的选择。

    4. 如果同时要求幅值精度和频率精度,可选择凯塞窗。

    5. 如果检测两个频率相近、幅值不同的信号,建议用布莱克曼窗。

    6. 锤击法试验力信号加力窗,响应可加指数窗。


     

    5. 模态测试所用窗函数

    所有的窗函数都会使时域信号的开始和结束端归零。用于锤击试验的“力窗”和“指数窗”却是个例外。

    力窗是单位增益的窗函数(实质是部分矩形窗),作用于脉冲激励发生的那部分时段。加力窗是为了消除可能来自于力锤激励通道的噪声。通常,设置力窗的宽度约为数据样本窗口的2-10%,使得力脉冲完全位于这个单位增益窗内,力窗之外的时域样本纪录则被加权置零。需要着重注意的是,力窗从来不能消除测试过程中可能出现的二次连击的影响。使用力窗消除连击所造成的影响,将严重扭曲输入力谱。

    指数窗通常用于在采样时间长度内信号没有完全衰减到零的响应信号。指数窗的应用强制响应信号更好地满足FFT变换的周期性要求。通常,对于小阻尼结构,锤击激起的结构响应在采样时间长度的末端不会完全衰减到零。这种情况下,变换后的数据将遭受泄漏影响。为了将泄漏减少到最低程度,需要对测量响应数据施加指数窗,如下图所示。

    对于锤击法测试,应尽量实现无泄漏的测量,即响应不需要加指数窗,因为加窗之后,相对而言,阻尼会是过估计,使得估计出来的阻尼大于实际的阻尼。因此,可以通过增加采样时间,使响应有足够的时间衰减,以避免加窗。

    对于激振器测试最常用是矩形窗和汉宁窗。需要明白的是所有窗函数都会使数据失真。需要记住的是窗函数总是会使测到的峰值发生失真,并且总会给出这样的假象:测量得到的FRF中的结构阻尼大于结构实际存在的阻尼,而这两个非常重要的属性刚好是我们需要从FRF中估计的属性。矩形窗会使得幅值失真36%,汉宁窗失真16%。FRF的幅值失真从而使得阻尼估计不准确。


     

    6. 窗函数带来的影响

    窗函数会使信号幅值失真,那么窗函数对计算RMS值是否有影响呢?由于加窗使得频率峰值失真,因此,如果计算峰值处的RMS值,必然也是有影响的。如下图所示,由于峰值高低不一样,则对应的RMS也不一样。但如果计算窄带RMS或整个频带的总RMS值呢?

    从上图可以看出,不同的窗函数下,计算19-87Hz内的总有效值都为0.71,因此,对于不同的窗函数下,计算总有效值是没有影响的。因为能量虽然泄漏到旁瓣上,但总的能量是不变的。

    从第3小节中对比原始信号和加窗后的信号可以看出,信号的能量在起始和结束位置都计权置零,因而,从能量的角度来考虑,加窗后的信号能量要比加窗之前的能量小。因此,如果对信号施加了窗函数,则频谱还需要进行修正。修正分幅值修正和能量修正,如果是单条谱线则为幅值修正;如果是宽带则为能量修正。关于加窗后的频谱修正,请参考《简单总结FFT变换的幅值和能量校正》。但需要记住一点,这个工作,通常商业软件会自动处理,无须人工处理,只需要知道有这么一步工作即可。

    在《01.04:锤击测试使用指数窗会引起什么问题吗?》一文中曾经指出,锤击法测试对响应加指数窗以最小化泄漏是必须的,但是如果加大的指数窗函数可能会扭曲了真实的FRF,致使在FRF的密集模态很难观测到。因此,指数窗的使用,虽然是数字信号处理必须考虑的事项,但是当估计小阻尼结构和密集模态时,如果使用不当,将会引起一些严重的问题。

    每个窗函数对数据的频域描述都有影响。一般而言,窗函数将降低函数峰值幅值的精度,并且使得最终得到的阻尼似乎比实际真实存在的阻尼要更大。尽管这些误差完全是不想要的,但相比泄漏造成的严重失真而言,它们还是更能让人接受。

    更多相关内容
  • 窗函数:在开窗函数出现之前存在着很多用 SQL 语句很难解决的问题,很多都要通过复杂的相关子查询或者存储过程来完成。为了解决这些问题,在 2003 年 ISO SQL 标准加入了开窗函数,开窗函数的使用使得这些经典的...
  • 在实际中处理的离散信号序列总是有限长的,将一个长序列变成有限长的短序列要用到窗函数。LabVIEW中窗函数节点位于函数选板的“信号 处理→窗函数”,如图所示。  如图 窗函数子选板  如表 详细列出了常用...
  • 用C语言编写的加窗函数, hanning,实现信号的加窗
  • 基于python实现各类窗函数 windows fuction base python language
  • 涉及的窗函数:矩形窗,海明窗,汉宁窗以及布莱克曼窗; 用两种方式实现滤波器的单位冲激响应及频率响应; 使一个 多频率叠加白噪声的信号 通过滤波器,来观察滤波效果; 程序中备注很详细。
  • 工作中用到了几个hive开窗函数,便想把hive开窗函数系统梳理一遍。 开窗函数 普通的聚合函数聚合的行集是组,开窗函数聚合的行集是窗口。因此,普通的聚合函数每组(Group by)只返回一个值,而开窗函数则可为窗口中的每...
  • mysql 开窗函数

    2021-01-07 14:23:19
    场景1: 取max 表结构 create table tb_test_info( student_id char(4) comment '学号', grade_id int comment '课程号', score int comment '分数', primary key (student_id,grade_id) );...
  • SQL Server 2012 开窗函数

    2020-09-09 20:14:31
    主要介绍了SQL Server 2012 开窗函数功能的实例代码,具体代码如下所示
  • 下面是几种窗函数归一化DTFT幅度的MATLAB程序:
  • 本文主要讲了几种窗函数的C语言代码,下面一起来学习一下
  • 主要介绍了Sql Server 开窗函数Over()的使用,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 实验六用窗函数设计FIR滤波器 实验目的 熟悉FIR滤波器设计的方法和原理 掌握用窗函数法设计 FIR滤波器的方法和原理熟悉滤波器的特性 了解各种窗函数滤波器特性的影响 实验原理 FIR滤波器的设计方法主要有三种窗函数...
  • 在没学习开窗函数之前,我们都知道,用了分组之后,查询字段就只能是分组字段和聚合的字段,这带来了极大的不方便,有时我们查询时需要分组,又需要查询不分组的字段,每次都要又到子查询,这样显得sql语句复杂难懂...
  • 实验六 用窗函数设计FIR滤波器 实验目的 熟悉FIR滤波器设计的方法和原理 掌握用窗函数法设计 FIR滤波器的方法和原理熟悉滤波器的特性 了解各种窗函数滤波器特性的影响 实验原理 FIR滤波器的设计方法主要有三种窗函数...
  • 减少频谱泄漏,通常在采样后对信号加窗。在电机故障诊断领域,需同时考虑频率分辨率和频谱泄漏。应用最广泛的窗函数是汉宁窗。
  • 数字信号fft分析时,各种窗函数的幅值和功率补偿系数,用于加窗以后恢复信号幅值和功率
  • 特征分析与偏移分析什么是开窗函数?学习目标:1、累计计算窗口函数(1)sum(…) over(……)(2)avg(…) over(……)(3)语法总结:2、分区排序窗口函数3、分组排序窗口函数4、偏移分析窗口函数练习总结: 什么是开...
  • 根据不同的窗函数编制matlab程序产生不同的非线性调频信号 根据不同的窗函数编制matlab程序产生不同的非线性调频信号
  • 提出一种基于FPGA的矩形窗、海明窗、汉宁窗和布莱克曼窗四个窗函数的改进型信号截短算法方案,并对其资源消耗和运行速度进行优化,从而提高频谱泄露的性能。为了减少系统资源消耗和提高精度,采用了资源共享技术、...
  • 本程序是窗函数法设计FIR数字滤波器Matlab程序——矩形窗
  • MATLAB完整程序,从数学上实现高斯函数,并分析其随频率变化的时域规律
  • 实现信号加窗,加的有汉宁、海明等其他
  • 在开窗函数出现之前存在着很多用 SQL 语句很难解决的问题,很多都要通过复杂的相关子查询或者存储过程来完成。为了解决这些问题,在2003年ISO SQL标准加入了开窗函数,开窗函数的使用使得这些经典的难题可以被轻松...
  • 资源包括基于matlab的窗函数设计,同时包括不同窗函数的结果对比,word包括整个流程的实验报告
  • 在引入实验的七种典型窗函数中,有限带宽、三角形窗以及余弦窗是卷积窗函数比较理想的选择。在图像重建,选择有限带宽窗时有较好的空间分辨率,三角形窗时有较好的密度分辨率,选择余弦窗时是空间分辨率与密度分辨率...
  • 代码
  • 前面已经分析了窗函数和相位误差对脉冲压缩的影响,并给出了一些仿真实验。这里对前面所有的仿真进行了总结,并整理了相关程序,设计了一个matlab小软件。 本软件的功能是分析窗函数和相位误差对脉冲压缩的影响,在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 791,418
精华内容 316,567
关键字:

窗函数

友情链接: dejmvkca.zip