1. AR模型概念观

      AR模型是一种线性预测,即已知N个数据,可由模型推出第N点前面或后面的数据(设推出P点),所以其本质类似于插值,其目的都是为了增加有效数据,只是AR模型是由N点递推,而插值是由两点(或少数几点)去推导多点,所以AR模型要比插值方法效果更好。

数字信号处理功率谱估计方法分经典功率谱估计和现代功率谱估计,现代功率谱估计以参数模型功率谱估计为代表,参数功率谱模型如下:

u(n) ——>  H(z)   ——> x(n)

参数模型的基本思路是:

—— 参数模型假设研究过程是由一个输入序列u(n)激励一个线性系统H(z)的输出。

—— 由假设参数模型的输出x(n)或其自相关函数来估计H(z)的参数

—— 由H(z)的参数估计x(n)的功率谱

因此,参数模型功率谱的求解有两步:

(1)H(z)模型参数估计

(2)依据模型参数求功率谱

AR模型(自回归模型,Auto Regression Model)是典型的现代参数功模型。其定义为

其中,输入设定为方差为的白噪声序列,ak是模型的参数,p是模型的阶数,Px为x(n)功率谱,也即本文要求解的目标。

AR模型是一个全极点模型,“自回归”的含义是:现在的输出是现在的输入和过去p个输出的加权和。

现在我们希望建立AR参数模型和x(n)的自相关函数的关系,也即AR模型的正则方程:

上面的正则方程也称Yule-Walker方程,其中的rx为自相关函数。由方程可以看出,一个p阶的AR模型有p+1个参数()。

通过推导可以发现,AR模型与线性预测器是等价的,AR模型是在最小平方意义上对数据的拟合。

2. AR模型参数求解——Levinson-Durbin Algorithm

定义为p阶AR模型在m阶次时的第k个系数,k=1,2,...,m。定义为m阶系统时的,这也是线性预测器中前向预测的最小误差功率。此时,一阶AR模型时有

我们定义初始时,则

由PART1中矩阵的对称性质,将上面的公式推广到高阶AR模型,可以推导出Levinson-Durbin递推算法

Levinson-Durbin递推算法从低阶开始递推,,给出了每一阶次时所有参数,。这一特点有利于我们选择合适的AR模型阶次。

因为必须大于0,由式,如果,递推应该停止。

到此,选择最佳阶次的参数代入到中,求得功率谱。

3. matlab实现

matlab工具箱中提供了现成的函数实现AR模型功率谱计算。参考[2],我们将内容摘录如下:

AR模型的谱估计是现代谱估计的主要内容。

1.AR模型的Yule—Walker方程和Levinson-Durbin递推算法:在MATLAB中,函数levinson和aryule都采用Levinson-Durbin递推算法来求解AR模型的参数a1,a2,……,ap及白噪声序列的方差,只是两者的输入参数不同,它们的格式为:

A=LEVINSON(R,ORDER) A=ARYULE(x,ORDER)

两函数均为定阶ORDER的求解,但是函数levinson的输入参数要求是序列的自相关函数,而函数aryule的输入参数为采样序列。

下面语句说明函数levinson和函数aryule的功能是相同的:

例子:

randn('seed',0)

a=[1 0.1 0.2 0.3 0.4 0.5];

x=impz(1,a,20)+randn(20,1)/20;

r=xcorr(x,'biased');

r(1:length(x)-1)=[];

A=levinson(r,5)

B=aryule(x,5)

2.Burg算法:

格式为:A=ARBURG(x,ORDER); 其中x为有限长序列,参数ORDER用于指定AR模型的阶数。以上面的例子为例:

randn('seed',0)

a=[1 0.1 0.2 0.3 0.4 0.5];

x=impz(1,a,20)+randn(20,1)/20;

A=arburg(x,5)

3.改进的协方差法:

格式为:A=ARMCOV(x,ORDER); 该函数用来计算有限长序列x(n)的ORDER阶AR模型的参数。例如:输入下面语句:

randn('seed',0)

a=[1 0.1 0.2 0.3 0.4 0.5];

x=impz(1,a,20)+randn(20,1)/20;

A=armcov(x,5)

AR模型阶数P的选择:

AR模型阶数P一般事先是不知道的,需要事先选定一个较大的值,在递推的过程中确定。在使用Levinson—Durbin递推方法时,可以给出由低阶到高阶的每一组参数,且模型的最小预测误差功率Pmin(相当于白噪声序列的方差)是递减的。直观上讲,当预测误差功率P达到指定的希望值时,或是不再发生变化时,这时的阶数即是应选的正确阶数。

因为预测误差功率P是单调下降的,因此,该值降到多少才合适,往往不好选择。比较常见的准则是:

