主要内容

dsp.FrequencyDomainAdaptiveFilter

计算输出,错误,并使用频域FIR自适应滤波器系数

描述

dsp.FrequencyDomainAdaptiveFilter系统对象™实现了一种自适应有限脉冲响应(杉木)滤波器在频域中使用快速块至少意味着广场(LMS)算法。的长度BlockLength属性指定滤波器长度和算法使用的块长度值。的FFTCoefficients属性包含当前滤波器系数的离散傅里叶变换。对象提供了约束和无约束算法的版本与分区和分区模式。有关详细信息,请参见算法

使用频域FIR自适应滤波器过滤一个信号:

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

  2. 调用对象的参数,就好像它是一个函数。

了解更多关于系统对象是如何工作的,看到的系统对象是什么?

创建

描述

例子

fdaf= dsp.FrequencyDomainAdaptiveFilter返回一个频域FIR自适应滤波器系统对象,fdaf。这个系统对象用于计算过滤输出和过滤器错误对于一个给定的输入和期望信号。

例子

fdaf= dsp.FrequencyDomainAdaptiveFilter (len)返回一个对象的频域FIR自适应滤波器长度属性设置为len

例子

fdaf= dsp.FrequencyDomainAdaptiveFilter (___,名称,值)返回一个频域FIR自适应滤波器与每个指定的对象属性设置为指定的值。在报价附上每个属性的名字。您可以使用该语法与以往任何输入参数组合。

例子:fdaf = dsp.FrequencyDomainAdaptiveFilter(“长度”,32岁的“StepSize”, 0.1)模型的频域自适应滤波器的长度32水龙头和步长为0.1。

属性

全部展开

属性,除非另有注明nontunable后,这意味着你不能改变它们的值调用对象。对象锁当你叫他们,释放函数打开它们。

如果一个属性可调在任何时候,你可以改变它的值。

改变属性值的更多信息,请参阅系统设计在MATLAB使用系统对象

方法用于计算滤波器系数,指定为:

  • “约束FDAF”——强加一个梯度约束过滤阀重量。

  • “无约束FDAF”——没有梯度约束对过滤阀重量。

  • “分区限制FDAF”——分区滤波器的脉冲响应减少延迟。

  • “分区无约束FDAF”——分区滤波器的脉冲响应减少延迟。没有梯度约束对过滤器利用权重。

更多细节,请参阅算法

数字滤波器系数向量的长度,指定为一个积极,整数值标量。

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

块长度系数的更新,指定为一个积极,整数值标量。自适应滤波器处理输入数据和期望信号的样本块长度设定这个属性。有关这些数据是如何处理的过滤器,明白了算法。输入向量的长度必须整除BlockLength属性值。默认值的BlockLength属性设置的值长度财产。

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

适应步长因子,指定为一个真正的标量范围(0,1)。使用一个小的步长可以确保一个小的稳态误差。然而,一个小的步长减少由此产生的自适应滤波器的收敛速度。增加步长提高了收敛速度,在稳态均方误差增加的成本。当步长值1,该算法提供了最佳的权衡之间的收敛速度和稳态均方误差。

可调:是的

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

泄漏因素时使用实现漏水的自适应滤波器,指定为一个标量数值范围在[0,1]。值小于1时,系统对象实现了一个漏水的自适应算法。值为1时,对象提供无渗漏的调整方法。

可调:是的

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

平均因子用于计算系数的指数窗口FFT输入信号力量更新,指定为一个真正的标量范围(0,1)。

可调:是的

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

抵消的标准化术语系数更新,指定为非负的标量值。这个属性值是用来避免除零或非常小的数字,如果任何部门的输入信号FFT权力变得非常小。

可调:是的

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

最初的共同价值的所有输入信号FFT权力,指定为一个积极的数字标量。

如果你改变这个值一旦锁定对象,改变您重置对象后才生效。

可调:是的

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

最初的时域自适应滤波器的系数,指定为一个标量或矢量的长度相等长度属性值。自适应滤波器对象使用这些系数来计算初始频域滤波器系数。

如果你改变这个值一旦锁定对象,改变您重置对象后才生效。

可调:是的

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

