滤波器

1、FIR

数学模型、物理实现

定义

FIR(Finite Impulse Response)滤波器:有限长单位冲激响应滤波器,又称为非递归型滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。因此,FIR滤波器在通信、图像处理、模式识别等领域都有着广泛的应用。

物理实现方法——集成电路

一种是使用单片通用数字滤波器集成电路,这种电路使用简单,但是由于字长和阶数的规格较少,不易完全满足实际需要。虽然可采用多片扩展来满足要求,但会增加体积和功耗,因而在实际应用中受到限制。

物理实现方法——DSP芯片

另一种是使用DSP芯片。DSP芯片有专用的数字信号处理函数可调用,或者根据芯片指令集的结构自行设计代码实现FIR的功能;由于FIR设计时其系数计算及其量化比较复杂,因此一般都采用MATLAB软件作为辅助设计,计算出FIR的系数;然后进行代码设计实现。实现FIR滤波器相对简单,但是由于程序顺序执行,速度受到限制。而且,就是同一公司的不同系统的DSP芯片,其编程指令也会有所不同,开发周期较长。FIR滤波器越长(有大量的抽头),滤波器的响应越好。然而这里有折衷的情况,由于大量的抽头增加了对逻辑的需求、增加了计算的复杂性,增加了功耗,以及可能引起饱和/溢出。

物理实现方法——可编程器件FPGA等

还有一种是使用可编程逻辑器件,FPGA/CPLD。FPGA有着规则的内部逻辑块阵列和丰富的连线资源,特别适合用于细粒度和高并行度结构的FIR滤波器的实现,相对于串行运算主导的通用DSP芯片来说,并行性和可扩展性都更好。

多相技术可以用于实现滤波器,拥有与传统FIR滤波器可比的结果,而且使用了较少的逻辑、需要较少的计算资源、更低的功耗,并减少了可能的饱和/溢出。可用如今新型的小规模、中档的FPGA,如LATTICEECP3 来实现这些滤波器。

数学模型

通用FIR滤波器的图形表示如图10所示。在这种情况下,输入样本xn通过一系列的缓冲寄存器(这些都标记为z-1,对应延时单元的Z变换)。

图10 经典FIR滤波器的通用表示

滤波器的工作原理是用一系列的常数(称为抽头系数)乘以一系列最新的n个数据采样,并对所得到的数组的单元进行求和。通过改变系数和滤波器抽头数目的加权(值),FIR滤波器实际上可实现几乎任何所需的频率响应特性。

问题是FIR滤波器可能需要大量的抽头(有时数百个),以实现其预定的目标。每一个抽头需要消耗逻辑资源的乘法器累加器( Mac )单元。另外在每个时钟,每个抽头执行消耗功率2的乘法和加操作。

 

 

 

 

 

 

2、卡尔曼滤波

卡尔曼滤波是一个如此强大的工具,能够在不确定性中融合信息,与此同时,它提取精确信息的能力看起来不可思议。

什么是卡尔曼滤波?

你可以在任何含有不确定信息的动态系统中使用卡尔曼滤波,对系统下一步的走向做出有根据的预测,即使伴随着各种干扰,卡尔曼滤波总是能指出真实发生的情况。

连续变化的系统中使用卡尔曼滤波是非常理想的,它具有占用内存小的优点(除了前一个状态量外,不需要保留其它历史数据),并且速度很快,很适合应用于实时问题和嵌入式系统。

在Google上找到的大多数关于实现卡尔曼滤波的数学公式看起来有点晦涩难懂,这个状况有点糟糕。实际上,如果以正确的方式看待它,卡尔曼滤波是非常简单和容易理解的,下面我将用漂亮的图片和色彩清晰的阐述它,你只需要懂一些基本的概率和矩阵的知识就可以了。

我们能用卡尔曼滤波做什么?

用玩具举例:你开发了一个可以在树林里到处跑的小机器人,这个机器人需要知道它所在的确切位置才能导航。

