主要内容

dsp.frequencyDomainainAdaptiveFilter

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

描述

dsp.frequencyDomainainAdaptiveFilterSystem object™使用快速块最小均方(LMS)算法在频域实现自适应有限脉冲响应(FIR)滤波器。的长度BlockLength属性指定算法使用的过滤器长度和块长度值。的FFTCoefficients性质包含了电流滤波系数的离散傅里叶变换。该对象提供了具有分区和非分区模式的算法的约束和无约束版本。有关详细信息,请参见算法

使用频域FIR自适应滤波器对信号进行滤波:

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

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

要了解更多关于System对象如何工作的信息,请参见什么是系统对象?

创建

描述

例子

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”——对过滤器的脉冲响应进行分区,以减少延迟。没有对过滤器抽头权重施加梯度约束。

有关详细信息,请参见算法

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

数据类型:||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时,System对象采用泄漏自适应算法。当值为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.即使对象被锁定,也可以更改列向量中的元素数。当您调用System对象以运行其算法时,该对象将被锁定。

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

频域自适应滤波器适应其滤波器权重,以最小化误差,犯错,并汇聚输入信号,x,转换为所需的信号,d,越近越好。

输入信号和所需信号必须具有相同的大小和数据类型。所需信号载体的长度必须可被划分BlockLength属性值。

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

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

输出参数

全部展开

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

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

输出信号与期望信号之间的差值,以列向量的形式返回。自适应滤波器的目标是使这个误差最小化。该对象调整其权值,使其收敛于最优滤波器权值,从而产生尽可能与期望信号匹配的输出信号。了解更多细节犯错计算,看[2]

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

对象的功能

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

发行版(obj)

全部展开

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

例子

全部折叠

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

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

QPSK信号,S,通过一个有噪声的信道传输。通道的分子系数和分母系数都包含在向量中b一个, 分别。收到的信号,r,传输信道末端得到的包含传输的QPSK信号和添加到信道的噪声,n.采用自适应滤波器从接收到的噪声输入中提取QPSK信号。所需的信号,d,是QPSK信号的延迟版本。

D = 16;B = exp(1i*pi/4)*[-0.7 1];A = [1 -0.7];正常= 1024关系;s =符号(randn(1,正常+ D)关系)+ 1我*签署(randn(1,正常+ D)关系);n = 0.1*(randn(1,ntr+D) + 1i*randn(1,ntr+D));R = filter(b,a,s) + n;x = r (1 + D:正常+ D关系);d = s(1:正常)关系;

创建一个dsp.frequencyDomainainAdaptiveFilter对象建模一个频域自适应滤波器的长度为32点,步长为0.1。自适应滤波器接受接收信号的延迟版本和期望的信号作为输入。自适应滤波器的输出与期望的信号进行比较。两个信号之间的误差表示添加到传输信道的噪声。自适应滤波器更新它的系数,直到这个误差变得最小。要得到滤波器系数的离散傅里叶变换,记作fdaf对象,并访问此对象的FFTCOefficient属性。

μ= 0.1;fdaf = dsp.frequencydomainainaDaptiveFilter.('长度',32,“StepSize”,亩);[y,e] = fdaf(x,d);fftcoeffs = fdaf.fftcoefficents
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.7975 - 0.5789i 0.5449 + 0.7992i 0.7909 - 0.5343i 0.5512 - 0.8070i -0.8392 + 0.5338i 0.605 + 0.8493i 0.3758 - 0.3921i -0.3751 - 0.8388i -0.8739 + 0.3785i 0.3625 + 0.9048i

绘制所需输出和误差信号的同相分量和正交分量。

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

图中包含一个轴对象。标题为In-Phase Components的轴对象包含3个类型为line的对象。这些对象表示期望、输出、错误。

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

图中包含一个轴对象。标题为Quadrature Components的axis对象包含3个类型为line的对象。这些对象表示期望、输出、错误。

创建接收信号和期望信号的散点图。

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

