主要内容

dsp。RLSFilter

使用递归最小二乘(RLS)算法计算输出、误差和系数

描述

dsp。RLSFilter系统对象™使用RLS过滤器实现对输入的每个通道进行过滤。

要过滤输入的每个通道:

  1. 创建dsp。RLSFilter对象并设置其属性。

  2. 使用参数调用对象,就像调用函数一样。

有关系统对象如何工作的详细信息,请参见什么是系统对象?

创建

描述

rlsFilt= dsp。RLSFilter返回一个自适应的RLS过滤系统对象,rlsFilt.这个System对象使用RLS算法计算给定输入和期望信号的过滤输出、滤波器误差和滤波器权重。

例子

rlsFilt= dsp。RLSFilter (len返回一个RLS过滤器系统对象,rlsFilt.该系统对象具有长度属性设置为len

rlsFilt= dsp。RLSFilter (名称,值返回一个RLS过滤器系统对象,其中每个指定属性设置为指定值。将每个属性名用单引号括起来。未指定的属性有默认值。

属性

全部展开

除非另有说明,属性为nontunable,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而释放功能解锁它们。

如果属性为可调,您可以随时更改其值。

有关更改属性值的详细信息,请参见使用系统对象的MATLAB系统设计

可以将用于计算过滤器系数的方法指定为传统的RLS[1][2]户主RLS[3][4]滑动窗口RLS[5][1][2]户主滑动窗口RLS[4],或QR分解[1][2].此属性不可调。

将RLS筛选器系数向量的长度指定为一个标量正整数值。此属性不可调。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

将滑动窗口的宽度指定为大于或等于长度属性值。此属性不可调。

依赖关系

属性仅适用于方法属性设置为滑动窗口RLS户主滑动窗口RLS

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64

将RLS遗忘因子指定为小于或等于1的标量正数值。将此属性值设置为1表示无限内存,同时调整以查找新的筛选器。

可调:是的

数据类型:|

指定FIR自适应滤波器系数的初始值为长度等于的标量或向量长度属性值。

可调:是的

数据类型:|

指定输入信号的逆协方差矩阵的初始值。此属性必须是标量或方阵,且每个维数都等于长度属性值。如果设置了标量值,则InverseCovariance属性初始化为一个对角矩阵,其中对角元素等于该标量值。

可调:是的

依赖关系

属性仅适用于方法属性设置为传统的RLS滑动窗口RLS

数据类型:|

指定输入信号的平方根逆协方差矩阵的初始值。此属性必须是标量或每个维数都等于的方阵长度属性值。如果设置了标量值,则SquareRootInverseCovariance属性初始化为一个对角矩阵,其中对角元素等于该标量值。

可调:是的

依赖关系

属性仅适用于方法属性设置为户主RLS户主滑动窗口RLS

数据类型:|

指定输入信号的平方根协方差矩阵的初始值。此属性必须是标量或每个维数都等于的方阵长度属性值。如果设置了标量值,则SquareRootCovariance属性初始化为具有与标量值相等的对角元素的对角矩阵。

可调:是的

依赖关系

属性仅适用于方法属性设置为QR-decomposition RLS

数据类型:|

指定是否应该锁定过滤器系数值。当您将此属性设置为真正的时,滤波器系数不会更新,其值保持不变。默认值为(过滤器系数不断更新)。

可调:是的

使用

描述

例子

y= rlsFilt (xd递归地适应引用输入,x,以匹配所需的信号,d,使用System对象,rlsFilt.想要的信号,d,是期望信号加上一些不期望的噪声。

ye= rlsFilt(xd显示了RLS滤波器的输出和误差,e,在参考输入和所需信号之间。滤波器自适应其系数直到误差e是最小化。你可以通过访问系数对象的属性。这只能在调用对象之后完成。例如,访问的优化系数rlsFilt过滤器,叫rlsFilt。系数在将输入和所需信号传递给对象之后。

输入参数

全部展开

被RLS滤波器滤波的信号。输入,x,和期望信号,d,必须具有相同的大小和数据类型。

输入可以是一个可变大小的信号。即使对象被锁定,您也可以更改列向量中的元素数量。当您调用该对象以运行其算法时,System对象将锁定。

数据类型:|
复数支持:金宝app是的

RLS滤波器调整其系数以使误差最小化,e,对输入信号进行收敛x到期望的信号d越近越好。

输入,x,和期望信号,d,必须具有相同的大小和数据类型。

想要的信号,d,可以是一个可变大小的信号。即使对象被锁定,您也可以更改列向量中的元素数量。当您调用该对象以运行其算法时,System对象将锁定。

数据类型:|
复数支持:金宝app是的

输出参数

全部展开

过滤后的输出,作为标量或列向量返回。该对象调整其滤波器系数以收敛输入信号x以匹配所需的信号d.滤波器输出收敛信号。

数据类型:|
复数支持:金宝app是的

输出信号之间的差值y以及期望的信号d,作为标量或列向量返回。RLS过滤器的目标是最小化这种误差。该对象调整其系数以收敛于产生与所需信号密切匹配的输出信号的最佳滤波器系数。有关如何操作的详细信息e的计算,请参见算法.要访问RLS过滤器系数,请调用rlsFilt。系数在将输入和所需信号传递给对象之后。

数据类型:|
复数支持:金宝app是的

对象的功能

要使用对象函数,请将System对象指定为第一个输入参数。例如,释放system对象的系统资源obj,使用这种语法:

发行版(obj)

全部展开

msesim 自适应滤波器的估计均方误差
一步 运行系统对象算法
释放 释放资源并允许更改系统对象属性值和输入特征
重置 重置的内部状态系统对象

例子

全部折叠

使用递归最小二乘(RLS)滤波器识别一个用低通FIR滤波器建模的未知系统。比较未知系统和估计系统的频率响应。

请注意:如果您正在使用R2016a或更早的版本,请将对对象的每个调用替换为等效的调用一步语法。例如,obj (x)就变成了步骤(obj, x)

初始化

创建一个dsp。FIRFilter对象,该对象表示要标识的系统。传递信号x到FIR滤波器。未知系统的输出就是期望的信号d,它是未知系统(FIR滤波器)输出和加性噪声信号的和n

Filt = dsp。FIRFilter (“分子”二十五分,fir1(10日));X = randn(1000,1);N = 0.01*randn(1000,1);D = filt(x) + n;

自适应滤波器

创建一个dsp。RLSFilter对象创建RLS过滤器。设置滤镜的长度为11点,遗忘因子为0.98。传递主输入信号x以及期望的信号d到RLS过滤器。输出y自适应滤波器是收敛于期望信号的信号d从而使误差最小化e在两个信号之间。

RLS = dsp。RLSFilter (11,“ForgettingFactor”, 0.98);[y,e] = rls(x,d);w = rls.Coefficients;

绘制结果图

输出信号与所需信号匹配,使两者之间的误差接近于零。

情节(1:1000 [d, y, e]);标题(FIR滤波器的系统识别);传奇(“想要的”“输出”“错误”);包含(“时间指数”);ylabel (的信号值);

图中包含一个轴对象。FIR滤波器的标题为System Identification的axis对象包含3个类型为line的对象。这些对象表示期望、输出、错误。

比较权重

权重向量w表示适应于类似未知系统的RLS滤波器(FIR滤波器)的系数。为了确认收敛性,比较FIR滤波器的分子和RLS滤波器的估计权值。

估计的滤波器权值与实际的滤波器权值非常匹配,确认了前面信号图中看到的结果。

茎([filt.Numerator;w]。');传奇(“实际”“估计”);包含(“系数#”);ylabel (的系数值);

图中包含一个轴对象。axis对象包含2个stem类型的对象。这些对象表示Actual、Estimated。

这个例子演示了使用这里显示的逆系统识别模型的RLS自适应算法。

级联自适应滤波器与未知滤波器导致自适应滤波器收敛到未知系统的逆解。

如果未知系统和自适应滤波器的传递函数为Hz),Gz)时,所测信号与级联系统信号之间的误差达到最小时G (z) × H (z) =1.要使这个关系成立,Gz)必须等于1/H (z),即未知系统传递函数的逆。

为了证明这是正确的,创建一个信号年代输入到级联滤波器对。

S = randn(3000,1);

在级联滤波器的情况下,未知滤波器导致信号在两个滤波器之后到达总和点的延迟。为了防止自适应滤波器试图适应它还没有看到的信号(相当于预测未来),将期望的信号延迟12个样本,这是未知系统的顺序。

一般来说,您不知道您试图识别的系统的顺序。在这种情况下,延迟所需信号的样本数等于自适应滤波器的一半阶数。延迟输入需要提前12个零值样本到输入年代

延迟= 0 (12,1);D =[延迟;s (1:2988)];连接延迟和信号。

你必须保持你想要的信号向量d长度和x,因此调整信号元素计数,以允许延迟样本。

虽然不是一般情况,但对于这个例子,您知道未知滤波器的阶数,所以添加一个等于未知滤波器阶数的延迟。

对于未知系统,使用低通12阶FIR滤波器。

filt = dsp.FIRFilter;filt。分子= fir1(12,0.55,“低”);

过滤年代为自适应算法功能提供输入数据信号。

X = filt(s);

若要使用RLS算法,请创建dsp。RLSFilter对象,并将其长度ForgettingFactor,InitialInverseCovariance属性。

有关准备RLS算法对象的输入条件的详细信息,请参见dsp。RLSFilter

P0 = 2 *眼(13);Lambda = 0.99;RLS = dsp。RLSFilter (13,“ForgettingFactor”λ,...“InitialInverseCovariance”、p0);

本例寻求开发一个逆解,您需要注意哪个信号携带数据,哪个是所需的信号。

较早的自适应滤波器示例使用过滤后的噪声作为所需的信号。在这种情况下,过滤后的噪声(x)携带未知系统的信息。高斯分布,方差为1,为未滤波噪声d是期望的信号。运行这个自适应过滤器的代码是:

[y,e] = rls(x,d);

在哪里y返回过滤后的输出和e包含误差信号,因为滤波器适应寻找未知系统的逆。

得到RLS滤波器的估计系数。

b = rls.Coefficients;

查看自适应RLS滤波器的频率响应(逆系统,G(z))使用freqz.逆系统看起来像一个线性相位的高通滤波器。

freqz (b, 1)

图中包含2个轴对象。Axes对象1包含一个line类型的对象。坐标轴对象2包含一个line类型的对象。

查看未知系统的频率响应,H(z).响应为截止频率为0.55的低通滤波器。

freqz (filt.Numerator, 1)

图中包含2个轴对象。Axes对象1包含一个line类型的对象。坐标轴对象2包含一个line类型的对象。

未知系统与自适应滤波器级联的结果是一个扩展截止频率为0.8的补偿系统。

overallCoeffs = conv(过滤器.分子,b);freqz (overallCoeffs, 1)

图中包含2个轴对象。Axes对象1包含一个line类型的对象。坐标轴对象2包含一个line类型的对象。

使用RLS滤波器消除添加到未知系统的附加噪声n。RLS滤波器调整其系数,直到其传递函数与未知系统的传递函数尽可能接近。自适应滤波器输出与未知系统输出的差值就是误差信号e,表示加性白噪声。自适应滤波器的目标是使误差信号最小化。

请注意:如果您正在使用R2016a或更早的版本,请使用等效的步骤语法替换对对象的每个调用。例如,obj (x)就变成了步骤(obj, x)

初始化

创建一个dsp。FIRFilter系统对象™表示未知系统。创建一个dsp。RLSFilter对象并将长度设置为11个点。将方法设置为房主RLS的.创建一个正弦波来表示添加到未知系统的噪声。在时间范围内查看信号。

FrameSize = 100;镍= 10;RLS = dsp。RLSFilter (“长度”11...“方法”房主RLS的);Filt = dsp。FIRFilter (“分子”...fir1(10。5,综合成绩]));正弦波= dsp。SineWave (“频率”, 0.01,...“SampleRate”,1,...“SamplesPerFrame”, FrameSize);Scope = timescope(“LayoutDimensions”(2 - 1),...“NumInputPorts”2,...“TimeUnits”“秒”...“YLimits”(-2.5 - 2.5),...“BufferLength”2 * FrameSize *硝石,...“ActiveDisplay”,1,...“ShowLegend”,真的,...“ChannelNames”, {噪声信号的},...“ActiveDisplay”2,...“ShowLegend”,真的,...“ChannelNames”, {误差信号的});k = 1:NIter x = randn(FrameSize,1);D = filt(x) +正弦波();[y,e] = rls(x,d);w = rls.Coefficients;范围(d, e)结束(范围)

算法

dsp。RLSFilter系统对象,当传统的RLS,递归计算FIR滤波器权重的最小二乘估计(RLS)。System对象估计将输入信号转换为所需信号所需的滤波器权重或系数。输入信号可以是标量,也可以是列向量。所期望的信号必须具有与输入信号相同的数据类型、复杂性和维度。对应的RLS滤波器用矩阵形式表示为Pn):

