FIR---Matlab 如何选择窗函数和 FFT 的长度_matlab 窗函数-程序员宅基地

技术标签: matlab  算法  信息与通信  Matlab数字信号处理  信号处理  

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

各种窗函数的介绍,见:

数据截断、频谱泄漏与窗函数的选择_布莱克曼窗_yishuihan-Oliver的博客-程序员宅基地

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 程序如下:

% Matlab 如何选择窗函数和 FFT 的长度
% 
% pr2_2_11  
clear; clc; close all;

f1 = 50; a1 = 311; % 设置第1个分量的频率与幅值
f2 = 46; a2 = 1.57; % 设置第2个分量的频率与幅值
N = 12000; % 设置数据长度N
fs = 8000; % 设置采样频率fs
t = (0:N-1)/fs; % 设置时间刻度
x = a1*cos(2*pi*f1*t)+a2*cos(2*pi*f2*t); % 设置信号
freq = (0:N/2)*fs/N; % 设置频率刻度
wind = blackman(N)'; % 给出布莱克曼窗函数
X = fft(x.*wind); % FFT

% 作图
plot(freq,20*log10(abs(X(1:N/2+1))),'k');
grid; xlim([0 100])
xlabel('频率/Hz');
ylabel('幅值/dB');
title('信号谱图');
set(gcf,'color','w');

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yishuihanq/article/details/132760292

智能推荐

快速掌握RabbitMQ(三)——消息确认、持久化、优先级的C#实现_c# rabbitmq 消息为持久化-程序员宅基地

文章浏览阅读490次。阅读目录1 消息确认 1 生产者端消息确认(tx机制和Confirm模式) 2 消费者端消息确认(自动确认和显示确认) 2 消息持久化/优先级 1 消息持久化(Persistent) 2 消息优先级(Priority) 3 小结 回到顶部1 消息确认  在一些场合,如转账、付费时每一条消息都必须保证成功的被处理。AMQP是金融级的消息队列协议,有很高的可靠性,这里介绍在使用RabbitMQ时怎么保证消息被成功处理的。消息确认可以分为两种:一种..._c# rabbitmq 消息为持久化

* swiper in ./node_modules/vue-awesome-swiper/dist/vue-awesome-swiper.js_*swiper in-程序员宅基地

文章浏览阅读4.7k次,点赞11次,收藏6次。项目安装swiper轮播后,启动报错:_*swiper in

三个Makefile通用模板_-duse_debug-程序员宅基地

