fir滤波器matlab实现_关于FIRamp;IIR系统的算法说明以及结果验证(1)

首先,做一个简短的开场白。

本贴主要是一个关于信号处理方面的学习笔记。主要目的有三,

  1. 作为研究笔记留存
  2. 分享我个人的理解
  3. 与专业人士进行意见交换

另外由于楼主不是教课员,因此无法保证算法分析以及个人理解的完全正确性,若本人对知识点的理解有不到位的地方望予以指正。

下面进入正题。

【概要】

数字滤波器主要分为【有限冲激响应系统】(FIR系统)以及【无限冲击响应系统】(IIR系统)。他们的优缺点如下表所示,根据数据精度需求的不同,应选用相匹配的系统进行滤波

bc94d205e68ae1a878d5292dbc3de3b5.png

下面通过具体的特性公式来理解。

【FIR系统】

一. 基础结构与特性方程:

FIR系统是有限冲激响应系统,与移动平均方法类似,

假设我们有一个有限冲激响应h[n],

h[n], n=0,1,...,M (h[n]=0, n<0, n>M)

为了进行滤波,对其进行卷积和运算,可得到以下输入与输出函数关系,

b70fa44bcb8668b445a310ae82a7bafb.png

其结构图可以总结为下图,

99aaaea04a542ce4e280bed153aec533.png

具备这种结构的数字系统我们就称其为FIR系统(FIR滤波器)。当然FIR滤波器的结构不止一种,以上这种结构叫做直接型FIR系统,其他的还有转置型FIR系统,以及转置型线性相位FIR系统。

通过差分方程与z变换公式(代换z=e^jΩ),我们可得到FIR滤波器的特性公式(推导过程在此省略,我们直接研究结果):

频率特性:

8cc247dcb86c7808aaeb0e7d6ebccc96.png

幅频特征:

5e0f878d7e494c523a19f80f3f7b9ea0.png

相频特征:

cce0ec6d7cb822d27bbcca172274fcfa.png

这之中,h[n]为冲击响应,考虑到冲激响应长度(M+1)的奇偶性,可划分分为以下4种类型。

(a)偶对称,冲激响应长度为奇数

(b)偶对称,冲激响应长度为偶数

(b)奇对称,冲激响应长度为奇数

(b)奇对称,冲激响应长度为偶数

2f115877d33e077ad966d6addd57ed15.png

我们把冲激响应(a)带入上述特性公式中,

频率特性:

3cb2aa8181085a56469f7124480f085d.png

幅频特性:

3748f43d89d404ff3b9fc6902d321d07.png

相频特性:

c6ac6ba50eb63b7001e50b1125f53f6a.png

二. 理解分析:

**频率特性**

FIR系统的频率特性其实是由FIR系统的传递函数,通过带入z=e^jΩ所得。

1fec6e8b680b10afa04d318f5c8881dd.png

观察这个公式我们可以知道,FIR系统的频率特性,其实就是冲激响应h(n)的频率普,即DTFT(h(n))。

同时在FIR系统中,h(n)指的是系统函数(数字系统传递函数)的分子系数。使用Matlab设计FIR滤波器时,Matlab会根据我们设定的参数自动计算并返回这个值。

**幅频特性**

幅频特性指的是滤波器的衰减率。横坐标为频率,纵坐标为衰减率。

简单来说幅频特性反应的物理意义,就是一个原始波x(n)中所包含的各个频率成分,在滤波后还剩下的比例。

观察实际的幅频特性公式,我们发现衰减率的大小与频率的三角函数值相关。因此我们可以理解FIR系统的衰减率是其实是通过三角函数来近似实现的。当冲击响应h[n]的阶数M较低时,通过三角函数就很难再现出一条直线,特性曲线如图所示:

3714aeb1c00fac12925ac87c8ebc219e.png

我们可以看到,通带衰减率为一个在1附近振荡的三角函数曲线,因此滤波后数据会产生失真。但是当h[n]的阶数足够大时,幅频特性会无限接近于1,从而近似的实现全域通过特性。但是由于FIR系统为有限长冲激响应,因此阻带无法接近于0,呈现如下图所示波纹。

bf3eff584dfea1e70db9353d65416664.png

这里还有一个容许误差的概念,由于FIR系统只是通过三角函数近似的再现全域通过特性,因此通过控制阶数M使三角函数的振幅限制在一定范围之内,这个范围被称为容许误差,通过这种方法可以适当的减少滤波器阶数M,减少信号延迟。

**相频特性**