图中包含一个轴对象。标题为“接收信号散点图”的轴对象包含一个类型为line的对象。

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

图中包含一个轴对象。具有标题所需信号散点图的轴对象包含类型线的对象。

自适应滤波器对接收的信号进行均衡以消除噪声。绘制均衡信号的散点图。

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

图中包含一个轴对象。标题为“均匀信号散点图”的axis对象包含一个类型为line的对象。

使用频域自适应滤波器估计长FIR滤波器的系数。FIR滤波器模拟房间的脉冲响应。在频域自适应滤波器中使用分区模式,减少滤波器延迟。

笔记:此示例仅在R2018a或更高版本中运行。

初始化

生成一个8192个样本的长FIR脉冲响应,并将脉冲响应赋给adsp.firfilter.目的,房间.该对象模拟了房间的脉冲响应。创建一个dsp.frequencyDomainainAdaptiveFilter过滤器,LMSFILT.,分区约束模式。将过滤器的长度设置为房间脉冲响应长度的四分之一。设置过滤器的块长度为128个样本。将步长设置为0.025,初始功率设置为0.01,平均因子设置为0.98,偏移量设置为1,泄漏因子设置为1。初始化一个dsp。ArrayPlot对象以查看过滤系数。初始化一个timescope对象,以显示滤波器输出与所需信号之间的均方误差。

fs = 16 e3;m = 8192;[b,a] = 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;niter = 2000;ap = dsp.arrayplot(“YLimits”(-0.2。2),“ShowLegend”,真的,...“位置”,[0 560 420],“ChannelNames”...“实际系数”“估计系数”});ts = timescope(“SampleRate”fs,“TimeSpanSource”“属性”...“时间间隔”FrameSize *硝石/ fs,...“TimeUnits”“秒”...“YLimits”(-50 0),“标题”“学习曲线”...'ylabel''D b'...“BufferLength”, FrameSize *硝石,...“ShowGrid”,真正的);signalmean = dsp。MovingAverage (“SpecifyWindowLength”,错误的);

流媒体

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

对所返回的频域系数向量取IFFT,估计自适应滤波器的时域系数lmsfilt。FFTCoefficients财产。将估计的系数与分配给FIR滤波器(房间)的实际系数进行比较。一旦自适应滤波器已经将其输出与所需信号收敛到所需信号,并且最小化误差信号,估计的系数与实际系数紧密地匹配。这意味着自适应滤波器已成功调整自身以模拟FIR滤波器(房间)的脉冲响应。

k = 1:NIter x = randn(FrameSize,1); / /d = room(x) + 0.01*randn(FrameSize,1);[y, e] = lmsfilt (x, d);FFTCoeffs = lmsfilt.FFTCoefficients;w =传输线(FFTCoeffs, [], 2,“对称”);w = w(:,1:框架化)+ w(:,框架大小+ 1:结束);w =重塑(w。',1,m / 4);AP([roomimpulseresponse(1:m / 4),w。']);TS(10 * log10(SignalMean(ABS(e)。^ 2))));结束

随着过滤器随时间互相调整,您可以在时间范围内看到平均方形错误变得最小。同时,估计的系数与阵列图中紧密地匹配。

算法

全部展开

频域自适应滤波包括滤波、误差估计和抽头权重自适应三个步骤。该算法采用重叠保存或重叠叠加的方法在频域实现FIR滤波。有关这两个方法的更多实现细节,请参见算法部分的dsp。FrequencyDomainFIRFilter对象页面。采用快速块LMS算法(FBLMS)实现了误差估计和抽头权值自适应。

参考文献

[1] Shynk, J.J.频域和多速率自适应滤波。IEEE信号处理杂志。第9卷,第1期,1992年,14-37页。

[2] Farhang-Boroujeny, B。,自适应滤波器:理论与应用,奇切斯特,英格兰,威利,1998。

小t·G·斯托克汉姆“高速卷积和相关。”1966年春季联合计算机会议的诉讼程序,即af,1966年第28卷,229-233页。

扩展功能

介绍在R2013B.