主要内容

信号增强使用LMS和NLMS算法

使用最小均方(LMS)和归一化LMS算法,提取期望信号的信号通过过滤掉噪音。这些算法都是可用的dsp.LMSFilter系统对象™。

为适应创建的信号

期望信号(过程)的输出是一个正弦信号,每帧1000个样本。

正弦= dsp.SineWave (“频率”,375,“SampleRate”,8000,“SamplesPerFrame”,1000)
正弦= dsp。SineWave属性:振幅:1频率:375 PhaseOffset: 0 ComplexOutput:错误的方法:“三角函数”SamplesPerFrame: 1000 SampleRate: 8000 OutputDataType:“双”
s = sin ();

进行适应,过滤器需要两个信号:

  • 一个参考信号

  • 一个包含期望信号和噪声信号一个额外的噪声分量

产生的噪声信号

创建一个自回归的噪声信号噪声(定义为v1)。在自回归噪声,噪声在时间t只取决于前面的值和一个随机的干扰。

v = 0.8 * randn (sine.SamplesPerFrame, 1);%随机噪声部分。基于“增大化现实”技术= (1 1/2);%自回归系数。ARfilt = dsp.IIRFilter (“分子”,1“分母”基于“增大化现实”技术)
ARfilt = dsp。IIRFilter属性:结构:“直接形成二转置”分子:1分母:0.5000 [1]InitialConditions: 0显示所有属性
v1 = ARfilt (v);

腐败所需的信号来创建一个嘈杂的信号

生成包含期望信号和噪声信号噪声,添加噪声信号v1所需的信号年代。的正弦信号x是:

x = s + v1;

自适应滤波器处理寻求恢复年代x通过删除v1。完成所需的信号进行自适应滤波,适应过程需要一个参考信号。

创建一个参考信号

定义一个移动平均的信号v2这是与v1。信号v2是这个例子的参考信号。

马= (-0.8,0.4,-0.2);MAfilt = dsp.FIRFilter (“分子”、马)
MAfilt = dsp。FIRFilter属性:结构:“直接形式”NumeratorSource:“财产”分子:[1 -0.8000 0.4000 -0.2000]InitialConditions: 0显示所有属性
v2 = MAfilt (v);

构造两个自适应滤波器

两个相似,sixth-order适应性过滤器- LMS和NLMS——这个例子的基础形式。订单设置为一个变量在MATLAB™和创建过滤器。

L = 7;lms = dsp.LMSFilter (L,“方法”,“LMS”)
lms = dsp。LMSFilter属性:方法:LMS的长度:7 StepSizeSource:“财产”StepSize: 0.1000 LeakageFactor: 1 InitialConditions: 0 AdaptInputPort:假WeightsResetInputPort:假WeightsOutput:“去年”显示所有属性
nlms = dsp.LMSFilter (L,“方法”,“归一化LMS”)
nlms = dsp。LMSFilter属性:方法:归一化LMS的长度:7 StepSizeSource:“财产”StepSize: 0.1000 LeakageFactor: 1 InitialConditions: 0 AdaptInputPort:假WeightsResetInputPort:假WeightsOutput:“去年”显示所有属性

选择步长

LMS-like算法有一个步长,决定了滤波器的校正应用适应从一个迭代到另一个。增加一个步长太小的时间系数的滤波器收敛在一组。一个步长太大可能导致适应滤波器发散和从未达到收敛。在这种情况下,产生的过滤器可能不稳定。

作为一个经验法则,较小的步骤大小改善滤波器收敛于匹配的准确性未知系统的特点,以牺牲的时间去适应。

maxstep的函数dsp.LMSFilter对象决定了最大的步骤大小适合每个LMS自适应滤波器算法,确保过滤器收敛于一个解决方案。通常,步长是µ的符号。

[mumaxlms, mumaxmselms] = maxstep (lms, x)
mumaxlms = 0.2127
mumaxmselms = 0.1312
[mumaxnlms, mumaxmsenlms] = maxstep (nlms、x)
mumaxnlms = 2
mumaxmsenlms = 2

设置步长调整过滤器

第一个的输出maxstep函数所需的价值系数的均值收敛,而第二个输出所需的值均方收敛系数。选择一个较大的步长收敛值经常引起大的变化,所以一般选择尺寸较小的步骤。

lms。StepSize = mumaxmselms / 30
lms = dsp。LMSFilter属性:方法:LMS的长度:7 StepSizeSource:“财产”StepSize: 0.0044 LeakageFactor: 1 InitialConditions: 0 AdaptInputPort:假WeightsResetInputPort:假WeightsOutput:“去年”显示所有属性
nlms。StepSize = mumaxmsenlms / 20
nlms = dsp。LMSFilter属性:方法:归一化LMS的长度:7 StepSizeSource:“财产”StepSize: 0.1000 LeakageFactor: 1 InitialConditions: 0 AdaptInputPort:假WeightsResetInputPort:假WeightsOutput:“去年”显示所有属性

滤波器和自适应滤波器

你设置的参数自适应滤波器和现在可以过滤噪声信号。参考信号v2是自适应滤波器的输入。x是在这个配置所需的信号。

通过适应y的输出过滤器,试图模拟x尽可能。

由于v2相关只有x的噪声分量v1,真的只能模仿v1。误差信号(x),减去实际产出y, x的估计的一个组成部分,不是与v2,信号提取从x。

[~,榆树,wlm) = lms (v2, x);[~,enlms wnlms] = nlms (v2, x);

计算出最优解

相比之下,计算最优冷杉维纳滤波器。

