莱文森
莱文森-德宾递归。
库::`工程师`
例子:
自回归过程的系数
Details
我们将生成表达式给出的自回归过程的系数
import EngeeDSP.Functions: randn,filter,xcorr,levinson
a = [1 0.1 -0.8 -0.27]
让我们通过滤除具有方差的白噪声来生成该过程的实现。 0.4.
v = 0.4
w = sqrt(v)*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) * 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="")

多个实现的预测误差
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[:])' .* 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;;]