当前位置: 首页 > news >正文

【MATLAB】FIR滤波器的MATLAB实现

FIR滤波器的MATLAB实现

  • FIR滤波器的设计
  • fir1函数
  • fir2函数

与IIR滤波器相比,FIR滤波器既有其优势也有其局限性。FIR滤波器的主要优点包括:

  • 精确的线性相位响应;
  • 永远保持稳定性;
  • 设计方法通常是线性的;
  • 在硬件实现中具有更高的运行效率;
  • 启动传输仅需有限的时间。

然而,FIR滤波器也存在一些显著的缺点

  • 为了达到与IIR滤波器相同的性能要求,FIR滤波器通常需要更高的阶数;
  • 相应地,FIR滤波器的延迟时间比具备相同性能的IIR滤波器要高得多。

FIR滤波器的设计

MATLAB 信号处理工具箱提供了表1用于设计 FIR 数字滤波器的方法和工具函数。

设计方法说明工具函数
窗函数法对理想滤波器进行加窗处理,并根据滤波器的性能指标截取某一段,以近似地实现理想滤波器fir1, fir2, kaiserord
多带和过渡带等波纹或者最小二乘法逼近频率范围内的子带firls, firpm, firpmord
约束最小二乘法满足最大误差限制条件下使整个频带平方误差最小化fircls, fircls1
任意响应法任意响应,包括非线性相位和复杂滤波器cfirpm
升余弦法具有光滑余弦过渡带的低通滤波器的设计firreos
表1. FIR 数字滤波器设计方法和工具函数

窗函数法是设计FIR滤波器的重要方法之一,本文主要介绍FIR滤波器的窗函数设计方法。

在实际应用中,遇到的离散时间信号通常是有限长度的,因此在信号处理中不可避免地会遇到数据截短的问题。对于离散序列的截短,可以通过序列与窗函数的相乘来实现。

常用的窗函数包括矩形窗、巴特利特(Bartlett)窗、三角窗、海明(Hamming)窗、汉宁(Hanning)窗、布莱克曼(Blackman)窗、切比雪夫(Chebyshev)窗和凯泽(Kaiser)窗。MATLAB信号处理工具箱提供了一组用于生成这些窗函数的函数,具体见表2。

函数函数功能
w=bartlett(n)生成巴特立特 ( Bartlett ) 窗
w=blackman(n)生成布莱克曼 ( Blackman ) 窗
w=boxcar(n)生成矩形窗
w=chebwin(n)生成切比雪夫 ( Chebyshev ) 窗
w-hamming(n)生成海明 ( Hamming ) 窗
w=hanning(n)生成汉宁 ( Hanning ) 窗
w=kaiser(n)生成凯泽 ( Kaiser ) 窗
w=triang(n)生成三角窗
函数说明n为窗的长度
表2. MATLAB 信号处理工具箱窗函数汇总

fir1函数

MATLAB信号处理工具箱提供了基于加窗的线性相位FIR滤波器设计函数 fir1 和 fir2。fir1 函数的调用语法如下:

b=fir1(n,Wn,'fype',window)

其中:

  • n 表示滤波器的阶数。
  • ftype 表示所设计滤波器的类型,可选参数包括:
    • high:高通滤波器
    • stop:带阻滤波器
    • DC-1:多通带滤波器,第一频带为通带
    • DC-0:多通带滤波器,第一频带为阻带
    • 默认情况下,fir1 设计的是低通或带通滤波器。
  • window 为窗函数,是一个长度为 n+1 的列向量。默认情况下,函数自动使用 Hamming 窗。

例1. 设计一个48阶的FIR带通滤波器,通带范围为0.35≤w≤0.65。

clc;clear;closeb = fir1(48,[0.35 0.65]); % 调用fir1函数进行FIR带通滤波器设计
freqz(b,1,512)            % 画出幅频和相频响应图

输出的频率响应特性如图1所示:

在这里插入图片描述

图1. FIR带通滤波器幅频特性

例2. 用窗函数法设计多通带滤波器,归一化通带为[0 0.2]、[0.4 0.6]、[0.8 1]。由于高频端为通带,因此滤波器的阶数应为偶数,这里定为40。

首先将通带要求用向量w来表示,然后调用fir1函数进行滤波器设计。

w=[0.2 0.4 0.6 0.8]; % 滤波器设计参数
b=fir1(40,w,'dc-1'); % 用窗函数法设计多通带滤波器
freqz(b,1,512)       % 绘制幅频-相频特性图

输出的幅频-相频特性如图2所示。

在这里插入图片描述

图2. 多通带滤波器幅频-相频特性

