实验报告-卡尔曼滤波

更新时间:2023-11-30 08:34:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数字信号处理实验报告

姓名: 专业: 通信与信息系统 学号: 日期:2015.11

实验内容

任务一:

一连续平稳的随机信号x?t?,自相关函数rx????e?t,信号x?t?为加性噪声所干扰,噪

声是白噪声,测量值的离散值z?k?为已知,Ts?0.02s,-3.2,-0.8,-14,-16,-17,-18,-3.3,-2.4,-18,-0.3,-0.4,-0.8,-19,-2.0,-1.2,-11,-14,-0.9,-0.8,10,0.2,0.5,-0.5,2.4,-0.5,0.5,-13,0.5,10,-12,0.5,-0.6,-15,-0.7,15,0.5,-0.7,-2.0,-19,-17,-11,-14,自编卡尔曼滤波递推程序,估计信号x?t?的波形。

任务二:

设计一维纳滤波器。

(1)产生三组观测数据:首先根据s?n??as?n?1??w?n?产生信号s?n?,将其加噪(信噪比分别为20dB,10dB,6dB),得到观测数据x1?n? ,x2?n? ,x3?n? 。

2,i?1 3的AR模型参数。(2)估计xi?n? ,,假设信号长度为L,AR模型阶数为N,

分析实验结果,并讨论改变L,N对实验结果的影响。

实验任务一 1. 卡尔曼滤波原理

1.1 卡尔曼滤波简介

早在20世纪40年代,开始有人用状态变量模型来研究随机过程,到60年代初,由于空间技术的发展,为了解决对非平稳、多输入输出随机序列的估计问题,卡尔曼提出了递推最优估计理论。它用状态空间法描述系统,由状态方程和量测方程所组成,即知道前一个状态的估计值和最近一个观测数据,采用递推的算法估计当前的状态值。由于卡尔曼滤波采用

递推法,适合于计算机处理,并且可以用来处理多维和非平稳随机信号,现已广泛应用于很多领域,并取得了很好的结果。卡尔曼滤波一经出现,就受到人们的很大重视,并 在实践中不断丰富和完善,其中一个成功的应用是设计运载体的高精度组合导航系统。卡尔曼滤波具有以下的特点:

(1)算法是递推的,且状态空间法采用在时域内设计滤波器的方法,因而适用于多维随机过程的估计;离散型卡尔曼算法适用于计算机处理。

(2)用递推法计算,不需要知道全部过去的值,用状态方程描述状态变量的动态变化规律,因此信号可以是平稳的,也可以是非平稳的,即卡尔曼滤波适用于非平稳过程。

(3)卡尔曼滤波采取的误差准则仍为估计误差的均方值最小。

1.2 卡尔曼滤波的状态方程和测量方程

假设某系统k时刻的状态变量为xk,状态方程和量测方程(输出方程)表示为

xk?Ak?1xk?1?wk?1yk?Ckxk?vk

其中,xk是状态变量;wk?1表示输入信号是白噪声;vk是观测噪声;yk是观测数据。

为了推导简单,假设状态变量的增益矩阵A不随时间发生变化,wk,vk都是均值为零的正态白噪声,方差分别是Qk和Rk,并且初始状态与wk,vk都不相关,?表示相关系数。即:

2wk:E?wk??0,?w?Qk,?wk,wj?Qk?kjvk:E?vk??0,??Rk,?vk,vj?Rk?kj2v

其中

? kj???1k?j

?0k?j1.3 卡尔曼滤波的递推算法

卡尔曼滤波采用递推算法来实现,其基本思想是先不考虑输入信号wk和观测噪声vk的影响,得到状态变量和输出信号(即观测数据)的估计值,再用输出信号的估计误差加权后校正状态变量的估计值,使状态变量估计误差的均方值最小。因此,卡尔曼滤波器的关键是计算出加权矩阵的最佳值。

当不考虑观测噪声和输入信号时,状态方程和量测方程为

xk?Akxk?1yk?Ckxk?CkAkxk?1?'???'?

显然,由于不考虑观测噪声的影响,输出信号的估计值与实际值是有误差的,用yk表示

~yk?yk?yk