我们可以说机器人有一个状态,表示位置和速度:

注意这个状态只是关于这个系统基本属性的一堆数字,它可以是任何其它的东西。在这个例子中是位置和速度,它也可以是一个容器中液体的总量,汽车发动机的温度,用户手指在触摸板上的位置坐标,或者任何你需要跟踪的信号。

这个机器人带有GPS,精度大约为10米,还算不错,但是,它需要将自己的位置精确到10米以内。树林里有很多沟壑和悬崖,如果机器人走错了一步,就有可能掉下悬崖,所以只有GPS是不够的。

或许我们知道一些机器人如何运动的信息:例如,机器人知道发送给电机的指令,知道自己是否在朝一个方向移动并且没有人干预,在下一个状态,机器人很可能朝着相同的方向移动。当然,机器人对自己的运动是一无所知的:它可能受到风吹的影响,轮子方向偏了一点,或者遇到不平的地面而翻倒。所以,轮子转过的长度并不能精确表示机器人实际行走的距离,预测也不是很完美。

GPS 传感器告诉了我们一些状态信息,我们的预测告诉了我们机器人会怎样运动,但都只是间接的,并且伴随着一些不确定和不准确性。但是,如果使用所有对我们可用的信息,我们能得到一个比任何依据自身估计更好的结果吗?回答当然是YES,这就是卡尔曼滤波的用处。

卡尔曼滤波是如何看到你的问题的

下面我们继续以只有位置和速度这两个状态的简单例子做解释。

我们并不知道实际的位置和速度,它们之间有很多种可能正确的组合,但其中一些的可能性要大于其它部分:

卡尔曼滤波假设两个变量(位置和速度,在这个例子中)都是随机的,并且服从高斯分布。每个变量都有一个均值 μ,表示随机分布的中心(最可能的状态),以及方差,表示不确定性。

 

在上图中,位置和速度是不相关的,这意味着由其中一个变量的状态无法推测出另一个变量可能的值。下面的例子更有趣:位置和速度是相关的,观测特定位置的可能性取决于当前的速度:

这种情况是有可能发生的,例如,我们基于旧的位置来估计新位置。如果速度过高,我们可能已经移动很远了。如果缓慢移动,则距离不会很远。跟踪这种关系是非常重要的,因为它带给我们更多的信息:其中一个测量值告诉了我们其它变量可能的值,这就是卡尔曼滤波的目的,尽可能地在包含不确定性的测量数据中提取更多信息!

这种相关性用协方差矩阵来表示,简而言之,矩阵中的每个元素表示第 i 个和第 j 个状态变量之间的相关度。(你可能已经猜到协方差矩阵是一个对称矩阵,这意味着可以任意交换 i 和 j)。协方差矩阵通常用“”来表示,其中的元素则表示为“”。

使用矩阵来描述问题

我们基于高斯分布来建立状态变量,所以在时刻 k 需要两个信息:最佳估计(即均值,其它地方常用 μ 表示),以及协方差矩阵

(1)

(当然,在这里我们只用到了位置和速度,实际上这个状态可以包含多个变量,代表任何你想表示的信息)。接下来,我们需要根据当前状态(k-1 时刻)来预测下一状态(k 时刻)。记住,我们并不知道对下一状态的所有预测中哪个是“真实”的,但我们的预测函数并不在乎。它对所有的可能性进行预测,并给出新的高斯分布。

我们可以用矩阵来表示这个预测过程:

它将我们原始估计中的每个点都移动到了一个新的预测位置,如果原始估计是正确的话,这个新的预测位置就是系统下一步会移动到的位置。那我们又如何用矩阵来预测下一个时刻的位置和速度呢?下面用一个基本的运动学公式来表示:

现在,我们有了一个预测矩阵来表示下一时刻的状态,但是,我们仍然不知道怎么更新协方差矩阵。此时,我们需要引入另一个公式,如果我们将分布中的每个点都乘以矩阵 A,那么它的协方差矩阵会怎样变化呢?很简单,下面给出公式:

