当前位置: 首页 > 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(-…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

【Java多线程从青铜到王者】单例设计模式(八)

wait和sleep的区别 我们的wait也是提供了一个还有超时时间的版本&#xff0c;sleep也是可以指定时间的&#xff0c;也就是说时间一到就会解除阻塞&#xff0c;继续执行 wait和sleep都能被提前唤醒(虽然时间还没有到也可以提前唤醒)&#xff0c;wait能被notify提前唤醒&#xf…...

Qt的学习(二)

1. 创建Hello Word 两种方式&#xff0c;实现helloworld&#xff1a; 1.通过图形化的方式&#xff0c;在界面上创建出一个控件&#xff0c;显示helloworld 2.通过纯代码的方式&#xff0c;通过编写代码&#xff0c;在界面上创建控件&#xff0c; 显示hello world&#xff1b; …...

【动态规划】B4336 [中山市赛 2023] 永别|普及+

B4336 [中山市赛 2023] 永别 题目描述 你做了一个梦&#xff0c;梦里有一个字符串&#xff0c;这个字符串无论正着读还是倒着读都是一样的&#xff0c;例如&#xff1a; a b c b a \tt abcba abcba 就符合这个条件。 但是你醒来时不记得梦中的字符串是什么&#xff0c;只记得…...

Redis——Cluster配置

目录 分片 一、分片的本质与核心价值 二、分片实现方案对比 三、分片算法详解 1. ‌范围分片&#xff08;顺序分片&#xff09;‌ 2. ‌哈希分片‌ 3. ‌虚拟槽分片&#xff08;Redis Cluster 方案&#xff09;‌ 四、Redis Cluster 分片实践要点 五、经典问题解析 C…...

STM32CubeMX-H7-19-ESP8266通信(中)--单片机控制ESP8266实现TCP地址通信

前言 上篇文章我们已经能够使用串口助手实现esp8266的几种通信&#xff0c;接下来我们使用单片机控制实现。这篇文章会附带教程&#xff0c;增加.c和,.h&#xff0c;把串口和定时器放到对应的编号&#xff0c;然后调用初始化就可以使用了。 先讲解&#xff0c;然后末尾再放源码…...

DROPP算法详解:专为时间序列和空间数据优化的PCA降维方案

DROPP (Dimensionality Reduction for Ordered Points via PCA) 是一种专门针对有序数据的降维方法。本文将详细介绍该算法的理论基础、实现步骤以及在降维任务中的具体应用。 在现代数据分析中&#xff0c;高维数据集普遍存在特征数量庞大的问题。这种高维特性不仅增加了计算…...

Kotlin REPL初探

文章目录 1. Kotlin REPL 简介2. 在命令行中玩Kotlin REPL2.1 下载Kotlin编译器压缩包2.2 安装配置Kotlin编译器2.3 启动Kotlin交互式环境2.4 在命令行玩Kotlin REPL 3. 在IDEA里玩Kotlin REPL3.1 打开Kotlin REPL窗口3.2 在Kotlin REPL窗口玩代码 4. Kotlin REPL 的优势 1. Ko…...