现代法谱估计(2)Levinson-Durbin递推算法MATLAB及Python实现

9 篇文章 13 订阅
7 篇文章 5 订阅

原理

Levinson-Durbin递推算法是解Yule Walker方程的快速有效的算法,Yule Walker方程是p+1元线性方程组,它的一般解法是矩阵求逆或高斯消去法。通常都尽量避免使用矩阵求逆运算,因为它的运算量较大。如果利用高斯消去法直接求解线性方程组,其运算级约在p3数量级,而运用Levinson Durbin算法,可以将运算量减少到p2。
Levinson-Durbin算法是从一阶开始,由p-1阶模型的递推求解p阶模型的参数。用 ap(i)表示递推过程中在阶次为p时AR模型的第i个系数,i=1,2,…,p。G^2表示预测误差功率。将此功率用ρ表示,令 =ρ。再用ρp表示p阶预测时的最小预测误差功率,显然
在这里插入图片描述
该式很容易理解,因为零阶预测就相当于信号直通过去,所以信号功率有多大,预测误差功率就是多大。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从上式可以看出,用Levinson-Durbin算法求解AR参数的关键,是自相关函数序列的估计。为保证自相关函数的估计较准确,往往需要较多的样本数据,所以,在短记录的情况下,用Levinson-Durbin算法求解AR参数效果较差。反射系数相当于功率传输到终端接不匹配二端网络时所引起的功率反射程度。

程序和结果

(出于维护版权原因,此处只放截图)
MATLAB
程序:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
结果:
在这里插入图片描述
在这里插入图片描述
Python
程序:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
结果:
在这里插入图片描述
在这里插入图片描述

分析

由上图可见,我给程序输入的N为256,取的阶数p为128,信号中f1=0.1,f2=0.13,在图中我们可以看到对应的位置出现了峰值,由于给定幅度大小不同,故峰值大小有很大差别。w的范围是0到π弧度,也即用freqz函数求出的频率响应只有0到π部分。由于h是复频率响应矢量,因此要求其功率谱要对频率响应求模平方。利用寻峰函数findpeaks来得出峰值对应的横坐标(Python中是自己写了一个寻峰估计频率的方法),程序中将所有的峰值及其索引分别放入到两个数组中,且根据峰值大小降序排列,确定最大的两个峰值和其索引位置,然后由索引位置除以2N (freqz函数得出的是单位圆上半部分,频率范围对应为0-0.5,而对应的序列长度为N,因此根据比例关系可知,索引值/N=频率值/0.5也即,频率值=索引值/2N)。

(因原博客是以word形式写的,公式是用Mathtype打出来的,故部分地方直接采用了截图形式)
下载链接:
现代法功率谱估计及MSE随SNR曲线

  • 28
    点赞
  • 171
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值