结合方程(4)和(3)得到:

外部控制量

我们并没有捕捉到一切信息,可能存在外部因素会对系统进行控制,带来一些与系统自身状态没有相关性的改变。

以火车的运动状态模型为例,火车司机可能会操纵油门,让火车加速。相同地,在我们机器人这个例子中,导航软件可能会发出一个指令让轮子转向或者停止。如果知道这些额外的信息,我们可以用一个向量来表示,将它加到我们的预测方程中做修正。

假设由于油门的设置或控制命令,我们知道了期望的加速度,根据基本的运动学方程可以得到:

以矩阵的形式表示就是:

称为控制矩阵,称为控制向量(对于没有外部控制的简单系统来说,这部分可以忽略)。让我们再思考一下,如果我们的预测并不是100%准确的,该怎么办呢?

外部干扰

如果这些状态量是基于系统自身的属性或者已知的外部控制作用来变化的,则不会出现什么问题。

但是,如果存在未知的干扰呢?例如,假设我们跟踪一个四旋翼飞行器,它可能会受到风的干扰,如果我们跟踪一个轮式机器人,轮子可能会打滑,或者路面上的小坡会让它减速。这样的话我们就不能继续对这些状态进行跟踪,如果没有把这些外部干扰考虑在内,我们的预测就会出现偏差。

在每次预测之后,我们可以添加一些新的不确定性来建立这种与“外界”(即我们没有跟踪的干扰)之间的不确定性模型:

原始估计中的每个状态变量更新到新的状态后,仍然服从高斯分布。我们可以说的每个状态变量移动到了一个新的服从高斯分布的区域,协方差为。换句话说就是,我们将这些没有被跟踪的干扰当作协方差为的噪声来处理。

这产生了具有不同协方差(但是具有相同的均值)的新的高斯分布。

我们通过简单地添加得到扩展的协方差,下面给出预测步骤的完整表达式:

由上式可知,新的最优估计是根据上一最优估计预测得到的,并加上已知外部控制量的修正。

新的不确定性上一不确定性预测得到,并加上外部环境的干扰。

好了,我们对系统可能的动向有了一个模糊的估计,用来表示。如果再结合传感器的数据会怎样呢?

用测量值来修正估计值

我们可能会有多个传感器来测量系统当前的状态,哪个传感器具体测量的是哪个状态变量并不重要,也许一个是测量位置,一个是测量速度,每个传感器间接地告诉了我们一些状态信息。

注意,传感器读取的数据的单位和尺度有可能与我们要跟踪的状态的单位和尺度不一样,我们用矩阵来表示传感器的数据。

我们可以计算出传感器读数的分布,用之前的表示方法如下式所示:

卡尔曼滤波的一大优点就是能处理传感器噪声,换句话说,我们的传感器或多或少都有点不可靠,并且原始估计中的每个状态可以和一定范围内的传感器读数对应起来。

从测量到的传感器数据中,我们大致能猜到系统当前处于什么状态。但是由于存在不确定性,某些状态可能比我们得到的读数更接近真实状态。

我们将这种不确定性(例如:传感器噪声)用协方差表示,该分布的均值就是我们读取到的传感器数据,称之为

现在我们有了两个高斯分布,一个是在预测值附近,一个是在传感器读数附近。

我们必须在预测值(粉红色)和传感器测量值(绿色)之间找到最优解。

那么,我们最有可能的状态是什么呢?对于任何可能的读数,有两种情况:(1)传感器的测量值;(2)由前一状态得到的预测值。如果我们想知道这两种情况都可能发生的概率,将这两个高斯分布相乘就可以了。

剩下的就是重叠部分了,这个重叠部分的均值就是两个估计最可能的值,也就是给定的所有信息中的最优估计。

瞧!这个重叠的区域看起来像另一个高斯分布。

