dsp.FrequencyDomainAdaptiveFilter

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

描述

dsp.FrequencyDomainAdaptiveFilter系统对象™农具使用快速块最小均方(LMS)算法在频域中的自适应有限冲激响应(FIR)滤波器。的长度块长度属性指定的滤波器长度和块长度值的算法的用途。的FFTCoefficients属性包含离散傅立叶变换的当前滤波器系数集合。对象提供与分区和非分区模式算法的约束和不受约束的版本。有关详细信息,请参阅算法

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

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

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

要了解更多有关系统对象的方式工作,请参阅什么是系统对象?(MATLAB)。

创建

描述

例子

FDAF= dsp.FrequencyDomainAdaptiveFilter返回一个频域FIR自适应滤波器系统对象,FDAF。此系统对象被用于计算对于给定的输入和所希望的信号经滤波的输出和滤波器误差。

例子

FDAF= dsp.FrequencyDomainAdaptiveFilter(LEN)返回与该频域FIR自适应滤波器对象长度属性设置为LEN

例子

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

例:FDAF = dsp.FrequencyDomainAdaptiveFilter( '长度',32, '步长',0.1)建立了一个频率域自适应滤波器模型,该滤波器长度为32分频,步长为0.1。

属性

展开全部

除非另有说明,性质nontunable,这意味着调用对象后,你不能改变它们的值。对象锁,当你打电话给他们,和发布功能解锁他们。

如果属性可调,您可以随时更改它的值。

有关更改属性值的更多信息,请参阅系统设计在MATLAB中使用系统对象(MATLAB)。

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

  • “约束FDAF”- 施加在过滤器抽头权重的梯度约束。

  • “无约束FDAF”- 无梯度约束强加于滤波器抽头权重。

  • “分区约束FDAF”——对滤波器的脉冲响应进行分区,以减少延迟。

  • “分区不受约束FDAF”——对滤波器的脉冲响应进行分区,以减少延迟。没有对过滤丝锥加权施加梯度约束。

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

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

数据类型:||INT8|INT16|INT32|Int64的|UINT8|UINT16|UINT32|UINT64

系数更新的块长度,指定为正的整数值标量。自适应滤波器将输入数据和需要的信号处理为由该属性设置的长度样本块。有关此筛选器如何处理此数据的详细信息,请参阅算法。输入向量的长度必须是由整除块长度适当的价值。的默认值块长度属性设置的值长度财产。

数据类型:||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”算法,该向量的长度等于的总和长度值和块长度值。此属性初始化的在FFT值InitialCoefficients财产。为了让离散傅里叶变换的滤波器系数,调用该对象,并访问FFTCoefficients对象的属性。

数据类型:|
复数支持:万博1manbetx

用法

描述

(y,] = FDAF(X,d)过滤输入信号,x使用d作为期望的信号,并且返回经过滤的输出在y和过滤器在错误。系统对象估计需要最小化的输出信号和期望信号之间的误差滤波器权重。这些滤波器权重的FFT可以通过访问能够得到FFTCoefficients调用该对象的算法后财产。

输入参数

展开全部

信号由频域FIR自适应滤波器进行滤波。输入,x和期望的信号,d,必须具有相同的大小和数据类型。输入向量的长度必须是由整除块长度适当的价值。

输入,x,可以是一个可变尺寸的信号,只要该帧长度是的倍数块长度。可以更改在即使当对象被锁定的列向量的元素数。当你调用该对象的系统对象的锁来运行其算法。

数据类型:|
复数支持:万博1manbetx

频域自适应滤波器适应其滤波器权重,以使误差最小,和会聚所述输入信号,x到所需的信号,d,尽可能地。

输入信号与所述期望信号必须有相同的大小和数据类型。所需信号矢量的长度必须是由整除块长度适当的价值。

输入信号可以是一个可变大小的信号,只要帧长是的倍数块长度。可以更改在即使当对象被锁定的列向量的元素数。当你调用该对象的系统对象的锁来运行其算法。

数据类型:|
复数支持:万博1manbetx

输出参数

展开全部

滤波后的输出,返回为列向量。对象调整其滤波器权重收敛的输入信号,x,以匹配期望的信号,d。该滤波器输出会聚的信号。

数据类型:|
复数支持:万博1manbetx

输出信号和期望信号之间的差值,返回为列向量。自适应滤波器的目标是最小化该误差。对象调整其权重来靠拢其产生所需的信号作为紧密匹配尽可能的输出信号最佳滤波器权重。有关如何更多详情计算,见[2]

数据类型:|
复数支持:万博1manbetx

对象函数

要使用对象函数,请将系统对象指定为第一个输入参数。例如,释放系统对象的系统资源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];NTR = 1024;S =符号(randn(1,NTR + d))+ 1I *符号(randn(1,NTR + d));N = 0.1 *(randn(1,NTR + d)+ 1I * randn(1,NTR + d));R =滤波器(B,A,S)+ N;X = R(1 + d:NTR + d);d = S(1:NTR);

创建一个dsp.FrequencyDomainAdaptiveFilter反对长度为32抽头的频域自适应滤波器和0.1的步长进行建模。自适应过滤器接受所接收的信号和所需的信号作为输入的延迟版本。自适应滤波器的输出与所希望的信号。两个信号之间的误差表示添加到传输信道的噪声。自适应滤波器更新其系数,直到这个错误变得微乎其微。为了让离散傅里叶变换的滤波器系数,调用FDAF对象,访问该对象的FFTCoefficients财产。