fir2函数

MATLAB信号处理工具箱提供了fir2函数,用于基于频率采样的有限冲激响应(FIR)滤波器设计。其调用语法如下:

b = fir2(n, f, m, npt, lap, window)
  • n:滤波器的阶数。
  • f:频率向量,其取值范围在 [0, 1] 之间。
  • m:幅度响应向量,其取值范围也在 [0, 1] 之间。
  • npt:用于频率响应插值的点数,默认值为 512。
  • lap:一个参数,用于指定 fir2 在重复频率点附近插入的区域大小。
  • window:窗函数类型,其长度必须为 n + 1,默认使用 Hamming 窗。
  • b 向量表示返回的滤波器系数。

例3. 设计一个50阶低通滤波器,并且绘制理想频率响应和实际频率响应图。

f=[0 0.6 0.6 1];
m=[1 1 0 0];
b =fir2(50,f,m);
[h,w]=freqz(b,1,128);
plot(f,m,w/pi,abs(h)) % 画出幅频和相频响应图
legend('Ideal','fir2 Designed')
title('Comparison of Frequency Response Magnitudes ')
xlabel('Normalized Frequency(rad/sample)');
ylabel('magnitude')

输出的频率响应特性如图3所示:

在这里插入图片描述

图3. 频率响应特性图



END
2024年9月6日

相关文章:

【MATLAB】FIR滤波器的MATLAB实现

FIR滤波器的MATLAB实现 FIR滤波器的设计fir1函数fir2函数 与IIR滤波器相比,FIR滤波器既有其优势也有其局限性。FIR滤波器的主要优点包括: 精确的线性相位响应;永远保持稳定性;设计方法通常是线性的;在硬件实现中具有更…...

【RabbitMQ之一:windows环境下安装RabbitMQ】

目录 一、下载并安装Erlang1、下载Erlang2、安装Erlang3、配置环境变量4、验证erlang是否安装成功 二、下载并安装RabbitMQ1、下载RabbitMQ2、安装RabbitMQ3、配置环境变量4、验证RabbitMQ是否安装成功5、启动RabbitMQ服务(安装后服务默认自启动) 三、安…...

ISO26262和Aspice之间的关联

ASPICE 介绍: ASPICE(Automotive Software Process Improvement and Capability dEtermination)是汽车软件过程改进及能力评定的模型,它侧重于汽车软件的开发过程。ASPICE 定义了一系列的过程和活动,包括需求管理、软…...

对极约束及其性质 —— 公式详细推导