如你所见,把两个具有不同均值和方差的高斯分布相乘,你会得到一个新的具有独立均值和方差的高斯分布!下面用公式讲解。

融合高斯分布

先以一维高斯分布来分析比较简单点,具有方差和 μ 的高斯曲线可以用下式表示:

如果把两个服从高斯分布的函数相乘会得到什么呢?

将式(9)代入到式(10)中(注意重新归一化,使总概率为1)可以得到:

将式(11)中的两个式子相同的部分用 k 表示:

下面进一步将式(12)和(13)写成矩阵的形式,如果 Σ 表示高斯分布的协方差,表示每个维度的均值,则:

矩阵称为卡尔曼增益,下面将会用到。放松!我们快要完成了!

将所有公式整合起来

我们有两个高斯分布,预测部分,和测量部分,将它们放到式(15)中算出它们之间的重叠部分:

由式(14)可得卡尔曼增益为:

将式(16)和式(17)的两边同时左乘矩阵的逆(注意里面包含了)将其约掉,再将式(16)的第二个等式两边同时右乘矩阵的逆得到以下等式:

上式给出了完整的更新步骤方程。就是新的最优估计,我们可以将它和放到下一个预测和更新方程中不断迭代。

总结

以上所有公式中,你只需要用到式(7)、(18)、(19)。(如果忘了的话,你可以根据式(4)和(15)重新推导一下)

我们可以用这些公式对任何线性系统建立精确的模型,对于非线性系统来说,我们使用扩展卡尔曼滤波,区别在于EKF多了一个把预测和测量部分进行线性化的过程。

 

 

 

 

 

 

 

 

 

 

参考文献:

1、FIR滤波器工作原理及实现过程介绍 - http://www.elecfans.com/tongxin/rf/20171212600987.html

2、卡尔曼滤波,如此强大的工具,你值得弄懂! https://mp.weixin.qq.com/s/EojWy3IYngRJwzUVej1snQ

3、

 

 