下面我们来聊聊相频特性。

首先什么是相频特性。简单来说就是指原始信号x(n)中所包含的各个频率成分,在滤波后所产生的延迟量。

当冲激响应h(n)为(a)时,我们可以得到相频特性方程为:

c6ac6ba50eb63b7001e50b1125f53f6a.png

也就是说,FIR系统的相频特性曲线为一条与角频率相关的直线,我们称这种相频特性为线性相频特性或直线相频特性。

物理意义方面解释的话,就是说滤波后的各个不同频率成分产生时相互之间的延迟时间是呈线性分布的。

9abfea5d06f18e79d984c59859d79db5.png

这种线性相位特性有什么好处呢?为什么是FIR系统的优点?

网上有一个简单易懂的例子,以音乐会为例子,有兴趣的可以参考看看。

出自:https://blog.csdn.net/deepdsp/article/details/6804888

**延迟**

最后我们聊聊延迟,在滤波系统中,有两个延迟的存在。

  1. 相位延迟
  2. 群延迟

相位延迟

首先相位延迟,指的就是上文所述的相频特性所产生的各个不同频率成分之间的延迟量。这个延迟若不是线性的,则会产生信号失真,对滤波结果的精度影响较大。

群延迟(group delay)

定义为入力波形与出力波形的相位差与角频率的微分。

89d70dbdf1169dadef357bbac52d8b2c.png

带入相频特性方程中,

029f36cfd5249f81550e4e79c9d24981.png

可以看出,当相频特性为线性时,群延迟为常数,滤波器阶数的一半。

那所以呢?会有什么影响?

其实很简单,从物理学角度来讲,群延迟其实就是波形整体向右平移了M/2 Point的距离。根据采样频率的不同,这M/2 Point可以是1s的数据量(采样频率100Hz),也有可能是0.1s的数据量(采样频率1000Hz)。

在offline分析中,这个延迟是可以通过去除对应数据量进行补偿的。但是另一方面,在online分析中,这个延迟往往会产生很大影响。如何去除这个相位延迟,工程上有很多补偿的方法(等我研究好了再分享),但是就FIR系统本身来说,这里就涉及到零相位的课题了。

返回FIR系统的算法结构图,我们可以看到通过延迟器后的数据都是x[n-1],也就是说现在时间点的数据,其实是过去M个时间点数据和对应冲激响应的卷积和。这个特性,被称为滤波器的因果特性。只有具备这种特性的滤波器,才可在online系统中使用。

举个栗子,当我们处于信号输出的开始点的时候,也即是说我们没有过去数据,这种时候我们是没有办法进行滤波的。这个就是群延迟以及相位延迟产生的原因。滤波器必须等到具备足够的数据之后,才可以开始工作。

套用一句经典的话,想要做到实时的零相位延迟,需要两个步骤:

1)move to another universe;

2)enjoy!!

出自:https://blog.csdn.net/csdn_kike/article/details/69061673

三. 验证

首先做一个验证用的原始曲线:

  1. 采样频率1000Hz10Hz,20
  2. 1-1500 point: 10Hz, 20Hz, 30Hz的混合波(30Hz为噪音)
  3. 1501-2500 point: 10Hz, 20Hz混合波(无噪音)

2c042bdb8ee05705ead0c28d134ecaba.png

频谱图:

86f8f33bdb595b25c6699f41255c7e67.png

设计两个低通滤波器

  1. 20阶,25Hz低通滤波器
  2. 200阶,25Hz低通滤波器

幅频与相频特性:

FIR滤波器1:

2113e8329720a7752e672134f5e09a35.png

FIR滤波器2:

7bf77c5346783a64b7c5303e8d605620.png

结果:

FIR滤波器1:

1. 群延迟为M/2=10 point,由于采样频率为1000Hz,延迟量为0.01s。

2. 由于阶数较低,迁移带较宽,所以30Hz的噪音依然存在。

3. 由于相位延迟为线性,所以未产生失真。

0bdcb5a0b666a7c01d02fe2892c5299b.png

e518ec61ac0fe0aa69cb332ac4f4ec70.png

FIR滤波器2:

  1. 随着阶数的增加,延迟变大,M/2为100point,在采样频率为1000Hz时,正好是0.1s,为10Hz正弦波的一个周期。
  2. 随着阶数增加,迁移带变窄,所以30Hz噪音的滤波效果较好。
    * 30Hz成分还有所残留是因为阶数还不够大,继续再增加阶数的话,噪音成分会完全消失。
  3. 由于相位延迟为线性,所以未产生失真。

