窗函数的介绍以及画出常见窗函数(汉宁窗,矩形窗,汉明窗,布莱克曼窗)的时域图和频谱图

这篇具有很好参考价值的文章主要介绍了窗函数的介绍以及画出常见窗函数(汉宁窗,矩形窗,汉明窗,布莱克曼窗)的时域图和频谱图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

常见的四种窗函数的表达式为:

窗函数,人工智能,算法,数据库

四种常见窗函数的参数表

窗函数,人工智能,算法,数据库

对于实际信号序列,该如何选取窗函数呢?一般来说,选择第一旁瓣衰减大,旁瓣峰值衰减快的窗函数有利于缓解截断过程中产生的频谱泄漏问题。但具有这两个特性的窗函数,其主瓣宽度较大,相应会带来一些副作用,应用中需根据具体情况折中地选择。

设信号中包含fa和fb两个频率分量,窗函数的选择与两个频率分量的间距以及两个频率分量的幅度比例密切相关。窗函数选择的一般准则如下表所列。

窗函数选择的一般规则

窗函数,人工智能,算法,数据库

主瓣窄的窗函数一般旁瓣泄漏大,频谱泄漏主要集中在旁瓣范围内。旁瓣衰减大的窗函数,一般主瓣较宽,泄漏主要集中在主瓣范围内。

当选择加窗DFT时,已知采样长度N的选择与最小频域分辨率有关,而从上表中看到采样长度N还与窗函数的主瓣宽度相关,所以N的选择应为

N≥(fs/△fmin)K

式中:K为窗函数的主瓣宽度与矩形窗的主瓣宽度之比。
根据窗函数对数据处理的影响,可参照下列原则选取理想的窗函数:
①窗函数频谱的主瓣应尽可能地窄,以提高谱估计时的频域分辨率和减小泄漏。
②尽量减小窗函数频谱的最大旁瓣的相对幅度,以使旁瓣高度随频率尽快衰减。
若以上两条不能同时得到满足,则往往是增加主瓣宽度以换取对旁瓣的抑制。
总之,在应用窗函数时,除要考虑窗函数频谱本身的特性外,还应充分考虑被分析信号的特点及具体处理要求。

案例、设N=256,用boxcar函数产生矩形窗,以N=256进行FFT,又以N=2048点进行FFT,比较它们的谱图。并用hanning函数,hamming函数和blackman函数得到它们的谱图和时域图,程序如下:

clear all; clc; close all;

N=256;                         % 窗长度             
x=boxcar(N);                   % 设置矩形窗
y=hanning(N);
z=hamming(N);
w=blackman(N);
% 第一部分
X1=fft(x);                     % FFT
X1_abs=abs(fftshift(X1));      % 计算幅值
freq1=(-128:127)/N;            % 频率刻度1
figure(1);
subplot 311; plot(freq1,X1_abs,'k');      % 作图
xlim([-0.1 0.1]);
xlabel('归一化频率'); ylabel('幅值');
title('(a) 补零前FFT谱图')
% 第二部分
X2=fft(x,N*8);                 % 对矩形窗补零后FFT
X2_abs=abs(fftshift(X2));      % 计算幅值
freq2=(-N*4:N*4-1)/(N*8);      % 频率刻度2
subplot 312; plot(freq2,X2_abs,'k');      % 作图
xlim([-0.1 0.1]);
xlabel('归一化频率'); ylabel('幅值');
title('(b) 补零后FFT谱图')

X2_dB=20*log10(X2_abs/(max(X2_abs))+eps); % 幅值取分贝值

subplot 313; plot(freq2,X2_dB,'k');       % 作图
axis([0 0.1 -50 5]);
%xlim([-0.1 0.1]);
xlabel('归一化频率'); ylabel('幅值/dB');
title('(c) 补零后FFT谱图-分贝值')
set(gcf,'color','w');
%%
Y2=fft(y,N*8);                 % 对hanning窗补零后FFT
Y2_abs=abs(fftshift(Y2));      % 计算幅值
Y2_dB=20*log10(Y2_abs/(max(Y2_abs))+eps); % 幅值取分贝值

Z2=fft(z,N*8);                 % 对hamming窗补零后FFT
Z2_abs=abs(fftshift(Z2));      % 计算幅值
Z2_dB=20*log10(Z2_abs/(max(Z2_abs))+eps); % 幅值取分贝值

W2=fft(w,N*8);                 % 对blackman窗补零后FFT
W2_abs=abs(fftshift(W2));      % 计算幅值
W2_dB=20*log10(W2_abs/(max(W2_abs))+eps); % 幅值取分贝值
figure(2);
plot(freq2,Y2_dB,'k');       % 作图
hold on;
plot(freq2,X2_dB,'r');
plot(freq2,Z2_dB,'b');
plot(freq2,W2_dB,'g');
axis([0 0.1 -150 5]);
%xlim([-0.1 0.1]);
xlabel('归一化频率'); ylabel('幅值/dB');
title('补零后FFT谱图-分贝值')
legend('hanning','boxcar','hamming','blackman');
set(gcf,'color','w');

figure(3);
plot(hanning(N));hold on;
plot(boxcar(N));
plot(hamming(N));
plot(blackman(N));
legend('hanning','boxcar','hamming','blackman');
title('四种窗函数的时域波形图');

运行结果如下:

窗函数,人工智能,算法,数据库

窗函数,人工智能,算法,数据库 

窗函数,人工智能,算法,数据库 

在程序第一部分中(第一张图片),N=256,作256点的FFT,得图1(a)。从图中可看
到矩形窗的谱图并不只有一条谱线,且没有泄漏。这是怎么回事?
矩形窗的谱函数为

