主要内容

dsp。FrequencyDomainAdaptiveFilter

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

描述

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

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

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

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

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

创建

描述

例子

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

例子

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

自适应步长因子,指定为the range(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对象的属性。

数据类型:|
复数的支持:是的

使用

描述

(y,犯错] = fdaf (x, d)过滤输入信号,x,使用d,并返回滤波后的输出y而滤波器误差在犯错。System对象估计输出信号和期望信号之间的误差最小化所需的滤波权值。这些滤波权值的FFT可以通过访问FFTCoefficients属性调用对象算法后。

输入参数

全部展开

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

输入,x,可以是一个可变大小的信号,只要帧长是的倍数BlockLength。即使对象被锁定,你也可以改变列向量中的元素数量。当你调用对象来运行它的算法时,System对象就会锁定。

数据类型:|
复数的支持:是的

频域自适应滤波器调整其滤波器权值以使误差最小化,犯错,并收敛输入信号,x,到所需的信号,d,越接近越好。

输入信号和期望信号必须具有相同的大小和数据类型。所需信号向量的长度必须能被BlockLength属性值。

输入信号可以是可变大小的信号,只要帧长度是的倍数BlockLength。即使对象被锁定,你也可以改变列向量中的元素数量。当你调用对象来运行它的算法时,System对象就会锁定。

数据类型:|
复数的支持:是的

输出参数

全部展开

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

数据类型:|
复数的支持:是的

输出信号与期望信号之间的差值,作为列向量返回。自适应滤波器的目标是使这个误差最小化。对象对其权值进行自适应,使其收敛到最优滤波器权值,从而产生与所需信号尽可能接近的输出信号。有关如何实现的更多细节犯错计算,看[2]

数据类型:|
复数的支持:是的

对象的功能

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

发行版(obj)

全部展开

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

例子

全部折叠

通过有噪声的传输通道传输正交相移键控(QPSK)信号。使用频域自适应滤波器将接收信号中的噪声降至最低。

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

QPSK信号,年代,通过噪声信道传输。信道的分子和分母系数包含在向量中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。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.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:正常,关系真实([d; y; e]))传说(“想要的”,“输出”,“错误”)标题(同相分量的)包含(“时间指数”);ylabel (的信号值)

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

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

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

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

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

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

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

图中包含一个axes对象。标题为“期望信号散点图”的axes对象包含一个类型为line的对象。

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

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

图中包含一个axes对象。标题为Equalized Signal Scatter Plot的axes对象包含一个类型为line的对象。

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

注意:本例仅在R2018a或更高版本中运行。

初始化

生成8192个样本的长FIR脉冲响应,并将脉冲响应分配给adsp。FIRFilter对象,房间。该对象模拟了一个房间的脉冲响应。创建一个dsp。FrequencyDomainAdaptiveFilter过滤器,lmsfilt,在分区约束模式下。将滤波器长度设置为房间脉冲响应长度的1 / 4。将滤波器的块长设置为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;硝石= 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函数。输入的帧大小与自适应滤波器的块长度匹配。所需信号是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:FrameSize) + w(:,FrameSize+1:end);w =重塑(w。',1 m / 4);美联社([roomImpulseResponse (1: m / 4)、w。');TS (10 * log10 (signalmean (abs (e) ^ 2)));结束

当过滤器随时间调整时,你可以看到在时间范围内,均方误差变得最小。同时,估计的系数与阵列图中的实际系数非常接近。

算法

全部展开

频域自适应滤波由三个步骤组成:滤波、误差估计和抽头权重自适应。该算法使用重叠保存或重叠添加方法在频域实现FIR滤波。要了解这两种方法的更多实现细节,请参见算法部分的dsp。FrequencyDomainFIRFilter对象页面。使用快速块LMS算法(FBLMS)实现了误差估计和tap-weight自适应。

参考文献

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

[2] Farhang-Boroujeny, B。,自适应滤波器:理论与应用, Chichester, England, Wiley, 1998。

[3]小斯托克汉姆,t.g.。《高速卷积与相关》。1966年春季联合计算机会议的会议记录,AFIPS,1966年第28卷,第229-233页。

扩展功能

版本历史

介绍了R2013b

Baidu
map