最终预测误差准则:FPE(r)=Pr{[N+(r+1)]/ [N-(r+1)]}

信息论准则:AIC(r)=N*log(Pr)+2*r

上面的N为有限长序列x(n)的长度,当阶数r由1增加时,FPE(r) 和AIC(r)都将在某一r处取得极小值。将此时的r定为最合适的阶数p。

MATLAB中AR模型的谱估计的函数说明:

1. Pyulear函数:

功能:利用Yule--Walker方法进行功率谱估计.

格式: Pxx=Pyulear(x,ORDER,NFFT)

[Pxx,W]=Pyulear(x,ORDER,NFFT)

[Pxx,W]=Pyulear(x,ORDER,NFFT,Fs)

Pyulear(x,ORDER,NFFT,Fs,RANGE,MAGUNITS)

说明:Pxx =Pyulear(x,ORDER,NFFT)中,采用Yule--Walker方法估计序列x的功率谱,参数ORDER用来指定AR模型的阶数,NFFT为FFT算法的长度,默认值为256,若NFFT为偶数,则Pxx为(NFFT/2 + 1)维的列矢量,若NFFT为奇数,则Pxx为(NFFT + 1)/2维的列矢量;当x为复数时,Pxx长度为NFFT。

[Pxx,W]=Pyulear(x,ORDER,NFFT)中,返回一个频率向量W.

[Pxx,W]=Pyulear(x,ORDER,NFFT,Fs)中,可以在F向量得到功率谱估计的频率点,Fs指定采样频率。

Pyulear(x,ORDER,NFFT,Fs,RANGE,MAGUNITS)中,直接画出功率谱估计的曲线图。

2. Pburg函数:

功能:利用Burg方法进行功率谱估计。

格式:Pxx=Pburg(x,ORDER,NFFT)

[Pxx,W]=Pburg(x,ORDER,NFFT)

[Pxx,W]=Pburg(x,ORDER,NFFT,Fs)

Pburg(x,ORDER,NFFT,Fs,RANGE,MAGUNITS)

说明:Pburg函数与Pyulear函数格式相同,只是计算AR模型时所采用的方法不同,因此格式可以参照Pyulear函数。

3. Pcov函数:

功能:利用协方差方法进行功率谱估计。

格式:Pxx=Pcov(x,ORDER,NFFT)

[Pxx,W]=Pcov(x,ORDER,NFFT)

[Pxx,W]=Pcov(x,ORDER,NFFT,Fs)

Pcov(x,ORDER,NFFT,Fs,RANGE,MAGUNITS)

说明:Pcov函数采用协方差法估计AR模型的参数,然后计算序列x的功率谱。协方差法与改进的协方差法相比,前者仅令前向预测误差为最小,其他步骤是一样的。:Pcov函数与Pyulear函数格式相同,只是计算AR模型时所采用的方法不同,因此格式可以参照Pyulear函数.

4.Pmcov:

功能:利用改进的协方差方法进行功率谱估计。

格式:Pxx=Pmcov(x,ORDER,NFFT)

[Pxx,W]=Pmcov(x,ORDER,NFFT)

[Pxx,W]=Pmcov(x,ORDER,NFFT,Fs)

Pmcov(x,ORDER,NFFT,Fs,RANGE,MAGUNITS)

例如:输入下面语句:

figure 8.10--8.11

Fs=1000; %采样频率

n=0:1/Fs:3;

xn=cos(2*pi*n*200)+randn(size(n));

%设置参数

order=20;

nfft=1024;

%Yule-Walker方法

figure(1)

pyulear(xn,order,nfft,Fs);

%Burg方法

figure(2)

pburg(xn,order,nfft,Fs);

%协方差法

figure(3)

pcov(xn,order,nfft,Fs);

%改进协方差方法

figure(4)

pmcov(xn,order,nfft,Fs);

AR谱的分辨率:

经典谱估计的分辨率反比与信号的有效长度,但是现代谱估计的分辨率可以不受此限制. 这是因为对于给定的N点有限长序列x(n),虽然其估计出的相关函数也是有限长的,但是现代谱估计的一些方法隐含着数据和自相关函数的外推,使其可能的长度超过给定的长度,因而AR谱的分辨率较高。

例如:序列x(n)由两个正铉信号组成,其频率分别为f1=20Hz和f2=21Hz,并含有一定的噪声量。试分别用周期图法,Burg方法与改进的协方差法估计信号的功率谱,且AR模型的阶数取30和50两种情况讨论。

上面的例子可以通过下面程序实现:

Fs=200;

n=0:1/Fs:1;

xn=sin(2*pi*20*n)+sin(2*pi*21*n)+0.1*randn(size(n));

window=boxcar(length(xn));

nfft=512;