窗函数,人工智能,算法,数据库

在N点DFT后离散频率为wk=2πk/N(k=C,1,…,N-1)。把wk代入上式可以发现,除k=0外,其他频点的幅值都为0,这就是为什么在图1(a)中除0点有谱线外,其他都为0值。

要得到常见的矩形窗谱图(把0值之间泄漏的值都能绘制出来),可以通过对数据补零得到。在程序第二部分N=256,但FFT变换长度L=2048,其中在数据后补了1792(256*7)个零值。FFT后的结果见图1(b),同时对FFT后的幅值取分贝值后的结果见图1(c),这就是我们常见的矩形窗的谱图。

同时在程序第二部分,我们得到了四种窗函数的时域波形和频谱图。

参考文献:MATLAB数字信号处理85个实用案例精讲——入门到进阶;宋知用(编著)文章来源地址https://www.toymoban.com/news/detail-781539.html

到了这里,关于窗函数的介绍以及画出常见窗函数(汉宁窗,矩形窗,汉明窗,布莱克曼窗)的时域图和频谱图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SQL 中的 MIN 和 MAX 以及常见函数详解及示例演示

    SQL中的MIN()函数和MAX()函数用于查找所选列的最小值和最大值,分别。以下是它们的用法和示例: MIN()函数返回所选列的最小值。 示例: 查找Products表中的最低价格: MAX()函数返回所选列的最大值。 示例: 查找Products表中的最高价格: MIN()和MAX()函数的一般语法如下: 以下是

    2024年03月20日
    浏览(57)
  • 异或运算的基本介绍以及使用技巧,剖析常见的异或题目

    异或运算,符号为‘^’,直接对底层二进制串进行运算,比算术运算快得多,规则为:相同为0,不同为1。 假设N为任意实数 性质1:0 ^ N = N 性质2:N ^ N = 0 性质3:异或运算满足交换律与结合律 重点:我们可以将异或运算理解为二进制的无进位相加!也就是说,当两个数异或

    2024年02月08日
    浏览(50)
  • 常见加密解密(DES、RSA)以及摘要算法MD5的介绍

    1.1-理解MD5 MD5公开的算法,任何语言实现后其实都是一样的、通用的 不可逆加密:原文——加密——密文,密文无法解密出原文 1.2-MD5封装 1.3-MD5总结 相同原文加密的结果是一样的 不同长度的内容加密后都是32位,可以自行改变长度 原文件改动差别很小,结果差别很大 不管文

    2024年02月14日
    浏览(91)
  • C语言内存函数介绍以及实现

    目录 前言 一:内存拷贝函数 (1)memcpy( )函数 (2)memove( )函数 二:内存比较函数 三:内存设置函数 本文介绍的函数的函数声明都在头文件string.h中。 函数声明:void* memcpy(void* dest,const void* src,size_t num) 作用:把一片内存空间的字节拷贝到另一片内存空间。 函数参数的意义: ①dest指

    2024年02月01日
    浏览(38)
  • C语言字串函数、内存函数介绍以及模拟实现

        目录 前言 本期内容介绍: 一、字符串函数 strlen介绍 strlen 模拟实现(三种方式) 方法一:计数器法  方法二:递归法(不创建临时变量法) 方法三:指针-指针 strcpy介绍 strcpy模拟实现 ​编辑strcmp介绍 strcmp模拟实现 strcat介绍 strcat模拟实现 strncpy介绍 strncpy模拟实现 s

    2024年02月14日
    浏览(40)
  • MATLAB中的sym函数、syms函数、symfun函数以及symvar函数的简单介绍

    在日常求解数学题目的时候常常需要对于进行对于带有符号的变量进行运算,比如最经典的就是求解方程,求出方程中所有变量的解。本文主要对于MATLAB中符号对象的函数进行解释,包括sym函数、syms函数、symfun函数和symvar函数。 目录 1、sym函数 2、syms函数 3、symfun函数 4、s

    2024年02月03日
    浏览(53)
  • Python中,hasattr()函数的详细介绍以及使用

    在Python中, hasattr() 函数是一种重要的工具,用于判断对象是否具有指定的属性或方法。通过使用 hasattr() 函数,我们可以在运行时动态地检查对象的能力,提高代码的灵活性和可维护性。本文将介绍 hasattr() 函数的基本概念、使用方法以及与其他相关函数的比较,同时提供实

    2024年02月12日
    浏览(42)
  • 详细介绍五种常用字符串库函数 以及对库函数的模拟实现

    本文介绍了strlen.strcpy.strcmp.strcat.strstr五大字符串库函数及使用自定义函数模拟实现这五个字符串库函数.学会使用字符串库函数,在处理字符串时会事半功倍… 使用字符串库函数首先需要包含字符串头文件-#includestring.h 这篇博客中详细介绍到了函数-库函数和自定义函数 strlen为

    2024年02月15日
    浏览(38)
  • vue中内置指令v-model的作用和常见使用方法介绍以及在自定义组件上支持

    一、v-model是什么 v-model是Vue框架的一种内置的API指令,本质是一种语法糖写法,它负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。在Vue中,v-model是用于在表单元素和组件之间创建双向数据绑定的指令。它可以简化表单元素的绑定,使得在用户输入

    2024年01月19日
    浏览(48)
  • 【前端知识】Three 学习日志(十)—— 常见几何体(长方体、球体、圆柱、矩形平面、圆形平面)

    Three 学习日志(十)—— 常见几何体(长方体、球体、圆柱、矩形平面、圆形平面) 一、构建常用几何体 二、 遍历加入场景中 三、效果展示 四、完整代码

    2024年02月07日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包