• Matlab 如何选择窗函数和 FFT 的长度


    FIR---Matlab 如何选择窗函数和 FFT 的长度

    各种窗函数的介绍,见:

    数据截断、频谱泄漏与窗函数的选择_布莱克曼窗_yishuihan-Oliver的博客-CSDN博客

    1、常用的四种窗函数

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

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

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

           当选择加窗DFT时,已知采祥长度 N 的选择与最小頻域分辨率有关,而从表2-2-1中看到采长度 N 还与窗函数的主瓣寛度相关,所以 N 的选择应为:  N\geqslant \frac{f_{s}}{\Delta f_{min}}*K   (式 2-2-26) 

    式中:K 为窗函数的主瓣寛度与矩形窗的主瓣寛度之比。 

    根据窗函数对数据处理的影响,可参照下列原則选取理想的窗函数:

    • ①窗函数频谱的主瓣尽可能地窄,以提高谱估计时的頻域分辨率和减小泄漏。 
    • ②尽量减小窗函数频谱的最大旁瓣的相对幅度,以使旁瓣高度随頻率尽快衰减。

    若以上两条不能同时得到満足,则往往是増加主瓣寛度以換取旁瓣的抑制。 

           总之,在应用窗函数时,除要考窗函数本身的特性外,还应充分考虑被分析信号的特点及具体处理要求。

    2、实例

    例:已知信号x(t) 中 50Hz 频率分量的幅值为 311,46Hz 频率分量的幅值为 1.55,采样频率f_{s}=8000Hz。要求 46Hz 信号的幅度分析进度不低于 5%,试问:

    1. 选择何种类型的窗函数比较合适?
    2. 采样长度 N 应为多少?
    3. 分析信号的实际频谱。

           分析:由于 50Hz 频率分量幅度远大于 46Hz 频率分量,需要防止 50Hz 频率分量对 46Hz 频率分量的泄漏,同时考虑 46Hz 分量分析精度的要求,允许 50Hz 频率分量的最大泄漏为20*\lg \left | \frac{1.55}{311} *0.05\right |=-80dB

           以上介绍的窗函数中没有一个窗函数的第一旁瓣衰减能达到 -80dB;但可以选择旁瓣衰减大、高频衰减速度快的窗函数,以满足实际衰减要求。根据表2-2-1,选择布莱克曼窗比较合适。布莱克曼窗第3个旁瓣衰减为(-58-18*3)= -112dB。

    此时,采样长度的选择不但要考虑窗函数的主瓣宽度,还要考虑旁瓣位置:

    N\geqslant \frac{f_{s}}{\Delta f_{min}}*(K+M)=\frac{8000}{50-46}*(3+3)=12000

    式中:K为窗函数的主瓣宽度与矩形窗的主瓣宽度之比,M为旁瓣位置。按表2-2-1中信息,矩形窗的主瓣宽度为 \frac{4\pi }{N},而布莱克曼窗的主瓣宽度为 \frac{12\pi }{N},所以 K=3;又取布莱克曼窗第3个旁瓣,M=3。

    Matlab 程序如下:

    1. % Matlab 如何选择窗函数和 FFT 的长度
    2. %
    3. % pr2_2_11
    4. clear; clc; close all;
    5. f1 = 50; a1 = 311; % 设置第1个分量的频率与幅值
    6. f2 = 46; a2 = 1.57; % 设置第2个分量的频率与幅值
    7. N = 12000; % 设置数据长度N
    8. fs = 8000; % 设置采样频率fs
    9. t = (0:N-1)/fs; % 设置时间刻度
    10. x = a1*cos(2*pi*f1*t)+a2*cos(2*pi*f2*t); % 设置信号
    11. freq = (0:N/2)*fs/N; % 设置频率刻度
    12. wind = blackman(N)'; % 给出布莱克曼窗函数
    13. X = fft(x.*wind); % FFT
    14. % 作图
    15. plot(freq,20*log10(abs(X(1:N/2+1))),'k');
    16. grid; xlim([0 100])
    17. xlabel('频率/Hz');
    18. ylabel('幅值/dB');
    19. title('信号谱图');
    20. set(gcf,'color','w');

  • 相关阅读:
    树的遍历算法题总结(第二十六天)
    微服务系统架构的演变
    java房屋装修公司业务管理系统
    Android平台 Target API level 升级到 31,在Android 12上启动黑屏卡死
    Echarts柱状图数据过多设置滚动条效果
    Rabbitmq - 集群模式
    mySql语句整理
    LeetCode每日一题(126. Word Ladder II)
    PMP备考大全:经典题库(敏捷管理第6期)
    比起传统纸质表单,在线表单制作工具优势在哪?
  • 原文地址:https://blog.csdn.net/yishuihanq/article/details/132760292