亩= 0.1;FDAF = dsp.FrequencyDomainAdaptiveFilter('长度',32,'步长',亩);[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.7632 -0.4709 + 0.7468 + 0.4833我0.5193 - 0.7995 -0.8218 - 0.5649 -0.5908 0.7316 + 0.5866 + 0.7768我0.5806 - 0.7270我-0.6287 + -0.7148 - 0.59980.6702我0.6575 + 0.6379 0.6332 - 0.7153 -0.7659 - 0.6536 0.6424我-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:NTR,实([d; Y; ​​E]))图例(“所需的”,“输出”,'错误')标题(同相分量的)xlabel(“时间指数”);ylabel(“信号值”)

图(1:NTR,IMAG([d; Y; ​​E]))图例(“所需的”,“输出”,'错误')标题(“正交组件”)xlabel(“时间指数”)ylabel(“信号值”)

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

积(X(NTR-100:NTR),“。”)轴([ -  3 3 -3 3])标题(“接收信号散点图”轴)('广场')xlabel(“真正的[x]”)ylabel('的Imag [X]')网格

图(d(NTR-100:NTR),“。”)轴([ -  3 3 -3 3])标题(“期望信号散点图”轴)('广场')xlabel(“真正的[y]”)ylabel('的Imag [Y]')网格

自适应滤波器均衡所接收的信号,以消除噪声。画出均衡信号的散点图。

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

使用的频域自适应滤波器来估计长FIR滤波器的系数。FIR滤波器模型房间的脉冲响应。使用分区模式在频域自适应滤波器来降低滤波器的延迟。

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

初始化

产生的8192个样本长FIR脉冲响应,并分配给一个脉冲响应dsp.FIRFilter宾语,房间。这种对象模型房间的脉冲响应。创建一个dsp.FrequencyDomainAdaptiveFilter过滤,lmsfilt在分配约束模式。该过滤器的长度设定为房间的脉冲响应的四分之一的长度。该过滤器的块长度设置为128个样本。步长设置为0.025,初始功率至0.01,平均因子至0.98,偏移为1,并且泄漏因子为1初始化一个dsp.ArrayPlot对象以查看筛选器系数。初始化一个dsp.TimeScope对象以显示滤波器输出和期望信号之间的均方误差。

FS = 16e3;M = 8192;并[b,A] = cheby2(4,20,[0.1 0.7]);impulseResponseGenerator = dsp.IIRFilter(...“分子”,(0 (1,6)b),...“分母”, 一个);roomImpulseResponse = impulseResponseGenerator(...(日志(0.99 *兰特(1,M)+0.01)*符号(randn(1,M))* EXP(-0.002 *(1:M)))');roomImpulseResponse = roomImpulseResponse /规范(roomImpulseResponse);室= dsp.FIRFilter(“分子”roomImpulseResponse ');lmsfilt = dsp.FrequencyDomainAdaptiveFilter (...'方法',“分区约束FDAF”,...'长度',M / 4,...“块长度”,128,...'步长',0.025,...'InitialPower',0.01%,...'AveragingFactor',0.98,...“偏移”1,...'LeakageFactor',1);框架尺寸= lmsfilt.BlockLength;硝石= 2000;AP = dsp.ArrayPlot('YLimits',[ -  0.2 0.2],“ShowLegend”,真正,...'位置',[0 0 560 420],'ChannelNames',...{“实际系数”,“估计系数”});TS = dsp.TimeScope('采样率',FS,'时间跨度',框架尺寸*硝石/ FS,...'TimeUnits',“秒”,...'YLimits'(-50 0),'标题',“学习曲线”,...'YLabel','D b',...'BufferLength中',FrameSize *硝石,...'ShowGrid',真正);signalmean = dsp.MovingAverage(“SpecifyWindowLength”,假);

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

通过取由返回的频域系数向量的IFFT估计自适应滤波器的时域系数lmsfilt.FFTCoefficients财产。与分配给该FIR滤波器(室)的实际系数比较所估计的系数。一旦自适应滤波器已收敛其输出到所需的信号,并且最小化的误差信号,估计系数与实际系数密切匹配。这意味着,所述自适应滤波器已经成功地适应本身建模的FIR滤波器(室)的脉冲响应。

K = 1:硝石X = randn(框架尺寸,1);d =室温(X)+ 0.01 * randn(框架尺寸,1);[Y,E] = lmsfilt(X,d);FFTCoeffs = lmsfilt.FFTCoefficients;W = IFFT(FFTCoeffs,[],2,“对称”);W = W(:,1:框架尺寸)+ W(:,框架尺寸+ 1:结束);W =重塑(W',1,M / 4);AP([roomImpulseResponse(1:M / 4)中,w']);TS(10 *日志10(signalmean(ABS(E)^ 2))。);结束

由于过滤器适应随着时间的推移,你可以在时间范围内的均方误差变为最小见。同时,估计系数在阵列情节紧扣符合实际的系数。

算法

展开全部

频域自适应滤波包括三个步骤 - 滤波,误差估计,和分接权重自适应。这个算法执行FIR使用重叠保留或重叠相加方法在频域中进行滤波。欲了解更多实施细则这两种方法,请参阅算法在节dsp.FrequencyDomainFIRFilter目标页面。误差估计和抽头权重自适应所使用的快速块LMS算法(FBLMS)来实现。

参考

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

[2]法尔罕-Boroujeny,B.,自适应滤波器:理论与应用,奇切斯特,英格兰,Wiley出版社,1998年。

[3]斯托克汉姆,T. G.,小 “高速卷积和相关。”1966年春季联合计算机会议论文集,AFIPS,卷。28,1966年,第229-233。

扩展功能

介绍了在R2013b