文章浏览阅读301次。转载自 这里编译可执行MakefileVERSION =1.00CC =gccDEBUG =-DUSE_DEBUGCFLAGS =-WallSOURCES =$(wildcard ./source/*.c)INCLUDES =-I./includeLIB_NAMES =-lfun_a -lfun_soLIB_PATH =-L./libOBJ =$(patsubst %.c, %.o, $(SOURCES))TARGET =app#links$(TAR_-duse_debug

DiskGenius v4.30专业版下载_diskgenius下载 csdn-程序员宅基地

文章浏览阅读329次。文件预览、扇区编辑、加密分区恢复、Ext4分区恢复、RAID恢复等高级功能应有尽有,满足个人用户及企业用户对数据恢复的各种需求。安全快速地恢复硬盘、移动硬盘、U盘、内存卡、RAID、虚拟磁盘上因误删除、格式化、分区损坏、分区丢失、病毒破坏、系统崩溃及其他未知原因丢失的数据。不管数据是什么原因丢失的,只要没有被覆盖,还有残留的文件信息,就可以正常查找到并恢复。双击文档、图片、视频、音频、文本、PDF等可以查看文件内容,以便准确预判恢复效果。(访问密码: 2024)_diskgenius下载 csdn

动态规划之最大子段和_最大子段和动态规划-程序员宅基地

文章浏览阅读1.7k次,点赞3次,收藏19次。最大子段和问题问题描述如下:多重循环求解问题的核心是求解连续的一段子序列使其和最大。最容易想到的便是通过循环遍历寻找最优的下标i,j使得a[i]+…+a[j]的和最大。很容易看出时间复杂度为O(n^3)。#include <iostream>#include<stdlib.h>#include<stdio.h>using namespace st..._最大子段和动态规划

单体架构-->SOA架构-->微服务架构_单体应用架构-程序员宅基地

文章浏览阅读4.1k次,点赞4次,收藏15次。上诉架构图采用了分层架构,按照调用顺序,从上到下为表示层、业务层、数据访问(DAO)层、DB层。表示层负责用户体验,业务层负责业务逻辑,包括电影、订单和用户三个模块。数据访问层负责DB层的数据存取,实现增删改查的功能。业务层定义了应用的业务逻辑,是整个应用的核心。在单体应用中,所有这些模块都集成在一起,这样的系统架构就叫做单体应用架构,或称为巨石型应用架构。单体应用是最早的应用形态,开发和部署都很简单。在中小型项目中使用单体应用架构,能体现出其优势,且单体应用的整体性能主要依赖于硬件资源和逻辑代码实现..._单体应用架构

随便推点

element ui树形组件过滤搜索_elementui tree 实现对树的搜索过滤-程序员宅基地

文章浏览阅读1.1k次。<template> <div> <el-input placeholder="输入关键字进行过滤" v-model="filterText"></el-input> <el-tree :data="menus" :props="defaultProps" node-key="catId" ref="menuTree" @node-click="nodeclick" ._elementui tree 实现对树的搜索过滤

android之Fragment_android fragment-程序员宅基地

文章浏览阅读2.6k次。目录一Fragment的简介和生命周期: <1> Fragment的简介 <2> Fragment的生命周期二将Fragment添加到Activty中使用 <1>概述 <2>使用不兼容方法将Fragemnt添加到Activity中使用 <2.1>不兼容方法..._android fragment

聚类分析(K-means算法)_k-means聚类分析-程序员宅基地

文章浏览阅读7.3w次,点赞65次,收藏508次。一、聚类分析1.1 聚类分析 聚类: 把相似数据并成一组(group)的方法。‘物以类聚,人以群分’ 不需要类别标注的算法,直接从数据中学习模式 所以,聚类是一种 数据探索 的分析方法,他帮助我们在大量数据中探索和发现数据结构1.2 相似度与距离度量 定义距离来度量表示相似度: 欧式距离,曼哈顿距离,闵氏距离..._k-means聚类分析

ARM异常及中断处理介绍(中断是异常的一种)_arm undefine exception-程序员宅基地

文章浏览阅读4.3k次,点赞6次,收藏24次。中断概念:是一个过程,是CPU在执行当前程序的过程中因硬件或软件的原因插入了另一段程序运行的过程。因硬件原因引起的中断过程的出现时不可预测的,即随机的,而软中断是事先安排好的。中断源概念:可以引起中断的信号源。中断优先级ARM处理器中有7种类型的异常,按优先级从高到低的排列如下:复位异常(Reset)、数据异常(Data Abort)、快速中断异常(FIQ)、外部中断异常(IRQ)、预取..._arm undefine exception

技术人,为什么需要构建知识图谱_知识图谱构建什么人需要弄-程序员宅基地

文章浏览阅读2.4k次。转载自:http://geek.csdn.net/news/detail/132909 这个时代,信息极大丰富,人每时每刻都被各种各样的知识、信息轰炸着。如何有效的选择对自己有价值的知识,如何构建一个独属于自己的知识体系并让它为自己创造价值,变得越来越重要。只有知识经过了你的选择和应用,内化为自己的隐性经验,纳入到你的知识体系中,才能真正地为你创造财富。怎样才能建立自己的知识体_知识图谱构建什么人需要弄

解决c++读入文件时多读一个字符_c++>>读取时多一个-程序员宅基地

文章浏览阅读2.4k次,点赞6次,收藏14次。问题阐述在用 c++ ifstream 读入文件是使用 eof() 函数判断结尾总会多出一个字符产生原因其实 EOF(end of file) 这个文件结束标志是在文件的最后一个字符之后的,当读入最后一个字符的时候其实文件并没有读到 EOF 标志,只有下一次读的时候才会读到 EOF,但是在读到 EOF 的时候如果未加处理还是会把 EOF 的值看做一个字符输出,故以下代码总会多输出一个字..._c++>>读取时多一个

推荐文章

热门文章

相关标签