AnyMath 文档

莱文森

莱文森-德宾递归。

库::`工程师`

语法

函数调用

* [参数:a],[参数:e],[参数:k]=莱文森(<参数:r>>,[参数:n]) -返回阶的线性自回归过程的系数 [参数:n],其自相关序列为 [参数:r]. 它还返回预测误差。 [参数:e] 和反射系数 [参数:k].

争论

输入参数

# *r*是 自相关序列

+ 向量资料 | 矩阵

Details

定义为向量或矩阵的自相关序列。 如果 r 是一个矩阵,那么函数找到每列的系数 r 并以字符串形式返回它们 [参数:a].

数据类型

漂浮物32 | 漂浮64</无翻译> 支持复数::是

# *n*是 模型的顺序

+ 长度(r)-1 (默认)| 正整数标量

Details

模型的阶数,给定为正整数标量。

数据类型

漂浮物32 | 漂浮64</无翻译>

输出参数

# *一个* — 线性自回归过程的系数

+ 向量字符串 | 矩阵

Details

线性自回归过程的系数,作为行向量或矩阵返回。 度的降序对滤波器系数进行排序 :

如果 [参数:r] -矩阵,然后每行 a 对应于列 [参数:r].

# *e* — 预测误差

+ 标量,标量 | 列向量

Details

作为标量或列向量返回的预测误差。 如果 [参数:r] -矩阵,然后为每个元素 e 对应于列 [参数:r].

# *k* — 反射系数

+ 列向量 | 矩阵

Details

反射系数作为长度的列向量返回 [参数:n]. 如果 [参数:r] -矩阵,然后为每列 k 对应于列 [参数:r].

论点 k 在计算期间在矩阵内部计算 [参数:a] 系数,因此同时返回 k 比转换更有效率 [参数:a]k 使用函数 *tf2latc*.

例子:

自回归过程的系数

Details

我们将生成表达式给出的自回归过程的系数

import EngeeDSP.Functions: randn,filter,xcorr,levinson

a = [1 0.1 -0.8 -0.27]

让我们通过滤除具有方差的白噪声来生成该过程的实现。 0.4.

v = 0.4
w = sqrt(v)&ast;randn(15000,1)
x = filter(1,a,w)

让我们来评估相关函数。 让我们放弃负滞后间隔的相关值。 我们使用Levinson-Durbin递归来估计模型的系数。 让我们确保预测误差对应于输入数据的方差。

r, lg = xcorr(x,"biased")
r = r[lg[:] .>= 0]
ar,e,k = levinson(r,numel(a)-1)
println("ar: ", ar)
println("e: ", e)
ar: [1.0 0.09735638301626465 -0.7977574280493284 -0.2697747348725144]
e: 0.39925318400516796

让我们估计模型的反射系数 16-顺序。 让我们确保唯一的反射系数位于 95 置信边界的%对应于模型的正确顺序。

ar,e,k = levinson(r,16)

stem(1:length(k[:]), k[:],
     marker=:circle,
     markercolor=:blue,
     linecolor=:blue)

conf = sqrt(2) &ast; erfinv(0.95) / sqrt(15000)
x_limits = xlims()

X = [x_limits[1], x_limits[2]]
Y1 = [conf, conf]
Y2 = [-conf, -conf]

plot!(X, Y1, linestyle=:dash, color=:red, label="")
plot!(X, Y2, linestyle=:dash, color=:red, label="")

levinson 1

多个实现的预测误差

Details

我们将生成表达式给出的自回归过程的系数

import EngeeDSP.Functions: randn,filter,xcorr,levinson

a = [1 0.1 -0.8 -0.27]

我们将通过滤除具有不同方差的白噪声来生成五个过程实现。

nr = 5
v = rand(1,nr)
1×5 Matrix{Float64}:
 0.264731  0.244259  0.401966  0.184345  0.070915
w = sqrt.(v[:])' .&ast; randn(15000, nr)
x = filter(1,a,w)

让我们来评估相关函数。 让我们放弃负滞后区间的互相关项和相关值。 我们使用Levinson-Durbin递归来估计正确模型顺序的预测误差,并确保预测误差与输入噪声信号的方差相对应。

r, lg = xcorr(x,"biased")

ar,e,k = levinson(r[lg[:] .>= 0,1:nr+1:end],numel(a)-1)

println("e: ", e)
e: [0.26082618781928835; 0.24091448115262645; 0.40999877779431343; 0.18019545485810384; 0.07090107526341564;;]

算法

Levinson-Durbin递归是一种用于查找具有给定确定性自相关序列的全极点IIR滤波器的算法。 它在滤波器设计、编码和频谱分析中找到应用。 使用的过滤器 *莱文森*,是最小相位滤波器。

功能 *莱文森* 求解对称线性方程组。:

哪里 [参数:r] 是输入自相关向量,并且 表示复共轭 . 输入向量 [参数:r] 它通常是自相关系数的向量,其中是滞后区间 0 是第一个元素 .

如果 [参数:r] 如果没有正确的自相关序列,则函数 *莱文森* 它可以返回值 即使存在解决方案。

该算法需要 操作,因此比操作员更有效率 \ 对于大值 [参数:n]. 但是,功能 *莱文森* 用途 \ 对于低订单,确保尽可能快的执行。

文学作品

  1. Ljung,Lennart。 系统识别:理论为用户. 第二版。 Upper Saddle River,NJ:Prentice Hall,1999。