锁定状态系数的更新,指定为:

  • ——对象不断更新滤波器系数。

  • 真正的——不更新滤波器系数和它们的值保持在当前的价值。

可调:是的

数据类型:逻辑

这个属性是只读的。

当前滤波器系数的离散傅里叶变换,返回一个行向量。为“约束FDAF”“无约束FDAF”算法,这个向量的长度等于之和长度价值和BlockLength价值。这个属性是FFT的值初始化InitialCoefficients财产。得到滤波器的离散傅里叶变换系数,调用对象,访问FFTCoefficients对象的属性。

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

使用

描述

(y,犯错]= fdaf (x, d)滤波器的输入信号,x,使用d期望信号,并返回输出过滤y过滤错误犯错。系统对象估计滤波器权重需要最小化错误输出信号与期望信号。这些过滤器的FFT权重可以通过访问FFTCoefficients属性后调用对象的算法。

输入参数

全部展开

信号的频域FIR自适应滤波器过滤。输入,x所需的信号,d,必须有相同的大小和数据类型。输入向量的长度必须整除BlockLength属性值。

输入,x,可以适应信号只要帧长度的倍数BlockLength。你可以改变的数量列向量中的元素即使对象是锁着的。系统对象锁,当你调用对象运行它的算法。

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

频域自适应滤波器调整滤波器权值误差降到最低,犯错收敛的输入信号,x期望信号,d,尽可能。

输入信号与期望信号必须有相同的大小和数据类型。期望信号向量的长度必须整除BlockLength属性值。

输入信号可以适应信号只要帧长度的倍数BlockLength。你可以改变的数量列向量中的元素即使对象是锁着的。系统对象锁,当你调用对象运行它的算法。

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

输出参数

全部展开

过滤输出,作为一个列向量返回。对象调整滤波器权值收敛的输入信号,x,以匹配所需的信号,d。滤波器输出融合信号。

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

输出信号与期望信号的区别,作为一个列向量返回。自适应滤波器的目标是最小化这个错误。对象调整权重收敛到最优滤波器权值产生一个输出信号尽可能匹配所需的信号。更多的细节犯错计算,看[2]

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

对象的功能

使用一个目标函数,指定系统对象作为第一个输入参数。例如,释放系统资源的系统对象命名obj使用这个语法:

发行版(obj)

全部展开

一步 运行系统对象算法
释放 释放资源,并允许修改系统对象属性值和输入特征
重置 重置的内部状态系统对象

例子

全部折叠

传输一个正交相移键控(QPSK)信号在一个嘈杂的传输通道。接收信号中的噪声最小化使用频域自适应滤波器。

QPSK信号,年代,在噪声信道传输。通道的分子和分母系数中包含向量b一个,分别。接收到的信号,r,结束的时候获得传输通道包含传播QPSK信号和噪声添加到频道,n。自适应滤波器用于提取QPSK信号从接收到的噪声输入。所需的信号,d,是QPSK信号的延迟版本。

D = 16;b = exp(1 *π/ 4)* (-0.7 - 1);一个= -0.7 [1];正常= 1024关系;s =符号(randn(1,正常+ D)关系)+ 1我*签署(randn(1,正常+ D)关系);n = 0.1 * (randn(正常+ D关系)+ 1我* randn(1,正常+ D)关系);r =过滤器(b, a, s) + n;x = r (1 + D:正常+ D关系);d = s(1:正常)关系;

创建一个dsp.FrequencyDomainAdaptiveFilter对象模型的频域自适应滤波器长度32水龙头和步长为0.1。自适应滤波器接受延迟的接收信号和期望信号作为输入。自适应滤波器的输出相比,所需的信号。两者之间的误差信号代表了噪声添加到传输通道。自适应滤波器更新系数,直到这个错误变得最小。得到滤波器的离散傅里叶变换系数,调用fdaf对象,访问FFTCoefficients这个对象的属性。