第l章 数字信号处理引言 1.1 引言 1.2 数字信号处理起源 1.3 信号域 1.4 信号分类 1.5 DSP:一个学科 第2章 采样原理 2.1 引言 2.2 香农采样原理 2.3 信号重构 2.4 香农插值 2.5 采样方法 2.6 多通道采样 2.7 MATLAB音频选项 第3章 混叠 3.1 引言 3.2 混叠 3.3 圆判据 3.4 IF采样 第4章 数据转换和量化 4.1 域的转换 4.2 ADC分类 4.3 ADC增强技术 4.4 DSP数据表示方法 4.5 量化误差 4.6 MAC单元 4.7 MATLAB支持工具 第5章 z变换 5.1 引言 5.2 z变换 5.3 原始信号 5.4 线性系统的z变换 5.5 z变换特性 5.6 MATLAB z变换设计工具 5.7 系统稳定性 5.8 逆z变换 5.9 赫维赛德展开法 5.10 逆z变换MATLAB设计工具 第6章 有限冲激响应滤波器 6.1 引言 6.2 FIR滤波器 6.3 理想低通FIR滤波器 6.4 FIR滤波器设计 6.5 稳定性 6.6 线性相位 6.7 群延迟 6.8 FIR滤波器零点位置 6.9 零相位FIR滤波器 6.10 最小相位滤波器 第7章 窗函数设计法 7.1 有限冲激响应综述 7.2 基于窗函数的FIR滤波器设计 7.3 确定性设计 7.4 数据窗 7.5 基于MATLAB窗函数的FIR滤波器设计 7.6 Kaiser窗函数 7.7 截尾型傅里叶变换设计方法 7.8 频率采样设计法 第8章 最小均方设计方法 8.1 有限冲激响应综述 8.2 最小二乘法 8.3 最小二乘FIR滤波器设计 8.4 MATIAB最小均方设计 8.5 MATLAB设计对比 8.6 PRONY方法 第9章 等波纹设计方法 9.1 等波纹准则 9.2 雷米兹交换算法 9.3 加权等波纹FIR滤波器设计 9.4 希尔伯特等波纹FIR滤波器 9.5 等波纹滤波器阶次估计 9.6 MATLAB等波纹FIR滤波器实现 9.7 LpFIR滤波器设计 9.8 基于Lp范数的MATLAB滤波器设计 第10章 FIR滤波器特例 10.1 引言 10.2 滑动平均FIR滤波器 10.3 梳状FIR滤波器 10.4 L波段FIR滤波器 10.5 镜像FIR滤波器 10.6 补码FIR滤波器 10.7 频率抽样滤波器组 10.8 卷积平滑FIR滤波器 10.9 非线性相位FIR滤波器 10.10 Farrow FIR滤波器 第11章 FIR的实现 11.1 概述 11.2 直接型FIR滤波器 11.3 转置结构 11.4 对称FIR滤波器结构 11.5 格型FIR滤波器结构 11.6 分布式算法 11.7 正则符号数 11.8 简化加法器图 11.9 FIR有限字长效应 11.10 计算误差 11.11 缩放 11.12 多重MAC结构 第12章 经典滤波器设计 12.1 引言 12.2 经典模拟滤波器 12.3 模拟原型滤波器 12.4 巴特沃斯原型滤波器 12.5 切比雪夫原型滤波器 12.6 椭圆原型滤波器 12.7 原型滤波器到最终形式的转换 12.8 其他IIR滤波器形式 12.9 PRONY(PADE)法 12.10 尤尔—沃尔 第13章 无限冲激响应滤波器设计 13.1 引言 13.2 冲激响应不变法 13.3 冲激响应不变滤波器设计 13.4 双线性z变换法 13.5 翘曲 13.6 MATLAB IIR滤波器设计 13.7 冲激响应不变与双线性z变换IIR对比 13.8 最优化 第14章 状态变量滤波器模型 14.1 状态空间系统 14.2 状态变量 14.3 模拟仿真 14.4 MATLAB仿真 14.5 状态变量模型 14.6 基变换 14.7 MATLAB状态空间 14.8 转置系统 14.9 MATLAB状态空间算法结构 第15章 数字滤波器结构 15.1 滤波器结构 15.2 直Ⅰ、Ⅱ型结构 15.3 直Ⅰ、Ⅱ型IIR滤波器的MATLAB相关函数 15.4 直Ⅰ、Ⅱ型结构的MATLAB实现 15.5 级联型结构 15.6 一阶、二阶子滤波器 15.7 一阶、二阶子滤波器的MATLAB实现 15.8 并联型结构 15.9 级联/并联型结构的MATLAB实现 15.10 梯型/格型IIR滤波器 第16章 定点效应 16.1 背景 16.2 定点系统 16.3 溢出(饱和)效应 16.4 算法误差 16.5 系数敏感度 16.6 二阶子滤波器 16.7 标准IIR滤波器 16.8 缩放 16.9 极限环振荡 第17章 IIR结构分析 17.1 溢出防范 17.2 Lp范数界 17.3 L2溢出预防 17.4 L2范数测定 17.5 L2范数的附加说明 17.6 L∞范数界 17.7 L1范数界 17.8 噪声功率增益 17.9 基于状态空间的噪声分析 17.10 相似变换 第18章 多采样率系统简介 18.1 背景 18.2 抽取 18.3 插值 18.4 采样率转换 18.5 多相表示法 18.6 子带滤波器 18.7 MATLAB 第19章 多采样率滤波器 19.1 引言 19.2 离散傅里叶变换(DFI)滤波器组 19.3 L波段滤波器 19.4 正交镜像滤波器 19.5 多相表达式 19.6 掩频滤波器 19.7 级联积分梳状滤波器(CIC) 附录一 MATLAB 附录二 词汇表 附录三 中英文对照 参考文献
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值