为了提高状态估计的质量,用输出信号的估计误差yk来校正状态变量

?'?????? ?xk?Akxk?1?Hk?y?y?Ax?Hy?CAxk?1k?1??kkkkkk??k??????~~?'其中,Hk为增益矩阵,即加权矩阵。经过校正后的状态变量的估计误差及其均方值分别用xk和Pk表示,把未经校正的状态变量的估计误差的均方值用Pk'表示

~xk?xk?xkT????????Pk?E??xk?xk??xk?xk??

????????T???'???'???xk?xk??Pk?E??xk?xk?????????????~?卡尔曼滤波要求状态变量的估计误差的均方值Pk为最小,因此卡尔曼滤波的关键即为通过选择合适的Hk,使得Pk取得最小值。首先推导状态变量的估计值xk和状态变量的的估计误差xk,然后计算x的均方值Pk,通过化简Pk,得到一组卡尔曼滤波的递推公式:

??????x?Ax?Hy?CAxkk?1k?1??kkkkk?????1?'T'TH?PCCPC?R ?kkkkkkk?P'?APAT?Qkk?1kk?1?k'??Pk??I?HkCk?Pk~~???假设初始条件Ak,其中x0?E?x0?,PCk,Qk,Rk,yk,xk-1,Pk-1已知,0?var?x0?,那么递推流程如下:

??

xk-1,Pk-1?P'kHkxk,Pk

?2. 卡尔曼滤波递推程序编程思想

题目分析

(1)由于信号x?t?为加性噪声所干扰,可知yk?xk?vk,所以Ck?1

2(2)又因为噪声为白噪声,所以Rk??v?Svv?0??1

(3)因为rx????e?t,所以

?mSxx?z???m??m????r?m?zxx??em????1m???mz?m??ezm????2m?0m?m??e?mz?mm?0m???ez??11?e?1?e?1z1?e?1z?11?e?1z1?e?1z?1

????z?1?1?1由此可知,Bz?,即,可得到:,因为抽样??????xn?exn?1?wn?1A?ek?1?11?ez间隔Ts?0.02s,所以:Ak?e?Ts?e?0.02。 x?n?,所以

(4)因此w?n??x?n?1??e?Ts2Qk??w?rww?0??E?w?n?w?n???1?e?2T

因此Qk?1?e?0.04

编程分析

由上面的分析可知初始条件Ak,在仿真中假设x0?0,则x0?0,Ck,Qk,Rk,yk已知,

?P0?1,由以上参数可得卡尔曼实际递推公式

???????0.02?0.02x?ex?Hy?exkk?1k?1??kk?????1?''H?PP?1?kkk?P'?e?0.04P?1?e?0.04k?1?k'??Pk??I?Hk?Pk??

将得到的公式代入前面分析的递推公式,即可进行迭代得到结果xk。

3. MATLAB源代码

根据以上分析,编写matlab程序如下:

%%

%---------------卡尔曼滤波----------------- %-----说明

%X(k+1)=Ak*X(k)+W(k); %Y(k)=Ck*X(k)+V(k) %% clear;clc; %基本参数值

Ak=exp(-0.02);Ck=1; Qk=1-exp(-0.04);Rk=1; %初始值设置 X0=0;P0=1; %观测值y(k)

Y=[-3.2 -0.8 -14 -16 -17 -18 -3.3 -2.4 -18 -0.3 -0.4 -0.8 -19 -2.0 -1.2 ...

-11 -14 -0.9 0.8 10 0.2 0.5 2.4 -0.5 0.5 -13 0.5 10 -12 0.5 -0.6 -15 -0.7 15 ...

0.5 -0.7 -2.0 -19 -17 -11 -14]; %数据长度 N=length(Y); for k=1:N

if k==1 %k=1时由初值开始计算 P_(k)=Ak*P0*Ak'+Qk;

H(k)=P_(k)*Ck'*inv(Ck*P_(k)*Ck'+Rk); X(k)=Ak*X0+H(k)*(Y(k)-Ck*Ak*X0); I=eye(size(H(k))); P(k)=(I-H(k)*Ck)*P_(k);

本文来源:https://www.bwwdw.com/article/nfht.html

Top