μ= 0.1;fdaf = dsp.FrequencyDomainAdaptiveFilter (“长度”32岁的“StepSize”μ);[y, e] = fdaf (x, d);fftCoeffs = fdaf.FFTCoefficients
fftCoeffs =1×64复杂我0.6802 - 0.6847 -0.2485 - 0.9427 -0.9675 - 0.2123 0.5748我-0.5605 + 0.8002 + 0.7593我0.8541 - 0.3917 -0.2526 - 0.9022 -0.9298 0.0181 + 0.9366 + 0.1255我0.9207 + 0.0511我0.1063 - 0.8972 -0.8919 - 0.1829 -0.2668 + 0.9113我0.9215 + 0.3186 0.3417 - 0.8859 -0.8285 - 0.3760 0.8741我-0.4317 + 0.8200 + 0.4765我0.4874 - 0.9075 -0.8517 - 0.4774 -0.4709 + 0.7632我0.7468 + 0.4833 0.5193 - 0.7995 -0.8218 - 0.5649 0.7316我-0.5908 + 0.7768 + 0.5866我0.5806 - 0.7270 -0.7148 - 0.5998 -0.6287 + 0.6702我0.6575 + 0.6379 0.6332 - 0.7153 -0.7659 - 0.6424 0.6536我-0.6678 + 0.7294 + 0.6891我0.7006 - 0.6333 -0.6594 - 0.7117 -0.7207 + 0.6517我0.6031 + 0.7239 0.7362 - 0.5776 -0.5869 - 0.7682 0.5449我-0.7975 + 0.5789 + 0.7992我0.7909 - 0.5343 -0.5512 - 0.8070 0.5338 -0.8392 + 0.4605 + 0.8493我0.8358 - 0.3921 -0.3751 - 0.8388 -0.8739 0.3625 + 0.9048 + 0.3785我

情节和同相正交组件所需的输出和错误的信号。

阴谋(1:正常,关系真实([d; y; e]))传说(“想要的”,“输出”,“错误”)标题(同相分量的)包含(“时间指数”);ylabel (的信号值)

图包含一个坐标轴对象。使用标题同相轴对象组件,包含时间指数,ylabel信号值包含3线类型的对象。这些对象代表希望、输出错误。

阴谋(1:正常,关系图像放大([d; y; e]))传说(“想要的”,“输出”,“错误”)标题(“正交组件”)包含(“时间指数”)ylabel (的信号值)

图包含一个坐标轴对象。轴与标题正交组件对象,包含时间指数,ylabel信号值包含3线类型的对象。这些对象代表希望、输出错误。

创建接收信号的散点图和所需的信号。

