问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Hamming与Hanning窗口:原理介绍及实例解析

创作时间:
作者:
@小白创作中心

Hamming与Hanning窗口:原理介绍及实例解析

引用
CSDN
1.
https://blog.csdn.net/zhuoqingjoking97298/article/details/145450955

在信号处理和数字通信领域,窗口函数是处理频谱泄漏和旁瓣抑制的重要工具。本文将详细介绍Hamming窗口和Hanning窗口的原理及其应用,通过实例解析不同窗口函数的频谱特性,帮助读者理解如何选择合适的窗口函数以优化信号处理效果。

01 数据窗口

一、矩形窗口

对于方波信号,它的频谱外包络随着频率的倒数规律下降。使用对数纵坐标绘制频率,可以显示更多的小的频谱细节。


图1.1.1 矩形窗口


图1.1.2 矩形窗口的FFT(前面一段)


图1.1.3 对数幅度坐标对应的频谱

二、三角波形

对于三角窗口,这是一个连续的信号,对应的频率衰减更快。但对应的频谱宽度更大。


图1.2.1 三角波形


图1.2.2 三角波形的频谱


图1.2.3 对数频谱

三、Hanning窗口

汉宁窗口具有更加光滑的外表,频谱衰减随着频率的三次方分之一进行衰减。在对数频谱中,可以更加明显的看到衰减快的趋势。


图1.3.1 Hanning窗口


图1.3.2 Hanning窗口的频谱


图1.3.3 对数频谱

一个神奇的情况,就是将前面的升余弦窗口进行改造,将它往上移动了大约7%左右,虽然现在信号出现了比较小的突破,但是所带来的一个巨大的好处,那就是频谱的第一个旁瓣的幅度更小了。这一点在对数频谱中可以看的很清楚。也就是它的第一个旁瓣变的很小,后面的频谱波动随着频率的倒数进行衰减。


图1.3.4 Hamming窗口


图1.3.5 Hamming窗口的频谱


对数频谱

改变升余弦跳跃的比例,可以看到频谱的第一个旁瓣的高度,会在某一个跳跃比例下,达到最小。


图1.3.7 不同比例的Hamming窗口


图1.3.8 对应的频谱变化

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST1.PY                     -- by Dr. ZhuoQing 2025-02-05
#
# Note:
#============================================================
from headm import *
N = 10000
data = zeros(N)
for ii in range(100):
    i = 2
    n = N//(i+2)
    startn = N//2-n//2
    endn = startn + n
    data = zeros(N)
    data[startn:endn] = 1
#------------------------------------------------------------
#    for j in range(startn, endn):
#        m = (startn + endn) // 2
#        if j <= m:
#            jj = m-j
#        else: jj = j-m
#        jjj = (0.5 - jj/n)*2
#        data[j] = data[j]*jjj
    for j in range(startn, endn):
        a0 = 0.5+(ii/250)
        a1 = 1 - a0
        n = j - startn
        w = a0-a1*cos(2*pi*n/(endn-startn-1))
        data[j] = data[j]*w
#------------------------------------------------------------
#    plt.clf()
#    plt.plot(data, lw=3)
#    plt.xlabel("N", color="steelblue", fontsize=16)
#    plt.ylabel("Value", color="steelblue", fontsize=16)
#    plt.grid(True)
#    plt.tight_layout()
#    plt.draw()
#    plt.pause(.1)
#    pltgif.append(plt)
#    printf(i)
#------------------------------------------------------------
    fftd = fft.fft(data)
    fftda = abs(fftd)
    nfft = N//50
    plt.clf()
#    plt.plot(fftda[:nfft], lw=3)
    plt.semilogy(fftda[:nfft], lw=3)
    plt.xlabel("Frequency", color="steelblue", fontsize=16)
    plt.ylabel("Spectrum", color="steelblue", fontsize=16)
    plt.grid(True)
    plt.tight_layout()
    plt.draw()
    plt.pause(.1)
    pltgif.append(plt)
#------------------------------------------------------------
pltgif.save()
printf("\a")
#------------------------------------------------------------
#        END OF FILE : TEST1.PY
#============================================================

总结

本文显示了不同数据加窗的频谱。如果希望第一个频谱旁瓣打到最小,可以使用具有特定跳跃参数的Hamming窗口。

相关文献链接:

  • Hamming(汉明)窗的原理介绍及实例解析

相关图表链接:

  • 图1.1.1 矩形窗口
  • 图1.1.2 矩形窗口的FFT(前面一段)
  • 图1.1.3 对数幅度坐标对应的频谱
  • 图1.2.1 三角波形
  • 图1.2.2 三角波形的频谱
  • 图1.2.3 对数频谱
  • 图1.3.1 Hanning窗口
  • 图1.3.2 Hanning窗口的频谱
  • 图1.3.3 对数频谱
  • 图1.3.4 Hamming窗口
  • 图1.3.5 Hamming窗口的频谱
  • 对数频谱
  • 图1.3.7 不同比例的Hamming窗口
  • 图1.3.8 对应的频谱变化
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号