用void calRound(float r,float*l,float*s) 求解圆的周长和面积

本文目标:分析AR模型并求解AR模型嘚输出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模型是在最小平方意义上对数据的拟合

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

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

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

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

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

matlab工具箱中提供了现成的函数实现AR模型功率谱计算参考

,我们将内容摘录如下:

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

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

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

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

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

AR模型阶数P的选择:

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

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

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

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

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

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

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

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

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

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

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

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

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


上面的实例中给定输入信号为余弦信号采样点数为1024个点,通过计算后的功率谱通过mpsplot函数保存到文本文件output.txt中保存格式如下:

最后借助matlab读取该文件,绘制出功率谱的图形

关于上面的C程序这里只提与主题无关的,double guass_rand(void)是C语訁中典型的生成高斯分布随机数的发生器这里用于在余弦函数上加上一个高斯的噪声。关于更多的随机数生成器可参考我将该博文,感谢作者

[1] 胡广书《数字信号处理——理论、算法与实现 第二版》

更详细,更正确经过验证整理的代码参考

我要回帖

 

随机推荐