8852824c7e4f81beff6248284ff0aa1f.png

7a4f223112d13ea485a7b72212662393.png

由于高阶FIR滤波器可以有效的近似到全域通过特性,并且完美的实现线性相位特性,因此在信号处理的预处理领域被广泛应用。

下一章讨论IIR滤波器,以及Zero phase IIR 滤波器的理论及验证。

我会把文章第一时间发在个人公众号里

有兴趣的朋友可以关注我大家一起学习讨论

aec771b40abadac41c1a57d19be4fffa.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505420.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

操作系统中的全局页面置换算法

1 全局页面置换算法 以上页面置换算法都是针对单一的应用程序的页面置换算法, 且有一个前提, 就是给单一应用程序分配的物理页帧数量是一定的. 现实中, 给一个应用程序分配的物理页帧数, 该程序产生的缺页中断也就越少, 而且程序运行过程中, 可能某些阶段对于内存的读写操作很…

怎么更新opengl.dll文件_安装累积更新丢文件似乎已成为惯例 KB4556799同样出现文件丢失问题...

从 Windows 10 Version 1903 版发布开始就经常出现用户升级版本或者安装累积更新导致个人文件丢失的问题。但是以前这种问题似乎并不算频繁&#xff0c;然而从今年开始微软发布的累积更新几乎都存在这样的问题让很多用户苦恼。而微软至今从未承认过安装累积更新会丢失用户的个人…

非全局页面置换算法

1 先进先出算法(FIFO) 1.1 基本思路: 选择在内存中驻留时间最长的页面并淘汰之. 具体来说, 系统维护着一个链表, 记录了所有位于内存当中的逻辑页面. 从链表的排列顺序来看, 链首页面的驻留时间最长, 链尾页面的驻留时间最短. 当发生一个缺页中断时, 把链首页面的淘汰出局, 并…

github打开前端样式丢失_工具资源系列之 github 上各式各样的小徽章从何而来?...

前言平时大家在在逛 github 时或多或少都看到过项目首页各式各样的小徽章,不知道你是否和我一样好奇这些小徽章都是哪来的呢?首先我们先来一睹为快目前前端开发的三大主流框架: var ,看一看他们的 github 项目首页有哪些小徽章吧!小结:前端三大框架的徽章均不相同,由此可见,这…

vs code ipynb文件_UE4引擎 源码的获取、安装,以及VS配置

1.首先我们需要注册一个Epic账户&#xff0c;网址如下http://api.unrealengine.com/CHN/GettingStarted/Installation/index.html#bookmark12.创建GitHub账户https://github.com/3.登录UE4社区点击个人进入到个人之后点击连接的账户&#xff0c;之后在下面填写我们GITHUB的昵称…

js bind 传参、_js中的面向对象(一)

面向对象要解决的问题提到面向对象&#xff0c;大家的第一反应就是封装、继承和多态。对其做如下解释&#xff1a;封装&#xff1a;影藏细节&#xff08;A对A——将多行代码取个名字或A对B——API调用合作&#xff09;继承&#xff1a;继承的意思就是同上跟上述一样&#xff0c…

计算机网络中的物理层

1 基础概念 物理层解决如何在链接各种计算机的传输媒体上传输数据比特流, 而不是指具体的传输媒体. 物理层的主要任务, 确定与传输媒体接口有关的一些特性. -> 定义标准 1.1 物理层规定的特性: 机械特性: 定义物理连接的特性, 规定物理连接时所采用的规格, 接口形状, 引…

二元置信椭圆r语言_医学统计与R语言:多分类logistic回归HosmerLemeshow拟合优度检验...

微信公众号&#xff1a;医学统计与R语言如果你觉得对你有帮助&#xff0c;欢迎转发输入1&#xff1a;multinominal logistic regression "nnet")结果1&#xff1a; test (multinomial model)输入2&#xff1a;ordinal logistic regression "MASS")结果2&am…

python3.7.2安装与配置_python3.7.0 安装与配置

python 3.7.0 X64下载地址&#xff1a; https://www.python.org/ftp/python/3.7.0/python-3.7.0-amd64.exe 更多版本下载请移步到&#xff1a;https://www.python.org/downloads/release/python-370/ python可以在同一台机器上进行多版本的安装使用。 安装好python3.7.0后确认系…

操作系统处理器调度

