AnyMath 文档

雷文森

Levinson-Durbin逆递归。

库::`工程师`

语法

函数调用

争论

输入参数

# 一个 — 预测滤波器的系数

+ 向量资料

Details

预测滤波器的系数,设为矢量。

与…​…​相关联的过滤器 a,必须具有最小相位才能生成有效的自相关序列 [参数:r].

如果 a 没有最小相位,功能 雷文森 它可以返回值 资讯 即使存在解决方案。

数据类型

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

# eFinal — 最终预测误差的功率

+ 标量,标量

Details

最终预测误差的功率,作为标量给出。

数据类型

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

输出参数

# *r*是 自相关序列

+ 列向量

Details

作为列向量返回的自相关序列,其元素数与向量中的元素数相同 [参数:a].

# *u*是 递归预测滤波器的多项式矩阵

+ 矩阵

Details

作为方阵返回的递归预测滤波器的多项式矩阵,其行数和列数等于元素数。 [参数:a].

# k — 反射系数

+ 列向量

Details

作为长度的列向量返回的反射系数列表 ,在哪里 -矢量元素的数量 [参数:a].

# eEvolution — 递归预测误差

+ 向量字符串

Details

来自Levinson-Durbin逆递归的每次迭代的递归预测错误列表,作为长度的字符串向量返回 ,在哪里 -矢量元素的数量 [参数:a].

例子:

自回归模型的最优阶数

Details

让我们使用自回归模型估计具有附加噪声的两个正弦波的频谱。 让我们从Levinson—Durbin逆递归返回的模型组中选择最佳模型顺序。

产生具有频率的信号 50000 数数。 设置采样频率 1 kHz和信号持续时间 50 几秒钟。 正弦波有频率 50 Hz和 55 赫兹。 噪声色散为 (0.2)2.

import EngeeDSP.Functions: rlevinson
using Random

Random.seed!(42)

Ns = 50_000
Fs = 1000
t = range(0, step=1/Fs, length=Ns)


x = sin.(2π * 50 * t) + sin.(2π * 55 * t) + 0.2 * randn(Ns)

让我们使用具有阶数的模型来估计自回归模型的参数 100.

ar,eFinal = arcov(x,100)

我们使用Levinson—Durbin逆递归求解模型来估计自相关序列,递归预测滤波器,反射系数和预测误差。

r,u,k,eEvol=rlevinson(ar,eFinal)

让我们绘制预测误差。 为最终误差的功率添加水平线。 误差随着滤波器阶数的增加而减小,直到达到最终误差的功率。

rlevinson 1

让我们估计几个数量级的频谱功率密度(SPM) 1, 5, 25, 50100. 让我们估计初始自回归参数的SPM。

N = [1, 5, 25, 50, 100]
nFFT = 8096
psdARpred = zeros(nFFT, 5)


for idx in 1:length(N)
    order = N[idx]
    ARpred = reverse(u[:, order], dims=1)
    psdARpred[:, idx] = 1 ./ abs.(fft(ARpred, nFFT)).^2
end


psdAR = 1 ./ abs.(fft(ar, nFFT)).^2

让我们建立一个SPM估计图。 随着滤波器阶数的增加,预测滤波器的SPM估计值逐渐接近初始自回归参数。

F = (0:1/nFFT:1/2-1/nFFT) * Fs
pow2db(x) = 10 * log10.(x)

plot(F, pow2db.(psdARpred[1:end÷2, :]),
     xlabel = "Frequency (Hz)",
     ylabel = "Power (dB/Hz)",
     grid = true,
     legend = :best,
     xlims = (35, 70))


plot!(F, pow2db.(psdAR[1:end÷2]),
      linestyle = :dash,
      linecolor = :black,
      label = "Original AR")

order_labels = ["Order = $n" for n in N]

push!(order_labels, "Original AR")


plot!(serieslegend = order_labels)

display(current())

rlevinson 2

算法

Levinson-Durbin逆递归实现了一种分步算法,用于求解线性Toeplitz方程的对称系统。

哪里 , ,和符号 表示复共轭。

在线性预测应用中:

*向量 它是预测滤波器的输入数据的自相关序列,其中 -具有零延迟的元件。 温室基质 —这是一个自相关矩阵:

+

*向量 度降序表示预测滤波器多项式的系数 .

*标量值 指示预测滤波器的顺序。

该图显示了这种类型的典型滤波器,其中 -最优线性预测器, -输入信号, -预测信号,以及 -预测误差信号。 预测误差的方差 -预测误差的标量功率。

rlevinson cn

功能 雷文森 求解该方程组以计算自相关序列 [参数:r],具有向量 [参数:a] 用预测滤波器的系数。 滤波器必须是最小相位才能生成有效的自相关序列。 标量,标量 [参数:eFinal] 表示最终预测误差的功率 它往往是评估Levinson—Durbin递归的目标错误,该函数实现了该递归。 雷文森.

来获取输出数据 [参数:u], [参数:k][参数:eEvolution] 功能 雷文森 它还执行分解 逆自相关矩阵 . 此分解可解析矩阵 并且它允许您有效地计算逆自相关矩阵。 :

输出参数 [参数:u] 返回矩阵 . 该矩阵包含预测滤波器的递归多项式 从Levinson-Durbin逆递归的每次迭代:

每个向量 包含多项式的递归系数,其中 预测滤波器多项式的-th系数 -顺序(即, -递归的第三步)。 例如,预测滤波器多项式的系数 第-阶可以得到为 ,在哪里 a5=u[5:-1:1,5],而这个向量是多项式 . 因此, -第列 包含输入多项式的系数向量 [参数:a],其可以使用获得 (u[p+1:-1:1,p+1])'.

输出参数 [参数:k] 返回具有与第一行中的非对角线元素共轭的反射系数的列向量。 . 换句话说, [参数:k] 返回为 (u[1,2:end])':

输出参数 [参数:eEvolution] 返回具有从矩阵对角线获得的递归预测误差的向量字符串 ,除了第一个元素:



每个元素 枚举预测滤波器多项式的递归预测 -顺序(即, -递归中的第一步)。 例如,预测滤波器多项式的预测误差 第-阶可以得到为 e5=eEvolution(4) 这是使用多项式时的预测错误 作为预测滤波器。

*对角线上的第一个元素 , ,与自相关序列的第一个元素重合 , .

文学作品

  1. Kay,Steven M. _Modern Spectral Estimation:Theory and Application。_恩格尔伍悬崖,NJ:普伦蒂斯-霍尔,1988.