[Pxx,f]=periodogram(xn,window,nfft,Fs);

figure(1)

plot(f,10*log10(Pxx)),grid

xlabel('Frequency(Hz)')

ylabel('Power Spectral Density(dB/Hz)')

title('Periodogram PSD Estimate')

order1=30;

order2=50;

figure(2)

pburg(xn,order1,nfft,Fs)

figure(3)

pburg(xn,order2,nfft,Fs)

figure(4)

pmcov(xn,order1,nfft,Fs)

figure(5)

pmcov(xn,order1,nfft)

LMS自适应滤波器是使滤波器的输出信号与期望响应之间的误差的均方值为最小,因此称为最小均方(LMS)自适应滤波器。其原理及推导见http://download.csdn.net/source/432206

function [yn,W,en]=LMS(xn,dn,M,mu,itr)
% LMS(Least Mean Squre)算法
% 输入参数:
% xn 输入的信号序列 (列向量)
% dn 所期望的响应序列 (列向量)
% M 滤波器的阶数 (标量)
% mu 收敛因子(步长) (标量) 要求大于0,小于xn的相关矩阵最大特征值的倒数
% itr 迭代次数 (标量) 默认为xn的长度,M<itr<length(xn)
% 输出参数:
% W 滤波器的权值矩阵 (矩阵)
% 大小为M x itr,
% en 误差序列(itr x 1) (列向量)
% yn 实际输出序列 (列向量) % 参数个数必须为4个或5个
if nargin == 4 % 4个时递归迭代的次数为xn的长度
itr = length(xn);
elseif nargin == 5 % 5个时满足M<itr<length(xn)
if itr>length(xn) | itr<M
error('迭代次数过大或过小!');
end
else
error('请检查输入参数的个数!');
end % 初始化参数
en = zeros(itr,1); % 误差序列,en(k)表示第k次迭代时预期输出与实际输入的误差
W = zeros(M,itr); % 每一行代表一个加权参量,每一列代表-次迭代,初始为0 % 迭代计算
for k = M:itr % 第k次迭代
x = xn(k:-1:k-M+1); % 滤波器M个抽头的输入
y = W(:,k-1).' * x; % 滤波器的输出
en(k) = dn(k) - y ; % 第k次迭代的误差 % 滤波器权值计算的迭代式
W(:,k) = W(:,k-1) + 2*mu*en(k)*x;
end % 求最优时滤波器的输出序列
yn = inf * ones(size(xn));
for k = M:length(xn)
x = xn(k:-1:k-M+1);
yn(k) = W(:,end).'* x;
end

LMS函数的一个实例:

%function main()
close all % 周期信号的产生
t=0:99;
xs=10*sin(0.5*t);
figure;
subplot(2,1,1);
plot(t,xs);grid;
ylabel('幅值');
title('it{输入周期性信号}'); % 噪声信号的产生
randn('state',sum(100*clock));
xn=randn(1,100);
subplot(2,1,2);
plot(t,xn);grid;
ylabel('幅值');
xlabel('时间');
title('it{随机噪声信号}'); % 信号滤波
xn = xs+xn;
xn = xn.' ; % 输入信号序列
dn = xs.' ; % 预期结果序列
M = 20 ; % 滤波器的阶数 rho_max = max(eig(xn*xn.')); % 输入信号相关矩阵的最大特征值
mu = rand()*(1/rho_max) ; % 收敛因子 0 < mu < 1/rho [yn,W,en] = LMS(xn,dn,M,mu); % 绘制滤波器输入信号
figure;
subplot(2,1,1);
plot(t,xn);grid;
ylabel('幅值');
xlabel('时间');
title('it{滤波器输入信号}'); % 绘制自适应滤波器输出信号
subplot(2,1,2);
plot(t,yn);grid;
ylabel('幅值');
xlabel('时间');
title('it{自适应滤波器输出信号}'); % 绘制自适应滤波器输出信号,预期输出信号和两者的误差
figure
plot(t,yn,'b',t,dn,'g',t,dn-yn,'r');grid;
legend('自适应滤波器输出','预期输出','误差');
ylabel('幅值');
xlabel('时间');
title('it{自适应滤波器}');

参考:现代数字信号处理——AR模型

LMS算法MatLab实现

现代数字信号处理——AR模型的更多相关文章

  1. 数字信号处理--FFT与蝶形算法

    在数字信号处理中常常需要用到离散傅立叶变换(DFT),以获取信号的频域特征.尽管传统的DFT算法能够获取信号频域特征,但是算法计算量大,耗时长,不利于计算机实时对信号进行处理.因此至DFT被发现以来, ...

  2. 数字信号处理与音频处理(使用Audition)

    前一阵子由于考博学习须要,看了<数字信号处理>,之前一直不清除这门课的理论在哪里应用比較广泛. 这次正巧用Audition处理了一段音频,猛然发现<数字信号处理>这门课还是很实 ...

  3. 数字信号处理MATLAB简单序列

    数字信号处理应用的几个基本序列: 1 单位样本序列 function mainImseq() clc clear disp('生成抽样序列'); y=imseq(,,); %调用样本函数,此时序列下标 ...

  4. FPGA与数字信号处理

    过去十几年,通信与多媒体技术的快速发展极大地扩展了数字信号处理(DSP)的应用范围.眼下正在发生的是,以更高的速度和更低的成本实现越来越复杂的算法,这是针对高级信息服更高带宽以及增强的多媒体处理能力等 ...

  5. 数字信号处理专题(3)——FFT运算初探

    一.前言 FFT运算是目前最常用的信号频谱分析算法.在本科学习数字信号处理这门课时一直在想:学这些东西有啥用?公式推来推去的,有实用价值么?到了研究生后期才知道,广义上的数字信号处理无处不在:手机等各 ...

  6. 数字信号处理专题(1)——DDS函数发生器环路Demo

    一.前言 会FPGA硬件描述语言.设计思想和接口协议,掌握些基本的算法是非常重要的,因此开设本专题探讨些基于AD DA数字信号处理系统的一些简单算法,在数字通信 信号分析与检测等领域都会或多或少有应用 ...

  7. AR模型与数据平稳性之间的关系

    作者:桂. 时间:2017-12-19  21:39:08 链接:http://www.cnblogs.com/xingshansi/p/8068021.html 前言 前几天碰到一个序列分析的问题, ...

  8. yii2 AR模型使用exists添加子查询与父查询关联

    有A,B两个表对应A_AR,B_AR两个模型B表interval_id对应A表id现在要查a表的数据,且没有code为a的子数据要求使用yii2的AR模型写查询: A_AR::find()->w ...

  9. AR模型脱卡,unity端实现步骤详情

    AR模型脱卡unity端实现具体步骤 AR模型脱卡的原理 利用一些unity端AR插件做AR应用.通常会有一个需求,当识别物消失的时候,将3D模型从识别物这个父物体上移除,显示在屏幕中央.那么原理就显 ...

随机推荐

  1. [转] 彻底搞懂word-break、word-wrap、white-space

    white-space.word-break.word-wrap(overflow-wrap)估计是css里最基本又最让人迷惑的三个属性了,我也是用了n次都经常搞混,必须系统整理一下,今天我们就把这三 ...

  2. mysql 对时间的处理

    引自: @author:http://www.cnblogs.com/geaozhang/ 可能的需求: 当前时间是多少.下个月的今天是星期几.统计截止到当前日期前 3 天的收入总和…… 上述需求就需 ...

  3. (转)React 入门实例教程

    作者: 阮一峰 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React ...

  4. 如何解决自定义404页面在IE等浏览器中无法显示问题

    网站设置自定义404页面之后(如何在IIS下正确设置404页面?),如无法在浏览器中正常显示,可能是以下原因: 1.404页面文件权限设置错误 我们需要为404页面文件添加上用户everyone的可读 ...

  5. ip 核生成 rom 及questasim仿真时需要注意的问题

    IP 核生成 ROM 步骤1:Tools --> MegaWizard Plug-In Manager 步骤2:Create a new custom megafuction variation ...

  6. [译]__main__ 顶级脚本环境

    'main'是其中顶级代码执行的范围的名称.一个模块的__name__可以从标准输入,脚本,或从一个交互式命令行中等方式被设置成等于'main'. 一个模块可以发现它是否是通过检查自身在主运行范围__ ...

  7. sql语句执行时算术运算导致溢出。

    执行sql语句时报错: 用户代码未处理 System.OverflowException HResult=-2146233066 Message=算术运算导致溢出. 文章:https://bbs.cs ...

  8. 【bzoj2400】Spoj 839 Optimal Marks 网络流最小割

    题目描述 定义无向图中的一条边的值为:这条边连接的两个点的值的异或值. 定义一个无向图的值为:这个无向图所有边的值的和. 给你一个有n个结点m条边的无向图.其中的一些点的值是给定的,而其余的点的值由你 ...

  9. css的部分应用示例

    CSS :层叠样式表,Cascading Style Sheets.CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化. 1 vertical-align 在图片与文字对 ...

  10. 【BZOJ3529】【SDOI2014】数表 (莫比乌斯反演+树状数组)

    传送门 Description 有一张$n\times m$的数表,其第$i$行第$j$列 $(1≤i≤n,1≤j≤m)$ 的数值为能同时整除$i$和$j$的所有自然数之和.现在给定$a$,计算数表中 ...