matlab实现NLMS自适应滤波器
时间: 2023-10-16 15:19:43 浏览: 154
matlab_lms自适应滤波器_
NLMS(Normalized Least Mean Square)自适应滤波器是一种常用的自适应滤波器,可以用来估计信号中的某些未知参数或者去除噪声。下面是MATLAB实现NLMS自适应滤波器的示例代码:
```
%生成原始信号
n = 0:999;
s = sin(2*pi*0.05*n);
%生成噪声信号
v = randn(size(s));
%生成含噪信号
x = s + v;
%初始化自适应滤波器系数
M = 64;
w = zeros(M,1);
%步长
mu = 0.01;
%阻尼因子
delta = 0.1;
%NLMS自适应滤波器
y = zeros(size(x));
for i = M:length(x)
x_ = x(i:-1:i-M+1);
y(i) = w'*x_;
e = x(i) - y(i);
w = w + (mu/(delta+x_*x_'))*x_*e;
end
%画图比较
subplot(3,1,1);
plot(n,s);
title('原始信号');
subplot(3,1,2);
plot(n,x);
title('含噪信号');
subplot(3,1,3);
plot(n,y);
title('NLMS滤波后信号');
```
首先,生成一个正弦信号s,再生成一个噪声信号v,将它们相加得到含噪信号x。然后,初始化自适应滤波器系数w,设定步长mu和阻尼因子delta,开始进行滤波。对于每个时刻i,取x(i)到x(i-M+1)作为输入向量x_,通过w'*x_得到输出y(i),计算误差e,更新滤波器系数w。最后,画出原始信号、含噪信号和滤波后信号的比较图。
阅读全文