Title: 对极约束及其性质 —— 公式详细推导 文章目录 前言1. 对极约束 (Epipolar Constraint)2. 坐标转换 (Coordinate Transformations)3. 像素坐标 (Pixel Coordinates)4. 像素坐标转换 (Transformations of Pixel Coordinates)5. 本质矩阵 (Essential Matrix)6. 线坐标 (Co…...

【论文精读】SCINet-基于降采样和交互学习的时序卷积模型

《SCINet: Time Series Modeling and Forecasting with Sample Convolution and Interaction》的作者团队来自香港中文大学,发表在NeurIPS 2022会议上。 动机 该论文的出发点是观察到时间序列数据具有独特的属性:即使在将时间序列下采样成两个子序列后,时间关系(例如数据…...

深度学习与大模型第1课环境搭建

文章目录 深度学习与大模型第1课环境搭建1. 安装 Anaconda2. 修改环境变量2.1 修改 .condarc 文件2.2 使用 Anaconda Prompt 修改环境变量 3. 新建 .ipynb 文件 机器学习基础编程:常见问题: 深度学习与大模型第1课 环境搭建 1. 安装 Anaconda 首先&am…...

JDK新特性

LTS Record jdk16 不是方法 是一个定 # Sealed Class/Interface jdk17 限制只能由某些类继承 CompletableFuture jkd8 PatternMatching of instanceOf jdk16 switch expressions jdk14 Stream.collect() Collector Collector API Collector.groupBy Collector实战 1. …...

数据处理与数据填充在Pandas中的应用

在数据分析和机器学习项目中,数据处理是至关重要的一步。Pandas作为Python中用于数据分析和操作的一个强大库,提供了丰富的功能来处理和清洗数据。本文将深入探讨Pandas在数据处理,特别是数据填充方面的应用。 在实际的数据集中,…...

【百日算法计划】:每日一题,见证成长(010)

题目 合并两个排序的链表 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的 示例1: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 思路 引入一个带虚拟头结点和tail指针的…...

【WPF】WPF学习之【二】布局学习

WPF布局学习 常用布局Grid网格布局StackPanel 布局CanvasDockPanel布局WrapPanel布局 常用布局 1、StackPanel: 学习如何使用StackPanel进行垂直和水平布局。 2、Grid: 掌握Grid的网格布局技术。 3、Canvas: 了解Canvas的绝对定位布局。 4、DockPanel: 学习DockPanel的停靠…...

KEIL中编译51程序 算法计算异常的疑问

KEIL开发 51 单片机程序 算法处理过程中遇到的问题 ...... by 矜辰所致前言 因为产品的更新换代, 把所有温湿度传感器都换成 SHT40 ,替换以前的 SHT21。在 STM32 系列产品上的替换都正常,但是在一块 51 内核的无线产品上面,数据…...

pikachu文件包含漏洞靶场

本地文件包含 1、先随意进行提交 可以得出是GET传参 可以在filename参数进行文件包含 2、准备一个2.jpg文件 内容为<?php phpinfo();?> 3、上传2.jpg文件 4、访问文件保存的路径uploads/2.jpg 5、将我们上传的文件包含进来 使用../返回上级目录 来进行包含木马文件 …...

基于DPU与SmartNIC的K8s Service解决方案

1. 方案背景 1.1. Kubernetes Service介绍 Kubernetes Service是Kubernetes中的一个核心概念&#xff0c;它定义了一种抽象&#xff0c;用于表示一组提供相同功能的Pods&#xff08;容器组&#xff09;的逻辑集合&#xff0c;并提供了一种方式让这些Pods能够被系统内的其他组…...

SLM561A​​系列 60V 10mA到50mA线性恒流LED驱动芯片 为智能家居照明注入新活力

SLM561A系列选型参考&#xff1a; SLM561A10ae-7G SOD123 SLM561A15ae-7G SOD123 SLM561A20ae-7G SOD123 SLM561A25ae-7G SOD123 SLM561A30ae-7G SOD123 SLM561A35ae-7G SOD123 SLM561A40ae-7G SOD123 SLM561A45ae-7G SOD123 SLM561A50ae-7G SOD123 …...

Requests库对session的支持

场景&#xff1a;如何获取登录时响应消息中的sessionid&#xff0c;以及如何在后续请求中把sessionid添到cookie中 Requests库提供了一个Session类&#xff0c;通过requests库中的session对象&#xff0c;requests库会自动帮我们保存服务端返回的cookie数据(set-cookie里的内容…...

利用深度学习实现验证码识别-2-使用Python导出ONNX模型并在Java中调用实现验证码识别

1. Python部分&#xff1a;导出ONNX模型 首先&#xff0c;我们需要在Python中定义并导出一个已经训练好的验证码识别模型。以下是完整的Python代码&#xff1a; import string import torch import torch.nn as nn import torch.nn.functional as FCHAR_SET string.digits# …...

如何通过Spring Cloud Consul增强微服务安全性和可靠性

为了增强微服务的安全性和可靠性&#xff0c;Spring Cloud Consul 是一个非常强大的工具。它不仅提供了服务发现和配置管理功能&#xff0c;还能够有效地管理微服务的安全和健康状态。本文将深入探讨如何通过 Spring Cloud Consul 来增强微服务的安全性和可靠性&#xff0c;主要…...

无代码搭建小程序zion

无代码搭建小程序zion 一、无代码搭建小程序zion的降低技术门槛&#xff0c;提升开发效率 1. 无需编程经验&#xff1a;Zion无代码平台通过提供直观的可视化界面和拖拽式操作&#xff0c;让开发者无需具备复杂的编程技能也能进行小程序的开发。这种方式大大降低了技术门槛&a…...

【南方科技大学】CS315 Computer Security 【Lab1 Packet Sniffing and Wireshark】

目录 IntroductionBackgroundTCP/IP Network StackApplication LayerTransport LayerInternet LayerLink LayerPacket Sniffer Getting WiresharkStarting WiresharkCapturing PacketsTest Run Questions for the Lab Introduction 实验的第一部分介绍数据包嗅探器 Wireshark。…...

【人工智能/机器学习/机器人】数学基础-学习笔记

函数 奇偶性&#xff1a; 偶函数&#xff1a; f ( − x ) f ( x ) f(-x)f(x) f(−x)f(x)   y轴对称 f ( x ) x 2 f(x)x^2 f(x)x2     f ( − x ) ( − x ) 2 x 2 f ( x ) f(-x)(-x)^2x^2f(x) f(−x)(−x)2x2f(x) 奇函数&#xff1a; f ( − x ) − f ( x ) f(-…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...