参数化建模

什么是参数化建模

参数化建模技术为描述信号、系统或过程的数学模型找到参数。这些技术使用关于系统的已知信息来确定模型。参数化建模的应用包括语音和音乐合成、数据压缩、高分辨率光谱估计、通信、制造和仿真。

可用的参数化建模函数

工具箱参数化建模函数与有理传递函数模型一起操作。给定关于未知系统的适当信息(脉冲或频率响应数据,或输入和输出序列),这些函数可以找到对系统建模的线性系统的系数。

参数化建模函数的一个重要应用是设计具有规定时间或频率响应的滤波器。

下面是这个工具箱中的参数化建模函数的摘要。

功能

描述

时间

arburg

使用Levinson-Durbin算法生成建模输入数据序列的全极滤波器系数。

arcov

通过最小化前向预测误差,生成对输入数据序列建模的全极滤波器系数。

armcov

通过最小化正向和反向预测误差,生成对输入数据序列建模的全极滤波器系数。

aryule

使用自相关函数的估计生成对输入数据序列建模的全极滤波器系数。

lpc的莱文森

线性预测编码。生成脉冲响应匹配给定序列的全极递归滤波器。

普龙尼

生成脉冲响应匹配给定序列的IIR滤波器。

stmcb

在给定输入序列的情况下,寻找其输出与给定输出序列匹配的IIR过滤器。

频率

invfreqzinvfreqs

给出复杂频率响应数据,生成数字或模拟滤波器系数。

基于时域的建模

lpc的普龙尼,stmcb函数求近似给定时域脉冲响应的数字有理传递函数的系数。这些算法在结果模型的复杂性和准确性上有所不同。

线性预测

线性预测模型假设信号的每个输出样本,x (k),是过去的线性组合n输出(也就是说,它可以从这些输出中线性预测),并且各个样本的系数是常数:

一个n信号的th阶全极模型x

A = lpc(x,n)

为了说明lpc的,创建一个样本信号,该样本信号是加性白噪声的全极滤波器的脉冲响应:

x = impz(1、1 0.1 0.1 0.1 0.1,10)+ randn (10 - 1) / 10;

对系统建模的四阶全极滤波器的系数为

A = lpc(x,4)

lpc的第一次调用xcorr的相关函数的偏估计x,然后使用Levinson-Durbin递归,在莱文森函数,求模型系数一个.Levinson-Durbin递归是求解对称Toeplitz线性方程组的一种快速算法。lpc的的整个算法n4

R = xcorr(x);R(1:长度(x)-1) = [];在负滞后时去除corr. a = levinson(r,4)

您可以通过传递不同的相关估计与其他假设形成线性预测系数莱文森,如偏相关估计:

R = xcorr(x,'偏置');R(1:长度(x)-1) = [];在负滞后时去除corr. a = levinson(r,4)

普罗尼方法(ARMA建模)

普龙尼函数使用指定数量的极点和零对信号建模。给定一个序列x分子和分母的顺序n而且,分别声明

[b,a] = prony(x,n,m)

找出脉冲响应近似序列的IIR滤波器的分子和分母系数x

普龙尼函数实现中描述的方法[4]帕克斯和布鲁斯(pg。226 - 228)。该方法使用AR建模的协方差方法的变体来寻找分母系数一个,然后求分子系数b结果滤波器的脉冲响应与第一个完全匹配n+1的样本x.该滤波器不一定是稳定的,但如果数据序列确实是一个正确顺序的自回归移动平均(ARMA)过程,它就有可能准确地恢复系数。

请注意

的函数普龙尼而且stmcb(下面描述)在系统识别术语中更准确地描述为ARX模型。ARMA建模只在输入端假设噪声,而ARX假设外部输入。普龙尼而且stmcb知道输入信号:它是一个脉冲普龙尼并且是任意的stmcb

测试序列的模型x(从早期lpc的例)使用三阶IIR滤波器

[b,a] = prony(x,3,3)

impz命令显示该滤波器的脉冲响应与原始序列的匹配程度:

格式为long [x impz(b,a,10)]

注意,前四个样本完全匹配。举个精确恢复的例子,从脉冲响应中恢复巴特沃斯滤波器的系数:

[b,a] =黄油(4,.2);H = impz(b,a,26);[bb,aa] = prony(h,4,4);

试试这个例子;你会看到的bb而且aa将原始滤波器系数匹配到10的公差范围内-13年

Steiglitz-McBride方法(ARMA建模)

stmcb函数决定了系统的系数bz) /一个z)给出近似的脉冲响应x,以及所需的零和极点数。这个函数基于描述系统行为的输入和输出序列,或者仅仅是系统的脉冲响应,来识别一个未知系统。在默认模式下,stmcb就像普龙尼

[b,a] = stmcb(x,3,3)

stmcb还可以找到匹配给定输入和输出序列的系统:

Y = filter(1,[1 1],x);创建一个输出信号。[b,a] = stmcb(y,x,0,1)

在这个例子中,stmcb正确标识用于创建的系统yx

Steiglitz-McBride方法是一种快速迭代算法,同时求解分子和分母系数,试图最小化滤波器输出和给定输出信号之间的信号误差。该算法收敛速度快,但如果模型阶数太大,则可能无法收敛。至于普龙尼stmcb的结果滤波器并不一定是稳定的,由于其精确的建模方法。

stmcb提供对几个重要算法参数的控制;如果在建模数据时遇到困难,请修改这些参数。要更改默认的5次迭代次数,并提供分母系数的初始估计:

N = 10;%迭代次数a = lpc(x,3);%分母[b,a] = stmcb(x,3,3,n,a)的初始估计值;

该函数使用创建的全极模型普龙尼作为一个初步估计,当你没有提供一个自己的。

比较函数lpc的普龙尼,stmcb,计算每种情况下的信号误差:

A1 = lpc(x,3);[b2,a2] = prony(x,3,3);[b3,a3] = stmcb(x,3,3);[x-impz (1 a1 10) x-impz (b2, a2, 10) x-impz (b3, a3, 10))

在比较给定顺序IIR模型的建模能力时,最后的结果表明,对于本例,stmcb表现最好,其次是普龙尼,然后lpc的.这种相对性能是典型的建模函数。

基于频域的建模

invfreqs而且invfreqz函数实现的逆运算频率而且freqz;他们找到一个特定顺序的模拟或数字传递函数,与给定的复杂频率响应相匹配。下面的例子可以说明invfreqz,讨论也适用于invfreqs

从简单数字滤波器的频率响应中恢复原始滤波器系数:

[b,a] =黄油(4,0.4)%巴特沃斯低通设计[h,w] = freqz(b,a,64);计算频率响应[b4,a4] = invfreqz(h,w,4,4)型号:n = 4, m = 4

频率向量w单位为rad/sample,频率不需要等距。invfreqz找到任意顺序的滤波器来拟合频率数据;一个三阶的例子是

[b4,a4] = invfreqz(h,w,3,3)找到三阶IIR

这两个invfreqs而且invfreqz设计具有实系数的滤波器;对于正频率的数据点f时,函数拟合两者的频响f而且- f

默认情况下invfreqz采用方程误差法从数据中确定最佳模型。这个发现b而且一个

通过创建一个线性方程组并用MATLAB求解®操作符。在这里一个wk)),Bwk)为多项式的傅里叶变换一个而且b分别在频率处wk),n频率点的个数(长度h而且w).wtk)加权误差相对于不同频率下的误差。的语法

invfreqz (h, w, n, m, wt)

包含一个权重向量。在此模式下,产生的过滤器invfreqz并不能保证稳定。

invfreqz提供了一种更好的(“输出误差”)算法,解决了将实际频率响应点与期望响应之间的误差平方和的加权和最小化的直接问题

要使用这个算法,在权重向量参数之后指定一个迭代计数参数:

Wt = ones(size(w));创建单位权重向量[b30,a30] = invfreqz(h,w,3,3,wt,30)% 30次迭代

得到的过滤器总是稳定的。

用FVTool将第一和第二算法的结果与原始巴特沃斯滤波器进行图形化比较(并选择幅度和相位响应):

fvtool (b, a, b4, a4 b30,故事本来)

要从数值上验证配合的优越性,请键入

总和(abs (h-freqz (b4, a4, w)) ^ 2)。%总误差,算法1总和(abs (h-freqz (b30故事本来w)) ^ 2)。%总误差,算法2