重置(MAfilt);bw = firwiener (l - 1 v2, x);%最佳冷杉维纳滤波器MAfilt = dsp.FIRFilter (“分子”bw)
MAfilt = dsp。FIRFilter属性:结构:“直接形式”NumeratorSource:“财产”分子:[1.0001 0.3060 0.1050 0.0482 0.1360 0.0959 0.0477]InitialConditions: 0显示所有属性
yw = MAfilt (v2);使用维纳滤波x %的估计电子战= x - yw;%的估计实际的正弦信号

阴谋的结果

情节产生的每个滤波器——维纳滤波器去噪正弦信号,LMS自适应滤波器,NLMS自适应滤波器,比较各种技术的性能。

n = (1:1000)”;情节(n(900:结束),[电子战(900:结束),榆树(900:结束),enlms(900:结束)])传说(维纳滤波去噪正弦信号的,“LMS运用正弦信号”,“NLMS运用正弦信号的)包含(“时间指数(n)”)ylabel (“振幅”)

作为一个参考点,包括噪声信号作为情节的虚线。

持有情节(n(900:结束),x(900:结束),凯西:”)包含(“时间指数(n)”)ylabel (“振幅”)举行

图包含一个坐标轴对象。坐标轴对象包含时间指数(n), ylabel振幅包含4线类型的对象。这些对象代表维纳滤波去噪正弦信号,LMS运用正弦信号,NLMS运用正弦信号。

比较最后系数

最后,比较了维纳滤波器系数与自适应滤波器的系数。调整时,自适应滤波器收敛于维纳系数。

(bw。“wlm wnlms]
ans =7×31.0001 0.8644 0.9690 0.3060 0.1198 0.2661 0.1050 -0.0020 0.1226 0.0482 -0.0046 0.1074 0.1360 0.0680 0.2210 0.0959 0.0214 0.1940 0.0477 0.0292 0.1127

重置前过滤器过滤

你可以重置内部过滤状态在任何时候通过调用重置过滤器对象的函数。

例如,这些连续调用重置对象后产生相同的输出。

[ylms,榆树,wlm) = lms (v2, x);[ynlms, enlms wnlms] = nlms (v2, x);

如果你不重置筛选对象,过滤器使用最终状态和系数从以前运行的初始条件和数据集下运行。

调查通过学习曲线收敛

分析自适应滤波器的收敛性,利用学习曲线。工具箱提供了生成学习曲线的方法,但是你需要多个迭代实验获得重要的结果。

这个演示使用25个样本实现噪声的正弦信号。

重置(ARfilt)重置(sin);释放(sin);n = (1:5000)”;正弦。SamplesPerFrame = 5000
正弦= dsp。SineWave属性:振幅:1频率:375 PhaseOffset: 0 ComplexOutput:错误的方法:“三角函数”SamplesPerFrame: 5000 SampleRate: 8000 OutputDataType:“双”
s = sin ();nr = 25;v = 0.8 * randn (sine.SamplesPerFrame nr);ARfilt = dsp.IIRFilter (“分子”,1“分母”基于“增大化现实”技术)
ARfilt = dsp。IIRFilter属性:结构:“直接形成二转置”分子:1分母:0.5000 [1]InitialConditions: 0显示所有属性
v1 = ARfilt (v);x = repmat(年代,1,nr) + v1;重置(MAfilt);MAfilt = dsp.FIRFilter (“分子”、马)
MAfilt = dsp。FIRFilter属性:结构:“直接形式”NumeratorSource:“财产”分子:[1 -0.8000 0.4000 -0.2000]InitialConditions: 0显示所有属性
v2 = MAfilt (v);

计算学习曲线

现在计算均方误差。加快速度,每10个样本计算错误。

首先,重置避免使用系数的自适应滤波器已经计算和存储的状态。然后情节LMS的学习曲线和NLMS自适应滤波器。

重置(lms);重置(nlms);M = 10;%大量毁灭的因素mselms = msesim (lms, v2, x, M);msenlms = msesim (nlms v2, x, M);阴谋(1:M: n(结束),mselms,“b”1:M: n(结束),msenlms,‘g’)传说(“LMS的学习曲线”,“NLMS学习曲线”)包含(“时间指数(n)”)ylabel (MSE的)

图包含一个坐标轴对象。坐标轴对象包含时间指数(n), ylabel MSE包含2线类型的对象。这些对象代表LMS的学习曲线,NLMS学习曲线。

你看到的这一小块LMS的学习曲线计算和NLMS自适应滤波器。

计算理论的学习曲线

LMS和NLMS算法,函数工具箱帮助你计算理论学习曲线,在最小均方误差(MMSE),多余的均方误差(EMSE)和系数的平均值。

MATLAB可能需要一些时间来计算曲线。后的图所示代码块预测和实际LMS曲线。

重置(lms);[mmselms, emselms meanwlms pmselms] = msepred (lms, v2, x, M);x = 1: M: n(结束);日元= mmselms *的(500 1);y2 = emselms *的(500 1);y3 = pmselms;y4 = mselms;情节(x, y₁,“米”,x, y2,“b”,x, y3,“k”日元,x,,‘g’)传说(“患者”,“EMSE”,“预测LMS的学习曲线”,“LMS的学习曲线”)包含(“时间指数(n)”)ylabel (MSE的)

图包含一个坐标轴对象。坐标轴对象包含时间指数(n), ylabel MSE包含4线类型的对象。这些对象代表MMSE、EMSE预测LMS的学习曲线,LMS的学习曲线。