1 背景 1.1 上下文切换: 切换CPU的当前任务, 从一个进程/线程到另一个保存当前进程/线程在PCB/TCB中的执行上下文(CPU状态)读取下一个进程/线程的上下文 1.2 CPU调度: 从就绪队列中挑选一个进程/线程作为CPU将要运行的下一个进程/线程调度程序: 挑选进程/线程的内核函数(通过…

c# 操作redisclient 设置过期时间_C# Redis分布式锁单节点

(给DotNet加星标&#xff0c;提升.Net技能)转自&#xff1a;热敷哥cnblogs.com/refuge/p/13774008.html为什么要用分布式锁?先上一张截图,这是在浏览别人的博客时看到的.在了解为什么要用分布式锁之前,我们应该知道到底什么是分布式锁.锁按照不同的维度,有多种分类.比如1、悲观…

计算机网络数据链路层检错编码 --- 循环冗余码CRC

实例说明 假如要发送的数据是1101 0110 11, 采用CRC校验, 生成多项式是10011, 那么最终发送的数据应该是? 发送端发送过程: 1. 最终发送的数据 要发送的数据 帧检验序列FCS(冗余码) 2. 利用生成多项式计算冗余码 计算冗余码的方法: 1. 加0, 要根据生成多项式中的阶为, 则…

计算机网络中数据链路层编码纠错编码 --- 海明码

1 概述 首先, 海明码是计算机网络中数据链路层的针对帧的位错提出的一种纠错编码方式. 海明码可以发现双比特错, 但纠正单比特错. 工作原理(简单解释): 牵一发动全身 2 工作流程 2.1 确定校验码位数r 海明不等式: 其中为冗余信息位数, 为信息位数 如果给定要发送的数据, …

计算机操作系统同步互斥

1 背景 在计算机系统里面, 多道程序设计是现代操作系统的重要特征, 且并行起到了很大的作用, 所以操作系统抽象出来了线程/进程的概念用来支持多道程序设计, 同时, 各个进程之间需要进行交互, CPU也需要进行调度来支持多进程. 多进程会涉及到共享资源访问的问题, 如果操作系统…

conda安装tensorflow-gpu简洁版_win10 tensorflow2.2 安装注意事项

学习新技术有两座大山&#xff0c;一座是安装配置环境&#xff0c;另一座是调试bug。对于想学习人工智能开发的人来说&#xff0c;安装配置tensorflow是必不可少的一步&#xff0c;这个过程对于初次接触的人来说&#xff0c;到处都是火坑。下面大家跟我一起&#xff0c;看看都会…

操作系统中死锁避免算法 --- 银行家算法

1. 背景 在银行系统中, 客户完成项目需要申请贷款的数量是有限的, 每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量, 在满足所有贷款要求并完成项目时, 客户应及时归还. 银行家在客户申请的贷款数量不超过自己拥有的最大值时, 都应尽量满足客户的需要. 在这样的描…

python字符串对齐_Python - 字符串对齐

字符串对齐 本文地址: http://blog.csdn.net/caroline_wendy/article/details/20463231 Python中, 字符串对齐, 使用ljust(), 左对齐;rjust(), 右对齐; center(), 中间对齐; 也可以修改第三个参数, 修改填充数据, 默认使用空格; 代码如下: # -*- coding: utf-8 -*- # #File: Te…

操作系统中的死锁问题

1 死锁问题概述 一组阻塞的进程持有一种资源等待获取另一个进程所占有的一个资源.例子: 系统有两个磁带驱动器, P1和P2各有一个, 都需要另外一个. 2 系统模型 资源类型: , , ..., 包括CPU cycles, memory space, I/O devices 每个资源类型有实例. 每个进程使用资源过程如下…

chrome控制台如何把vw显示成px_你可能不知道的chrome调试技巧

本文是对常用的chrome调试技巧进行总结整理&#xff0c;如果你没有深入了解过chrome调试工具&#xff0c;此处总有你不知道的惊喜&#xff01;从 Chrome 说起对于大部分人来说&#xff0c;Chrome 可能只是个浏览器&#xff0c;但是对于开发人员来说&#xff0c;它更是一个强大无…

gns3中两个路由器分别连接主机然后分析ip数据转发报文arp协议_ARP协议在同网段及跨网段下的工作原理...

前言&#xff1a;ARP协议是在链路层通讯中&#xff0c;已知目标IP地址,但是&#xff0c;仅有IP 地址是不够的&#xff0c;因为IP数据报必须封装成帧才能通过数据链路进行发送&#xff0c;而数据帧必须要有目的MAC地址&#xff0c;每一个网络设备在数据封装前都需要获取下一跳的…