k n λ 1 P n 1 u n 1 + λ 1 u H n P n 1 u n y n w T n 1 u n e n d n y n w n w n 1 + k n e n P n λ 1 P n 1 λ 1 k n u H n P n 1

在λ-1表示指数权重因子的倒数。变量如下:

变量 描述
n 当前时间索引
un 在阶跃处缓冲输入样本的向量n
Pn 逆相关矩阵的阶跃共轭n
kn 阶跃处的增益向量n
k *n 复共轭k
wn 滤波器抽头矢量按阶估计n
y (n 按步骤过滤的输出n
e (n) 阶跃估计误差n
d (n) 按阶跃得到所需的响应n
λ 遗忘因素

uw,k都是列向量。

参考文献

M Hayes,统计数字信号处理与建模,纽约:Wiley, 1996年。

海金,自适应滤波理论,第四版,上马鞍河,新泽西州:普伦蒂斯大厅,2002年。

[3] A.A. Rontogiannis和S. Theodoridis,“逆因子分解自适应最小二乘算法”,信号处理第52卷,no。1996年7月,第35-47页。

S.C.道格拉斯,“数值鲁棒O(N2)使用最小二乘预白的RLS算法,“IEEE Int。声学,语音和信号处理会议,伊斯坦布尔,土耳其,第1卷,第412-415页,2000年6月。

A. H.赛义德,自适应滤波基础,新泽西州霍博肯:John Wiley & Sons出版社,2003年。

扩展功能

在R2013a中引入