精华内容
下载资源
问答
  • 窗函数

    2021-03-15 15:41:28
    什么是窗函数? - linmue-谭祥军的文章 - 知乎 https://zhuanlan.zhihu.com/p/24318554 本文首发于公众号《模态空间》。 似乎每次做FFT都需要加窗函数,很少有不加窗函数的时候。那为什么要加窗函数,加窗有什么...

    什么是窗函数? - 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 Sever的开窗函数,何谓开窗函数,不懂吧。反正对于我来说,我是摸不着头脑了,第一次听说过。那么,什么是开窗函数,其实可以理解为是聚合函数的一个加强版

    作为一名开发人员来讲,我感觉在职场白混了好多年,可能是自己真的没有进取的精神吧,看了《程序员的SQL金典》这本电子书,真的让我学到了不少知识,真心喜欢这本电子书,书中讲解的内容比较好懂,也比较实用。谢谢作者的辛勤汗水:)。

    今天将要介绍SQL Sever的开窗函数,何谓开窗函数,不懂吧。反正对于我来说,我是摸不着头脑了,第一次听说过。那么,什么是开窗函数,其实可以理解为是聚合函数的一个加强版。因为使用聚合函数的话(不包括子查询的情况),整个查询都只能是聚合列返回值,而不能有基础行的返回值。那么对于需要基础行的返回值的话,就需要使用复杂的子查询或者是存储过程等才可以解决。但是使用开窗函数就可以轻松解决,它能够在同一行中同时返回基础行的列和聚合列。在ISO SQL规定了这样的函数为开窗函数,在Oracle中则被称为分析函数,而在DB2中则被称为OLAP函数。

    开窗函数与聚合函数一样,都是对行的集合组进行聚合计算。它用于为行定义一个窗口(这里的窗口是指运算将要操作的行的集合),它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的列和聚合列。反正我理解这个函数已经使用好子查询或者是其它方式求得聚合列的值给我合并。

    以书中的例子一步一步来介绍,假设要计算所有人员的总数,我们可以执行下面的SQL语句:

    SELECT COUNT(FName) FROM T_Person

    这种方式比较直接,只返回一个聚合列的值,没有任何基础行的列的值。但是有时需要从不在聚合函数中的行的列中访问这些聚合计算的值(即基础行的列)。比如我们想查询每个工资小于5000元的员工信息(城市以及年龄),并且在每行中都显示所有工资小于5000 元的员工个数,尝试编写下面的SQL语句:

    SELECT FName, FCITY, FAGE, FSalary, COUNT(FName)
    FROM T_Person
    WHERE FSALARY<5000

    执行上面的SQL以后我们会得到下面的错误信息
    选择列表中的列'T_Person.FCity' 无效,因为该列没有包含在聚合函数或GROUP BY 子句中。
    这是因为所有不包含在聚合函数中的列必须声明在GROUP BY 子句中,使用子查询的方式是可以解决:

    复制代码
    SELECT FName, FCITY, FAGE, FSalary,
    (
    SELECT COUNT(FName) FROM T_Person
    WHERE FSALARY<5000
    )
    FROM T_Person
    WHERE FSALARY<5000
    复制代码

    虽然使用子查询能够解决这个问题,但是子查询的使用非常麻烦,使用开窗函数则可以大大简化实现,下面的SQL语句展示了如果使用开窗函数来实现同样的效果:

    SELECT FName, FCITY, FAGE, FSalary, COUNT(FName) OVER()
    FROM T_Person
    WHERE FSALARY<5000

    可以看到与聚合函数不同的是,开窗函数在聚合函数后增加了一个OVER关键字。
    开窗函数的调用格式为:函数名(列) OVER(选项)

    我这里使用的是SQL Server 2008 R2,不知道从什么时候开始,SQL SERVER也支持开窗函数中使用ORDER BY子句(注:书本中说MSSQLServer中是不支持开窗函数中使用ORDER BY子句)。不管怎么样,这里我整合了网上的相关内容。也正因为开窗函数支持了ORDER BY子句之后,开窗函数被分为两大类。

    第一大类:聚合开窗函数====》聚合函数(列) OVER (选项),这里的选项可以是PARTITION BY子句,但不可是ORDER BY子句

    第二大类:排序开窗函数====》排序函数(列) OVER(选项),这里的选项可以是ORDER BY子句,也可以是 OVER(PARTITION BY子句 ORDER BY子句),但不可以是PARTITION BY子句

     

    聚合开窗函数

     

    OVER 关键字表示把聚合函数当成聚合开窗函数而不是聚合函数。SQL 标准允许将所有聚合函数用做聚合开窗函数。
    在上边的例子中,开窗函数COUNT(*) OVER()对于查询结果的每一行都返回所有符合条件的行的条数。OVER关键字后的括号中还经常添加选项用以改变进行聚合运算的窗口范围。如果OVER关键字后的括号中的选项为空,则开窗函数会对结果集中的所有行进行聚合运算。

     

    PARTITION BY 子句

     

    开窗函数的OVER关键字后括号中的可以使用PARTITION BY 子句来定义行的分区来供进行聚合计算。与GROUP BY 子句不同,PARTITION BY 子句创建的分区是独立于结果集的,创建的分区只是供进行聚合计算的,而且不同的开窗函数所创建的分区也不互相影响。下面的SQL语句用于显示每一个人员的信息以及所属城市的人员数:

    SELECT FName, FCITY, FAGE, FSalary,
    COUNT(FName) OVER(PARTITION BY FCITY)
    FROM T_Person

    OVER(PARTITION BY FCITY)表示对结果集按照FCITY进行分区,并且计算当前行所属的组的聚合计算结果。在同一个SELECT语句中可以同时使用多个开窗函数,而且这些开窗函数并不会相互干扰。比如下面的SQL语句用于显示每一个人员的信息、所属城市的人员数以及同龄人的人数:

    SELECT FName,FCITY, FAGE, FSalary,
    COUNT(FName) OVER(PARTITION BY FCITY),
    COUNT(FName) OVER(PARTITION BY FAGE)
    FROM T_Person

     

    排序开窗函数

     

    对于排序开窗函数来讲,它支持的开窗函数分别为:ROW_NUMBER(行号)、RANK(排名)、DENSE_RANK(密集排名)和NTILE(分组排名)。

    先看一段SQL语句:

    select  FName, FSalary, FCity, FAge,  
    row_number() over(order by FSalary) as rownum,  
    rank() over(order by FSalary) as rank,  
    dense_rank() over(order by FSalary) as dense_rank,  
    ntile(6) over(order by FSalary)as ntile 
    from  T_Person 
    order by  FName  

     执行的结果如下(对于想自己尝试的朋友,那你得辛苦点,下载电子书或者是购买书来学习吧。因为我可是限于篇幅,省略去大部分内容哦):

     

    看到上面的结果了吧,下面来介绍下相关的内容。我们得到的最终结果是按照FName进行升序显示的。

    对于row_number() over(order by FSalary) as rownum来说,这个排序开窗函数是按FSalary升序的方式来排序,并得出排序结果的序号

    对于rank() over(order by FSalary) as rank来说,这个排序形容函数是按FSalary升序的方式来排序,并得出排序结果的排名号。这个函数求出来的排名结果可以排列,并列排名之后的排名将是并列的排名加上并列数(简单说每个人只有一种排名,然后出现两个并列第一名的情况,这时候排在两个第一名后面的人将是第三名,也就是没有了第二名,但是有两个第一名)

    对于dense_rank() over(order by FSalary) as dense_rank来说,这个排序函数是按FSalary升序的方式来排序,并得出排序结果的排名号。这个函数与rand()函数不同在于,并列排名之后的排名只是并列排名加1(简单说每个人只有一种排名,然后出现两个并列第一名的情况,这时候排在两个第一名后面的人将是第二名,也就是两个第一名,一个第二名)

    对于ntile(6over(order by FSalary)as ntile 来说,这个排序函数是按FSalary升序的方式来排序,并得出排序结果的分组数。

    排序函数和聚合开窗函数类似,也支持在OVER子句中使用PARTITION BY语句。例如:

    select  FName, FSalary, FCity, FAge,  
    row_number() over(partition by FName  order by FSalary) as rownum,  
    rank() over(partition by FName order by FSalary) as rank,  
    dense_rank() over(partition by FName order by FSalary) as dense_rank,  
    ntile(6) over(partition by FName order by FSalary)as ntile 
    from  T_Person 
    order by  FName

     关于PARTITION BY子句,请看上面的介绍,这里就不再累赘了。但是需要注意一点的是,在排序开窗函数中使用PARTITION BY子句需要放置在ORDER BY子句之前。

    至此本文完。 

    展开全文
  • 窗函数的理解

    千次阅读 2020-07-15 16:40:21
    本文目录窗函数的作用窗函数的实质常见窗函数窗函数的评价指标如何选择窗函数 窗函数的作用 数字信号分析经常需要进行傅里叶变换。 当输入一个信号x(t),我们需要截取它其中的一段来进行研究,就可以用加窗来实现,...

    什么是窗函数? - 知乎
    上面的链接主要内容:

    1. 为什么要加窗函数;
    2. 窗函数的定义;
    3. 窗函数的时频域特征;
    4. 加窗函数的原则;
    5. 模态测试所用窗函数;
    6. 窗函数带来的影响。

    内容比较全,推荐阅读。

    窗函数的作用

    数字信号分析经常需要进行傅里叶变换。

    当输入一个信号x(t),我们需要截取它其中的一段来进行研究,就可以用加窗来实现,这里窗长就是截取长度。但因为之后我们会研究截取信号的频谱,需要对其进行傅里叶变换,而傅里叶变换又是作用于正负无穷的,所以要先对截取信号进行周期扩展。此时,若截取为整周期截取,周期扩展之后还是原信号,因此不会出现频谱泄露;若为非整周期截取,或信号根本就不是周期信号,截取信号不能表示整个信号,周期扩展之后信号的频谱会在每个周期相连的地方出现高次谐波,(高次谐波的产生可以大致地理解为周期扩展之后,时域上不再像原来一样连续,两个周期之间出现间断点,这个现象又叫Gibbs现象)这就是频谱泄露

    这里可以延伸出一个如何选择窗函数来减小频谱泄露的问题。即要求窗函数频谱的主瓣尽量窄、旁瓣衰减尽量大。但二者不可兼得,因此要根据实际需求选择窗函数。主瓣越窄的窗函数的频率识别精度越高;旁瓣衰减越大的窗函数的幅度识别精度越高。
    ————————————————
    https://blog.csdn.net/qq_34637672/article/details/83032792

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

    窗函数的实质

    时域上,与输入信号相乘;频域上,与输入信号做卷积傅里叶变换。

    常见窗函数

    矩形窗(Rectangular window)
    汉宁窗(Hanning window)
    汉明窗(Hamming window)
    布莱克曼窗(Blackman window)
    三角窗
    高斯窗
    指数窗
    平顶窗
    凯泽-贝塞尔窗
    切比雪夫窗(chebyshev window)
    ————————————————
    FFT中常用窗函数_智小星的博客-CSDN博客_fft窗函数

    窗函数的评价指标

    窗函数的重要参数:

    • leakage factor 泄露指数
    • Relative sidelobe attenuation 旁瓣衰减
    • Mainlobe width(-3dB) 主瓣宽度
    • sidelobe roll-off rate 旁瓣衰减率

    一文读懂FFT,海宁窗(hann)和汉明窗(hamming)的区别,如何选择窗函数_Li Kang 笔记本-CSDN博客_汉明窗和汉宁窗的区别

    加窗的主要想法是用比较光滑的窗函数代替截取信号样本的矩形窗函数,也就是对截断后的时域信号进行特定的不等计权,使被截断后的时域波形两端突变变得平滑些,以此压低谱窗的旁瓣。因为旁瓣泄露量最大,旁瓣小了泄露也相应减少了。不同的窗函数具有不同的频谱特征。下表列出了一些常用窗函数的特征。
    在这里插入图片描述
    主瓣宽度主要影响信号能量分布和频率分辨能力。频率的实际分辨能力为有效噪声带宽乘以频率分辨率,因此,主瓣越宽,有效噪声带宽越宽,在频率分辨率相同的情况下,频率的分辨能力越差。如下图所示,红色为平顶窗(3.77∆f),黑色为汉宁窗(1.5∆f),蓝色为信号频率,可以明显地看出,主瓣越窄,频率分辨越准确。对于窗函数宽的主瓣而言,如果有邻近的小峰值频率,则越难辨别出来。
    在这里插入图片描述
    旁瓣高低及其衰减率影响能量泄漏程度(频谱拖尾效应)。旁瓣越高,说明能量泄漏越严重,衰减越慢,频谱拖尾越严重。对50.5Hz(频率分辨率为1Hz)的信号分别施加矩形窗(红色)、汉宁窗(绿色)和平顶窗(蓝色),用对数显示幅值,加窗后的结果如下图所示。从图中可以看出,矩形窗的频谱拖尾更严重。在这里插入图片描述

    如何选择窗函数

    • 如果分析对象是单一频率信号,幅度分辨率比频域分辨率更高,则需要宽的主瓣。
    • 如果分析对象是单一频率信号,频域分辨率要求比幅度分辨率更高,则需要更窄的主瓣。

    选择原则:

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

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

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

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

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

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

    切比雪夫窗chebyshev window

    缺点:利用切比雪夫逼近理论设计FIR数字滤波器时,满足最佳一致逼近的滤波器又具有等纹波性质。存在通带纹波以及阻带纹波。
    优点:在阻带衰减更陡峭。

    展开全文
  • 做FFT之前又会用到窗函数。那么各种窗函数之间有什么区别呢?结论放在前面。 窗函数有两个评价指标,主瓣和旁瓣。 如果分析对象是单一频率信号的幅度分辨率比频域分辨率更高,则需要宽的主瓣。 如果分析对象是单一...

    一文读懂FFT,海宁窗(hann)和汉明窗(hamming)的区别


    数字信号处理离不开频域分析,一定会用到FFT。做FFT之前又会用到窗函数。那么各种窗函数之间有什么区别呢?结论放在前面。

    • 窗函数有四个评价指标,泄露指数,主瓣宽度,旁瓣衰减,旁瓣滚降率。
    • 汉明窗(hamming)和海宁窗(hann)类似,汉明窗两端不能到零,而海宁窗两端是零。汉明窗能够减少很近的旁瓣泄露,但是稍远一点的旁瓣泄露比海宁窗严重。
    • 海宁窗(hann)大多数情况下都能满足需求。它同时具有很好的频率分辨率和较少的频谱泄露。如果不知道用什么窗。海宁窗是个不错的选择。

    海宁窗和汉明窗

    汉明窗(hamming)和海宁窗(hann)类似,汉明窗的时域波形两端不能到零,而海宁窗时域信号两端是零。从频域响应来看,汉明窗能够减少很近的旁瓣泄露,但是稍远一点的旁瓣泄露比海宁窗严重。

    时域波形

    在这里插入图片描述

    频域响应

    在这里插入图片描述

    matlab window 工具

    matlab的window 工具可以很好地分析各种窗函数。下面截图红色框中突出了窗函数的三个重要参数。

    • leakage factor 泄露指数
    • Relative sidelobe attenuation 旁瓣衰减
    • Mainlobe width(-3dB) 主瓣宽度

    从三个指标来看,Hamming都要优于Hann,但实际上还有一个指标没有加进来,即旁瓣滚降率(sidelobe roll-off rate),可以很明显看出Hann的滚降率是大于Hamming的。Hann的滚降率为 -17.16dB/oct,而Hamming的滚降率为 -3.12dB/oct。
    在这里插入图片描述
    在这里插入图片描述

    如何选择窗

    • 如果分析对象是单一频率信号的幅度分辨率比频域分辨率更高,则需要宽的主瓣。
    • 如果分析对象是单一频率信号,频域分辨率要求比幅度分辨率更高,则需要更窄的主瓣。

    参考资料: Understanding FFTs and Windowing.pdf

    展开全文
  • librosa窗函数

    千次阅读 2018-06-11 20:26:41
    librosa使用的是scipy.signal.get_window(window, Nx, fftbins=True)进行窗函数的调用。 支持的窗函数列表:
  • 窗函数法FIR滤波器设计

    万次阅读 多人点赞 2019-01-28 23:32:29
    FIR滤波器设计通常可以分为窗函数法和频率采样法两类,这里先介绍窗函数
  • 几种常见窗函数的特性

    万次阅读 多人点赞 2018-07-24 23:42:42
    几种常见窗函数的特性 解决一下上一篇的遗留问题 上一篇谈了FIR滤波器的加窗是什么,但是自觉得还是有些地方没有说明白,就好比模拟加窗过程都没有讲明白。 不过今天再看书时,又有所得,忽然明白了为什么模拟...
  • 窗函数、fir、iir 的matlab程序,选择窗函数宽度,可观察窗函数时域频域特性、已知要求与指标,设计合适的以巴特沃斯为模型的模拟或数字低通滤波器
  • 窗函数 数字信号处理

    2020-10-05 23:20:31
    解决频谱泄露问题的方法窗函数介绍窗函数解决频谱泄露问题的原理窗函数的种类、特点和如何使用矩形窗汉宁窗(升余弦窗)海明窗(改进的升余弦窗)平顶窗主瓣和旁瓣窗的选择参考文献 使用窗函数解决什么问题? 保证...
  • 本文主要介绍了常见的窗函数以及窗函数有什么用,以及在实时频谱分析中,该如何选择合适的加窗方式。 随着无线通信的逐步发展,带来的是频谱环境的越发复杂与丰富,高度的信号变化性使得短时间内信号不再是一成不变...
  • 什么是窗函数?

    千次阅读 2019-01-02 00:07:29
    什么是窗函数? 似乎每次做FFT都需要加窗函数,很少有不加窗函数的时候。那为什么要加窗函数,加窗有什么好处,又有什么坏处呢,凭什么目的来加函数呢? 1. 为什么要加窗 在《什么是泄漏?》中已经讲到每次FFT变换...
  • 完全理解窗函数

    千次阅读 多人点赞 2018-10-12 21:06:30
    完全理解窗函数 一个星期终于搞懂了窗函数。以下为我的理解过程。 当输入一个信号x(t),我们需要截取它其中的一段来进行研究,就可以用加窗来实现,这里窗长就是截取长度。但因为之后我们会研究截取信号的频谱,需要...
  • 对信号处理中常用的窗函数进行总结和分析,详细说明了不同窗函数的优劣,在选择使用上给与说明。
  • MSSQL开窗函数

    2019-06-08 06:59:58
    作为一名开发人员来讲,我感觉在...今天将要介绍SQL Sever的开窗函数,何谓开窗函数,不懂吧。反正对于我来说,我是摸不着头脑了,第一次听说过。那么,什么是开窗函数,其实可以理解为是聚合函数的一个加强版。因...
  • 本程序是窗函数法设计FIR数字滤波器Matlab程序——矩形窗
  • 窗函数——笔记

    千次阅读 2018-09-29 09:11:03
    用处:用来做信号截断。时域和频域上均可加窗,但在时域上加窗更为普遍。...过程:用窗函数和原始的时域信号做乘积,以使相乘后的信号能更好满足傅里叶变换的周期性要求。     窗函数的典型频谱特征:  ...
  • 窗函数 (字面理解:就是从窗子里去看一个函数,这个窗子本身叫窗函数。) 数字信号的主要处理方式是傅里叶变换,而FFT是截取一段信号,对其进行周期延拓,然后进行处理,在进行截断时,会出现在截断点的信号畸变,...
  • 窗函数在图像处理中的应用

    千次阅读 多人点赞 2018-04-26 11:12:52
    窗函数在图像处理中的应用    上次我初略的讲了一下什么是窗函数,以及窗函数在DSP应用中的例子。之所以要引用窗函数,主要是为了防止突然的截断导致的频谱泄露。频谱的泄露在DIP的频域中也是非常常见的,我这里...
  • 使用窗函数方法设计FIR滤波器与MATLAB代码分析

    千次阅读 多人点赞 2019-06-17 22:27:46
    一,写在前面的话. 学习了以下链接,然后写出了MATLAB代码,在本文末,大家可以随便下载代码,进行尝试,我...自学什么是窗函数,什么是滤波器,为啥要用窗函数,怎么计算一些值,怎么根据这些值选择窗函数。 2. ...
  • 加窗分帧中各种窗函数

    万次阅读 2014-08-03 22:01:50
     ...任何函数与窗函数之积仍为窗函数,所以相乘的结果就像透过窗口“看”其他函数一样。窗函数在光谱分析、滤波器设计以及音频数据压缩(如在Ogg Vorbis音频格式中)等方面有广泛的应用。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 334,685
精华内容 133,874
关键字:

怎样选择窗函数