情节(x(正常- 100:关系正常)的关系,“。”轴([3 3 3 3])标题(“收到信号散点图”)轴(“广场”)包含(“真正的[x]”)ylabel (图像放大[x]”网格)

图包含一个坐标轴对象。坐标轴对象与标题接收信号散点图,包含真正的[x], ylabel图像放大[x]包含一行对象显示它的值只使用标记。

情节(d(正常- 100:关系正常)的关系,“。”轴([3 3 3 3])标题(“期望信号散点图”)轴(“广场”)包含(“真正的[y]”)ylabel (图像放大[y]”网格)

图包含一个坐标轴对象。坐标轴对象与标题期望信号散点图,包含真正的[y], ylabel图像放大[y]包含一行对象显示它的值只使用标记。

消除噪声的自适应滤波器使得车内外的接收信号。画出散点图的平衡的信号。

情节(y(正常- 100:关系正常)的关系,“。”轴([3 3 3 3])标题(“平衡的信号散点图”)轴(“广场”)包含(“真正的[y]”)ylabel (图像放大[y]”网格)

图包含一个坐标轴对象。坐标轴对象与标题平衡的信号散点图,包含真正的[y], ylabel图像放大[y]包含一行对象显示它的值只使用标记。

使用频域自适应滤波器的系数估计长冷杉过滤器。冷杉滤波器脉冲响应模型的一个房间。使用分区模式的频域自适应滤波器来降低滤波器延时。

注意:这个例子只运行在R2018a或更高版本。

初始化

生成一个长冷杉脉冲响应的8192个样本和分配的脉冲响应dsp.FIRFilter对象,房间。这个对象模型的脉冲响应一个房间。创建一个dsp.FrequencyDomainAdaptiveFilter过滤器,lmsfilt在分区模式的限制。滤波器的长度设置为四分之一房间的脉冲响应的长度。滤波器的块长度设置为128样本。设置步长为0.025,初始功率0.01,0.98,平均因素抵消1,泄漏系数为1。初始化一个dsp.ArrayPlot对象查看滤波器系数。初始化一个timescope对象显示之间的均方误差滤波器输出和期望的信号。

fs = 16 e3;m = 8192;[b] = cheby2 (4 20 [0.1 - 0.7]);impulseResponseGenerator = dsp.IIRFilter (“分子”,(0 (1,6)b),“分母”,);roomImpulseResponse = impulseResponseGenerator ((日志兰德(1米)+(0.99 * 0.01)。*标志(randn(1米)。* exp (-0.002 * (1: m))) ');roomImpulseResponse = roomImpulseResponse /规范(roomImpulseResponse);房间= dsp.FIRFilter (“分子”roomImpulseResponse ');lmsfilt = dsp.FrequencyDomainAdaptiveFilter (“方法”,“分区限制FDAF”,“长度”米/ 4“BlockLength”,128,“StepSize”,0.025,“InitialPower”,0.01,“AveragingFactor”,0.98,“抵消”,1“LeakageFactor”1);FrameSize = lmsfilt.BlockLength;硝石= 2000;美联社= dsp.ArrayPlot (“YLimits”(-0.2。2),“ShowLegend”,真的,“位置”[0 0 560 420],“ChannelNames”,{“实际系数”,“估计系数”});TS = timescope (“SampleRate”fs,“TimeSpanSource”,“属性”,“时间间隔”FrameSize *硝石/ fs,“TimeUnits”,“秒”,“YLimits”(-50 0),“标题”,“学习曲线”,“YLabel”,“数据库”,“BufferLength”,FrameSize *硝石,“ShowGrid”,真正的);signalmean = dsp.MovingAverage (“SpecifyWindowLength”、假);

流媒体

生成一个随机输入信号使用randn函数。的帧大小的块长度匹配自适应滤波器的输入。所需的信号是数字滤波器的输出的总和(房间)和高斯白噪声的信号。通过输入信号与期望信号的自适应滤波器。计算自适应滤波器输出和输出之间的误差和所需的信号。

估计时域自适应滤波器的系数通过传输线的频域系数向量返回的lmsfilt.FFTCoefficients财产。估计系数与实际情况相比较系数分配给冷杉过滤器(房间)。一旦自适应滤波器聚集其输出所需的信号,和最小化误差信号,估计系数与实际密切匹配系数。这意味着,自适应滤波器成功本身适应模型的脉冲响应数字滤波器(房间)。

k = 1:硝石x = randn (FrameSize, 1);d =房间(x) + 0.01 * randn (FrameSize, 1);[y, e] = lmsfilt (x, d);FFTCoeffs = lmsfilt.FFTCoefficients;w =传输线(FFTCoeffs, [], 2,“对称”);w = w (: 1: FrameSize) + w (:, FrameSize + 1:结束);w =重塑(w。', 1 m / 4);美联社([roomImpulseResponse (1: m / 4)、w。');TS (10 * log10 (signalmean (abs (e) ^ 2)));结束

作为筛选适应随着时间的推移,你可以看到在时间范围内的均方误差最小。同时,估计系数匹配数组中的实际紧密系数图。

算法

全部展开

频域自适应滤波包括三个步骤——过滤、误差估计,tap-weight适应。该算法在频域实现了冷杉过滤使用overlap-save或交叠相加的方法。这两个方法的实现细节,看到算法部分的dsp.FrequencyDomainFIRFilter对象页面。误差估计和tap-weight适应使用快速实现块LMS算法(FBLMS)。

引用

[1]Shynk, J.J.“频域和多重速率的自适应过滤。”IEEE信号处理杂志。第一卷。9日,1992年,页14-37。

[2]Farhang-Boroujeny, B。,自适应滤波器:理论和应用程序奇切斯特,英国,威利,1998年。

[3]Stockham, t·G。,小。“高速卷积和相关性。”学报1966年春季联合计算机会议,AFIPS,28卷,1966年,页229 - 233。

扩展功能

版本历史

介绍了R2013b