kalman滤波和数字低通滤波
- 格式:docx
- 大小:59.56 KB
- 文档页数:6
卡尔曼滤波器介绍摘要在1960年,发表了关于递归解决线性离散数据滤波器的闻名论文,从那时刻起,由于在数字计算的大部份提高,Kalman滤波器已成为普遍研究和应用的学科,尤其是自动或辅助导航系统。
Kalman滤波器是一套数学等式,它提供了一种有效的以最小均方误差来估量系统状态的计算(递归的)方式。
它在以下几方面是超级壮大的:它支持过去、此刻、乃至以后估量,乃至在系统准确模型也未知的情形下。
本文的目的是提供一种对离散的Kalman滤波器的有效介绍。
这些介绍包括对大体离散kalman滤波器、起源和与之相关的简单(有形)的带有真实数字和结果的描述和讨论。
1、离散的kalman滤波器在1960年,发表了关于递归解决线性离散数据滤波器的闻名论文,从那时刻起,由于在数字计算的大部份提高,Kalman滤波器已成为普遍研究和应用的学科,尤其是自动或辅助导航系统。
关于kalman滤波器一样方式的友好介绍能够在〔maybeck79〕的中找到,可是更完整部份的讨论能在〔Sorenson70〕中发觉,它还包括许多有趣的历史说明。
在〔Gel b74;Grewal93;Maybeck79;Lewis86;Brown92;jacobs93〕中有更多参考。
估值进程Kalman滤波器解决估量离散时刻操纵进程的状态X∈R n的一样性问题,概念线性随机差分方程其中,测量值Z∈R m,概念为随机变量W K和V K各自表示系统噪声和测量噪声,咱们假定它们为彼此独立的、白噪声且为正常概率散布在实际中,系统噪声协方差矩阵Q和测量噪声协方差矩阵R可能随进程和测量时刻而改变,不管如何,咱们在那个地址假定它们是常量。
在差分方程()中,n×n阶矩阵A与前一时刻(K-1)和当前时刻K相关,那个地址缺少传递函数或系统噪声。
注意的是,在实际中,A可能随各自时刻改变,但那个地址咱们假定其为常量,n×l阶矩阵R与非强制性输入U∈R l和状态x有关,在测量公式()中,m×n阶矩阵H与状态及测量值Z K有关,在实际中,H可能随各自进程或测量时刻而改变,那个地址假定它们是常数。
十大滤波算法滤波算法是信号处理中一种重要的算法,它可以有效地去除信号中的噪声,提高信号的质量。
在现在的技术发展中,滤波算法的应用越来越广泛,它可以用于多媒体信号处理、数据通信、图像处理等领域。
目前,最常用的滤波算法有十种。
首先,最基本的滤波算法就是低通滤波(Low Pass Filter,LPF),它的主要作用是抑制高频信号,使低频信号得以保留。
低通滤波是最常用的滤波算法之一,用于去除信号中的高频噪声。
其次,高通滤波(High Pass Filter,HPF)是低通滤波的反向过程,它的主要作用是抑制低频信号,使高频信号得以保留。
高通滤波也是常用的滤波算法之一,用于去除信号中的低频噪声。
再次,带通滤波(Band Pass Filter,BPF)是低通滤波和高通滤波的结合,它的主要作用是筛选出特定的频率段,使特定频率段的信号得以保留。
带通滤波可以用于信号提取,电路增强或其他应用。
第四,带阻滤波(Band Stop Filter,BSF)是带通滤波的反向过程,它的主要作用是抑制特定的频率段,使特定频率段的信号得以抑制。
它可以用于信号抑制,抑制特定频率段的噪声。
第五,振荡器滤波(Oscillator Filter,OF)是一种由振荡器组成的滤波算法,它的主要作用是产生稳定的低频信号,用于抑制高频噪声。
振荡器滤波器是在电路中比较常用的滤波算法,它用于去除信号中的高频噪声。
第六,改正型滤波(Adaptive Filter,AF)是一种根据输入信号的变化而调整滤波系数的滤波算法,它的主要作用是根据实时输入信号的变化而调整滤波系数,实现鲁棒性滤波。
改正型滤波是一种比较高级的滤波算法,它可以有效地抑制噪声,提高信号的质量。
第七,采样滤波(Sampling Filter,SF)是一种用于数字信号处理的滤波算法,它的主要作用是抑制采样频率之外的频率,使采样频率内的信号得以保留。
采样滤波是在数字信号处理中常用的滤波算法,它可以有效地抑制采样频率外的噪声,提高信号的质量。
Kalman滤波原理及算法kalman滤波器一(什么是卡尔曼滤波器卡尔曼全名Rudolf Emil Kalman,匈牙利数学家,1930年出生于匈牙利首都布达佩斯, 我们现在要学习的卡尔曼滤波器,正是源于他的博士论文和1960年发表的论文《A New Approach to Linear Filtering and Prediction Problems》(线性滤波与预测问题的新方法)。
二.卡尔曼滤波器算法的介绍以下是卡尔曼滤波器核心的5个式子。
X(k|k-1)=A X(k-1|k-1)+B U(k) (1)P(k|k-1)=A P(k-1|k-1) A’+Q (2)X(k|k)= X(k|k-1)+Kg(k) (Z(k)-H X(k|k-1)) (3)Kg(k)= P(k|k-1) H’ / (H P(k|k-1) H’ + R) (4)P(k|k)=(I-Kg(k) H)P(k|k-1) (5)下面我们详细介绍卡尔曼滤波的过程。
首先,我们要引入一个离散控制过程的系统。
该系统可用一个线性随机微分方程来描述:X(k)=A X(k-1)+B U(k)+W(k)再加上系统的测量值:Z(k)=H X(k)+V(k)上两式子中,X(k)是k时刻的系统状态,U(k)是k时刻对系统的控制量。
A和B是系统参数,对于多模型系统,他们为矩阵。
Z(k)是k时刻的测量值,H是测量系统的参数,对于多测量系统,H为矩阵。
W(k)和V(k)分别表示过程和测量的噪声。
他们被假设成高斯白噪声(White Gaussian Noise),他们的covariance分别是Q,R(这里我们假设他们不随系统状态变化而变化)。
对于满足上面的条件(线性随机微分系统,过程和测量都是高斯白噪声),卡尔曼滤波器是最优的信息处理器。
下面我们来用他们结合他们的covariances来估算系统的最优化输出。
首先我们要利用系统的过程模型,来预测下一状态的系统。
Kalman滤波和数字滤波一、kalman滤波卡尔曼滤波器是一个“optimal recursive data processing algorithm(最优化自回归数据处理算法)”。
采用信号与噪声的状态空间模型,利用前一时刻地估计值和现时刻的观测值来更新对状态变量的估计,求出现时刻的估计值。
它适合于实时处理和计算机运算。
其他的就不介绍了。
公式简介卡尔曼滤波主要是由5个经典公式组成:X(k|k-1)=A X(k-1|k-1)+B U(k) (1)式(1)中,X(k|k-1)是利用上一状态预测的结果,X(k-1|k-1)是上一状态最优的结果,U(k)为现在状态的控制量,如果没有控制量,它可以为0。
到现在为止,我们的系统结果已经更新了,可是,对应于X(k|k-1)的协方差还没更新。
我们用P表示协方差:P(k|k-1)=A P(k-1|k-1) A’+Q (2)式(2)中,P(k|k-1)是X(k|k-1)对应的协方差,P(k-1|k-1)是X(k-1|k-1)对应的协方差,A’表示A的转置矩阵,Q是系统过程的协方差。
式子1,2就是卡尔曼滤波器5个公式当中的前两个,也就是对系统的预测。
现在我们有了现在状态的预测结果,然后我们再收集现在状态的测量值。
结合预测值和测量值,我们可以得到现在状态(k)的最优化估算值X(k|k):X(k|k)= X(k|k-1)+Kg(k) (Z(k)-H X(k|k-1)) (3)其中Kg为卡尔曼增益(Kalman Gain):Kg(k)= P(k|k-1) H’ / (H P(k|k-1) H’ + R) (4)到现在为止,我们已经得到了k状态下最优的估算值X(k|k)。
但是为了要令卡尔曼滤波器不断的运行下去直到系统过程结束,我们还要更新k状态下X(k|k)的协方差:P(k|k)=(I-Kg(k) H)P(k|k-1) (5)其中I 为1的矩阵,对于单模型单测量,I=1。
当系统进入k+1状态时,P(k|k)就是式子(2)的P(k-1|k-1)。
卡尔曼滤波卡尔曼滤波(Kalman filtering ) 一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。
由于观测数据中包括系统中的噪声和干扰的影响,所以最优估计也可看作是滤波过程。
斯坦利施密特(Stanley Schmidt)首次实现了卡尔曼滤波器。
卡尔曼在NASA埃姆斯研究中心访问时,发现他的方法对于解决阿波罗计划的轨道预测很有用,后来阿波罗飞船的导航电脑使用了这种滤波器。
关于这种滤波器的论文由Swerli ng (1958), Kalman (I960) 与Kalma n and Bucy (1961) 发表。
数据滤波是去除噪声还原真实数据的一种数据处理技术,Kalman滤波在测量方差已知的情况下能够从一系列存在测量噪声的数据中,估计动态系统的状态•由于,它便于计算机编程实现,并能够对现场采集的数据进行实时的更新和处理,Kalman滤波是目前应用最为广泛的滤波方法,在通信,导航,制导与控制等多领域得到了较好的应用•中文名卡尔曼滤波器,Kalman滤波,卡曼滤波外文名KALMAN FILTER表达式X(k)=A X(k-1)+B U(k)+W(k)提岀者斯坦利施密特提岀时间1958应用学科天文,宇航,气象适用领域范围雷达跟踪去噪声适用领域范围控制、制导、导航、通讯等现代工程斯坦利施密特(Stanley Schmidt)首次实现了卡尔曼滤波器。
卡尔曼在NASA埃姆斯研究中心访问时,发现他的方法对于解决阿波罗计划的轨道预测很有用,后来阿波罗飞船的导—航电脑使用了这种滤波器。
关于这种滤波器的论文由Swerling (1958), Kalman (1960)与Kalma n and Bucy (1961) 发表。
2定义传统的滤波方法,只能是在有用信号与噪声具有不同频带的条件下才能实现. 20世纪40年代,N .维纳和A. H .柯尔莫哥罗夫把信号和噪声的统计性质引进了滤波理论,在假设信号和噪声都是平稳过程的条件下,利用最优化方法对信号真值进行估计,达到滤波目的,从而在概念上与传统的滤波方法联系起来,被称为维纳滤波。
常⽤的滤波算法滤波是传感器处理中的重要算法,经常接触底层常常⽤到,以下总结了⼀些滤波算法,供以后参考调⽤。
⼀、低通滤波1.1RC滤波的数字低通滤波 指在截⽌频率fc的时候,增益为-3db(Aup=0.707)的滤波器,也是模电书中出现的第⼀种硬件滤波器,以下是对应的软件形式的1阶RC 滤波器的数字形式(本断程序节选⾃匿名4轴) ⼀阶形式:Y(n)=(1-a)*Y(n-1)+a*X(n) 下式中 oldData表⽰上⼀次的输出Y(n-1) newData表⽰新的输⼊X(n)1 float LopPassFilter_RC_1st(float oldData, float newData, float a)2 {3 return oldData * (1 - a) + newData * a;4 }56 计算⽐例系数a:78 float LopPassFilter_RC_1st_Factor_Cal(float deltaT, float Fcut)9 {10 return deltaT / (deltaT + 1 / (2 * M_PI * Fcut));11 }1.2均值滤波: 把⼀段时间内的数据累加后求平均值,达到平滑的作⽤,适⽤性⼴泛,元素越多滤波效果越好时延越⾼。
1 uint16_t LowPassFilter_Average(uint16_t data[],uint16_t length)23 {45 uint32_t add=0;6 uint16_t result;7 int i;89 for(i=0;i<length;i++)10 {11 add += data[i];12 }13 result=add/length;14 return result;15 }1617 //data[]放⼊⼀段时间⾥的数值,length:data数组的长度1.3滑动滤波 在均值滤波的基础上,加上⽐例系数,最新的数据具有更⼤的⽐例,增加时效性。
9、Kalman 滤波直观推导Kalman 滤波实质是线性最小方差估计]X ~X ~[E min T k k随机线性离散系统方程为1k 1k ,k 1k 1k ,k k W X X ----Γ+Φ=k k k k V X H Z +=过程噪声和观测噪声的统计特性,假设满足如下条件⎪⎪⎩⎪⎪⎨⎧=δ==δ==0]V W [E R ]V V [E ,0]V [E Q ]W W [E ,0]W [E T j k kj k Tj k k kj k T j k k 设k 时刻得到k 次观测值k 1Z Z ,且找到了1k X -的一个最优线性估计1k Xˆ-,即1k Xˆ-是1k 1Z Z - 的线性函数。
(1)k 时刻系统状态的预测估计值1k 1k ,k 1k ,k X ˆXˆ---Φ= (2)k 时刻系统观测值的预测估计值1k ,k k 1k ,k X ˆH Zˆ--= (3)获得k 时刻观测值k Z ,观测值与预测估计1k ,k Zˆ-之间误差 k1k ,k k 1k ,k k k k k 1k ,k k k 1K ,k k k V X ~H X ˆH V X H X ˆH Z ZˆZ Z ~+=-+=-=-=----造成误差的原因为预测估计1K ,k Zˆ-和观测值k Z 可能都存在误差。
(4)修正k 时刻状态的预测估计值,k K 为滤波增益矩阵)X ˆH Z (K X ˆXˆ1k ,k k k k 1k ,k k ---+= (5)获取k 时刻观测值k Z 前后对k X 的估计误差分别为1k ,k k 1k ,k XˆX X ~---= k k k XˆX X ~-= (6)根据最优滤波方差阵k P 求最优滤波增益矩阵k K 。
]X ~X ~[E P T k k k =k k 1k ,k k k k k 1k ,k k k 1k ,k 1k ,k k k k k k 1k ,k 1k ,k k k k 1k ,k k k V K X~]H K I [V K X ~H K X ~]X ˆH V X H [K X ~]X ˆH Z [K XˆX X~--=--=-+-=---=-------注:0]X ~V [E ,0]V X ~[E T 1k ,k k Tk 1K ,k ==--T kk k T k k 1k ,k k k T kTk k k T k k T 1k ,k 1k ,k k k T k T k k k T k k T 1k ,k k k T kTk 1k ,k k k T k k T 1k ,k 1k ,k k k T k k k TkT k k k T k k T 1k ,k k k T k T k 1k ,k k k T k k T 1k ,k 1k ,k k k T k k 1k ,k k k k k 1k ,k k k T k k K R K ]H K I [P ]H K I [K ]V V [E K ]H K I ][X ~X ~[E ]H K I [K ]V V [E K ]H K I ][X ~V [E K K ]V X ~[E ]H K I []H K I ][X ~X ~[E ]H K I []X ~X ~[E P K V V K ]H K I [X ~V K K V X ~]H K I []H K I [X ~X ~]H K I [}V K X ~]H K I }{[V K X ~]H K I {[X ~X ~+--=+--=+------==+------=----=-------------求最优增益k K 。
卡尔曼滤波器介绍
摘要
在1960年,R.E.Kalman发表了关于递归解决线性离散数据滤波器的著名论文,从那时间起,由于在数字计算的大部分提高,Kalman滤波器已成为广泛研究和应用的学科,尤其是自动或辅助导航系统。
Kalman滤波器是一套数学等式,它提供了一种有效的以最小均方误差来估计系统状态的计算(递归的)方法。
它在以下几方面是非常强大的:它支持过去、现在、甚至将来估计,甚至在系统准确模型也未知的情况下。
本文的目的是提供一种对离散的Kalman滤波器的实用介绍。
这些介绍包括对基本离散kalman滤波器、起源和与之相关的简单(有形)的带有真实数字和结果的描述和讨论。
1、离散的kalman滤波器
在1960年,R.E.Kalman发表了关于递归解决线性离散数据滤波器的著名论文,从那时间起,由于在数字计算的大部分提高,Kalman滤波器已成为广泛研究和应用的学科,尤其是自动或辅助导航系统。
关于kalman滤波器一般方法的友好介绍可以在〔maybeck79〕的Chapter.1中找到,但是更完整部分的讨论能在〔Sorenson70〕中发现,它还包括许多有趣的历史解释。
在〔Gelb74;Grewal93;Maybeck79;Lewis86;Brown92;jacobs93〕中有更多参考。
估值过程
Kalman滤波器解决估计离散时间控制过程的状态X∈R n的一般性问题,定义线性随机差分方程
1。
低通滤波和卡尔曼滤波
低通滤波和卡尔曼滤波都是信号处理中常用的滤波技术,用于处理噪声、提取信号信息或估计状态。
以下是它们的简要介绍:
低通滤波:
低通滤波是一种信号处理技术,用于去除高频成分,保留低频成分。
它可以过滤掉信号中高频的噪声或干扰,从而平滑信号并保留低频信息。
低通滤波器的传递函数在低频范围内具有较高的增益,而在高频范围内逐渐减小。
这种滤波器通常用于信号去噪、信号平滑和频率分析等领域。
卡尔曼滤波:
卡尔曼滤波是一种递归的状态估计算法,常用于在有噪声的测量下估计系统的状态。
它结合了预测和测量两个步骤,使用线性系统模型和高斯分布假设来对状态进行估计。
卡尔曼滤波可以根据系统模型和测量数据,计算出最优的状态估计值和状态协方差估计值。
它广泛应用于估计移动目标的位置、姿态、速度等状态,例如在航空航天、导航和机器人领域。
总之,低通滤波用于信号平滑和去噪,而卡尔曼滤波用于状态估计和数据融合。
它们都是信号处理和控制领域中重要的技术,用于改善数据质量和提取有用的信息。
基于Kalman滤波器的高精度电子秤设计崔建峰;钱帅【摘要】针对传统电子称功能单一、数据稳定速度慢、精度低等问题,设计了一种基于Kalman滤波器的高精度电子称;系统以STM32为主控单元,详细介绍了各个模块的实现方法;首先设计了高精度的应变片式称重传感器,并在该硬件基础上设计了更加快速有效的数据滤波算法,然后从算法的时间复杂度和空间复杂度的角度,对电子称中数据的几种常用滤波方式进行了对比;最后在传统电子称的基础上增加了一些联网、标定等新颖功能;实际测试结果表明,该电子称性能稳定,数据稳定速度快,称重精度满足国家规定的三级称称重标准.【期刊名称】《计算机测量与控制》【年(卷),期】2019(027)003【总页数】5页(P202-205,210)【关键词】Kalman滤波器;STM32;电子秤;高精度;快速稳定【作者】崔建峰;钱帅【作者单位】中北大学电气与控制工程学院,太原030051;中北大学电气与控制工程学院,太原030051【正文语种】中文【中图分类】TH7150 引言随着生活节奏的加快,人们对电子产品的要求越来越高。
使得很多开发商不得不采用高速处理器来满足人们对于速度的追求。
电子称作为日常生活中经常使用的电子产品之一,其显示重量的精度与稳定速度都有待提高。
文献[1-3]中采用平均滤波、中值滤波或者去极值滑动平均滤波的方式处理重量数据,但是此类滤波方式不仅会降低系统的动态响应速度[4],而且精确度也有待提高;文献[5]仅采用硬件低通滤波,相对于硬件滤波,软件滤波可靠性高,稳定性好,且不存在阻抗匹配等问题[6]。
为此,本设计提出一种Kalman滤波与一阶低通数字滤波相结合的数据滤波方式,不仅提高了系统的动态响应速度,而且使滤波后的数据更加精确。
为了拓展电子称的功能,为用户带来更加贴心、人性化的使用体验,借助STM32高性能、低功耗等优势,本设计集成了日常称重过程中所需要的大部分功能,优化了用户的使用体验。
Kalman滤波和数字滤波一、kalman滤波卡尔曼滤波器是一个“optimal recursive data processing algorithm(最优化自回归数据处理算法)”。
采用信号与噪声的状态空间模型,利用前一时刻地估计值和现时刻的观测值来更新对状态变量的估计,求出现时刻的估计值。
它适合于实时处理和计算机运算。
其他的就不介绍了。
公式简介卡尔曼滤波主要是由5个经典公式组成:X(k|k-1)=A X(k-1|k-1)+B U(k) (1)式(1)中,X(k|k-1)是利用上一状态预测的结果,X(k-1|k-1)是上一状态最优的结果,U(k)为现在状态的控制量,如果没有控制量,它可以为0。
到现在为止,我们的系统结果已经更新了,可是,对应于X(k|k-1)的协方差还没更新。
我们用P表示协方差:P(k|k-1)=A P(k-1|k-1) A’+Q (2)式(2)中,P(k|k-1)是X(k|k-1)对应的协方差,P(k-1|k-1)是X(k-1|k-1)对应的协方差,A’表示A的转置矩阵,Q是系统过程的协方差。
式子1,2就是卡尔曼滤波器5个公式当中的前两个,也就是对系统的预测。
现在我们有了现在状态的预测结果,然后我们再收集现在状态的测量值。
结合预测值和测量值,我们可以得到现在状态(k)的最优化估算值X(k|k):X(k|k)= X(k|k-1)+Kg(k) (Z(k)-H X(k|k-1)) (3)其中Kg为卡尔曼增益(Kalman Gain):Kg(k)= P(k|k-1) H’ / (H P(k|k-1) H’ + R) (4)到现在为止,我们已经得到了k状态下最优的估算值X(k|k)。
但是为了要令卡尔曼滤波器不断的运行下去直到系统过程结束,我们还要更新k状态下X(k|k)的协方差:P(k|k)=(I-Kg(k) H)P(k|k-1) (5)其中I 为1的矩阵,对于单模型单测量,I=1。
当系统进入k+1状态时,P(k|k)就是式子(2)的P(k-1|k-1)。
这样,算法就可以自回归的运算下去。
参数整定卡尔曼滤波参数的调整:其参数有三个,P0是初始化最优角度估计的协方差(初始化最优角度估计可设为零),它是一个初值。
Q是预测值的协方差,R是测量值的协方差。
对Q 和R的设定只需记住,Q/(Q+R)的值就是卡尔曼增益的收敛值,比如其值为0.2,那么卡尔曼增益会向0.2收敛(对于0.2的含义解释一下,比如预测角度值是5度,角度测量值是10度,那么最优化角度为:5+0.2*(10-5)=6。
从这里可以看出,卡尔曼增益越小,说明预测值越可靠,最优化角度越接近预测值;相反的,卡尔曼增益越大,说明测量值越可靠,最优化角度越接近测量值)。
P/(Q+R)反映收敛的快慢程度,该值设定越小,收敛越快,该值越大,收敛越慢(这里的P是指初始最优角度值的协方差),因为卡尔曼增益收敛总的来说是很快的,所以该值设定大一点或小一点都没什么关系,并且卡尔曼滤波器对于预测系统的要求并不实现框图卡尔曼滤波参数的调整:其参数有三个,P0是初始化最优角度估计的协方差(初始化最优角度估计可设为零),它是一个初值。
Q是预测值的协方差,R是测量值的协方差。
对Q 和R的设定只需记住,Q/(Q+R)的值就是卡尔曼增益的收敛值,比如其值为0.2,那么卡尔曼增益会向0.2收敛(对于0.2的含义解释一下,比如预测角度值是5度,角度测量值是10度,那么最优化角度为:5+0.2*(10-5)=6。
从这里可以看出,卡尔曼增益越小,说明预测值越可靠,最优化角度越接近预测值;相反的,卡尔曼增益越大,说明测量值越可靠,最优化角度越接近测量值)。
P/(Q+R)反映收敛的快慢程度,该值设定越小,收敛越快,该值越大,收敛越慢(这里的P是指初始最优角度值的协方差),因为卡尔曼增益收敛总的来说是很快的,所以该值设定大一点或小一点都没什么关系,并且卡尔曼滤波器对于预测系统的要求并不高。
Q,R的确定测量噪声的协方差 R ,此为猜测值,因测量系统而定。
系统噪声 Q ,也是猜测值,预测模型越不准,Q 值应越大,预测模型越精确,Q值也越小。
在系统中为简便,Q、R常取定值。
在系统归一化单位之后,可以确知测量模型和预测模型的取值范围,进而也就可以大致知道Q、R的取值,然后在试验中反复调试,观测系统输出,寻求最佳值。
二、数字滤波数字滤波器和Matab数字滤波器的功能是对输入离散信号的数字代码进行运算处理,以达到改变信号频谱的目的。
离散傅里叶变换可以将抽样数字信号从时域转到频域,包括低通、高通、带通、带阻和全通等类型。
Matlab的信号处理工具箱的基本组成就是滤波器的设计与实现以及谱分析。
工具箱提供了丰富而简便的设计、实现FIR和IIR的方法,使原来繁琐的程序设计简化成函数调用,特别是滤波器的表达方式和形式之间的相互转换显得十分简便,为滤波器的设计和实现开辟了一片广阔的天地。
matlab常用函数(1)[N,wc]=buttord(wp,ws,wp,ws)用于计算巴特沃斯数字滤波器的阶数N和3dB截止频率wc。
调用参数wp,ws分别为数字滤波器的通带、阻带截止频率的归一化值,要求:0≤wp≤1,0≤ws≤1。
1表示数字频率pi。
wp,ws分别为通带最大衰减和组带最小衰减(dB)。
当ws≤wp时,为高通滤波器;当wp和ws为二元矢量时,为带通或带阻滤波器,这时wc也是二元向量。
N,wc作为butter函数的调用参数。
(2)[b,a]=butter(N,wc,‘ftype’)计算N阶巴特沃斯数字滤波器系统函数分子、分母多项式的系数向量b、a。
调用参数N和wc分别为巴特沃斯数字滤波器的阶数和3dB截止频率的归一化值(关于pi归一化),一般是调用buttord(1)格式计算N和wc。
(3)FFT 功能:一维快速傅立叶变换(FFT)。
格式:y=fft(x);y=fft(x,n)。
说明:fft函数用于计算矢量或矩阵的离散傅立叶变换。
y=fft(x)利用肿算法计算矢量x的离散傅立叶变换,当x为矩阵时,y为矩阵x每一列的FFT。
当x长度为2的整数次幂时,fft采用基2FFT算法,否则采用稍慢的混合基算法。
y=fft(x,n)采用n点FFT。
当x长度小于n时,fft函数自动在x尾部补零,以构成n点数列;当x长度大于n时,fft截取x 的前面n点数据进行FFT。
(4)IFFT 功能:一维逆快速傅立叶变换(IFFT)格式:y=ifft(x);y=ifft(x,n)。
(5) filter 一维数字滤波器Y = filter(B,A,X) ,输入X为滤波前序列,Y为滤波结果序列,B/A 提供滤波器系数,B 为分子, A为分母。
整个滤波过程是通过下面差分方程实现的: a(1)*y(n) = b(1)*x(n) +b(2)*x(n-1) + ... + b(nb+1)*x(n-nb) - a(2)*y(n-1) - ... - a(na+1)*y(n-na) [Y,Zf] = filter(B,A,X,Zi),输入X为滤波前序列,Y为滤波结果序列,B/A 提供滤波器系数,B为分子, A为分母。
(6)fir1是用窗函数法设计线性相位RIRDF的工具箱函数,以实现线性相位FIRDF的标准窗函数法设计。
hn=fir1(M,wc,window),可以指定窗函数向量window。
默认为哈明窗。
例如,hn=fir1(M,wc,bartlett(M+1)),使用Bartlett窗设计。
hn=fir1(M,wc,blackman(M+1)),使用blackman窗设计。
hn=fir1(M,wc,'ftype',window),通过选择wc,ftype和window参数(含义同上),可以设计各种加窗滤波器。
(7 )AWGN:在某一信号中加入高斯白噪声 Y= awgn(x,SNR) 在信号x中加入高斯白噪声。
信噪比SNR以dB为单位。
x的强度假定为0dBW。
如果x是复数,就加入复噪声。
附录matlab代码clearclc% signal generate /realValuefs=500; %sampling frequencyN=256 ; % signal array numbern=0:N-1;t=n/fs ; % timer shaftf1=30; % signal frequencyrealValue = sin(2*f1*pi*t);H1=figure;subplot(2,2,1);plot(t,realValue,'k');ylabel('幅度');xlabel('时间/秒');title('真实信号');noise=randn(1,length(t));% measure value with noisemesr_value = awgn(realValue,4);% awgn(x,y) x为信号y为信噪比/dbsubplot(2,2,2);plot(t,realValue,'k',t,mesr_value,'r');ylabel('幅度');xlabel('时间/秒');title('测量信号');%-----------------------------------------% kalman filterR_error = mesr_value - realValue;q1 = 2*std(R_error);R_cov = q1.^2; % measure covarianceq2 = std(noise);Q_cov = q2.^2; % system covarianceklm_out(1)=0;predict_err(1)=0;value_err(1)=0;klm_gain(1)=0;for k=2:N;predict_err(k) = value_err(k-1) + Q_cov;klm_gain(k)= predict_err(k) / (predict_err(k) + R_cov);klm_out(k) = klm_out(k-1) + klm_gain(k) * (mesr_value(k) - klm_out(k-1));value_err(k) = predict_err(k) - predict_err(k) * klm_gain(k);endsubplot(2,2,3);plot(t,realValue,'k',t,klm_out,'b');ylabel('幅度');xlabel('时间/秒');title('卡尔曼滤出信号');% FourierRs=0.05; % 各带纹波系数fcuts=[0 10 70 100]; % 带通滤波器上下截止频率/Hza=[0 1 0];dev=Rs*ones(1,length(a));% 选用凯泽窗[M,wc,beta,ftype]=kaiserord(fcuts,a,dev,fs);M=mod(M,2)+M; % 滤波器阶数window = Kaiser(M+1,beta);% 创建滤波器filter_coefficient = fir1(M,wc,ftype,window);% filtersigfilter = filter(filter_coefficient,1,mesr_value);subplot(2,2,4);plot(t,realValue,'k',t,sigfilter,'g');ylabel('幅度');xlabel('时间/秒');title('带通滤出信号');[amplt,sf]=freqz(filter_coefficient,1,N); %滤波器的幅频特性%[H,W]=freqz(B,A,N)当N是一个整数时函数返回N点的频率向量和幅频响应向量fft_sig = fft(mesr_value,N);fft_signal = abs(fft_sig);H2=figure;subplot(1,2,1);f=fs/N*(1:N/2);plot(f,fft_signal(1:N/2));ylabel('幅度');xlabel('频率/赫兹');title('信号频谱');subplot(1,2,2);plot(sf*fs/(2*pi),20*log10(abs(amplt))); ylabel('增益/分贝');xlabel('频率/赫兹'); title('带通滤波器增益响应');。