% 实现LMS算法,将输入和输出信号进行对比,并给出均方误差曲线。 文件名为:LMS.m
% 假设滤波器抽头个数为k,数据长度为N
g = 100; % 统计仿真次数为g
N = 1024; % 输入信号采样点数N
k = 128; % 时域抽头LMS算法滤波器阶数
pp = zeros(g,N-k); % 将每次独立循环的误差结果存于矩阵pp中,以便后面对其平均
u = 0.0002;
for q = 1:g
t = 1:N;
a = 1;
s = a*sin(0.05*pi*t); % 输入单频信号s
figure(1);
subplot(311)
plot(t,real(s)); % 信号s 时域波形
title('信号s时域波形');
xlabel('n');
ylabel('s');
axis([0,N,-a-1,a+1]);
xn = awgn(s,5); % 加入均值为零的高斯白噪声,信噪比为3dB
y = zeros(1,N); % 设置初值 输出信号y
y(1:k) = xn(1:k); % 将输入信号xn的前k个值作为输出y的前k个值
w = zeros(1,k); % 设置抽头加权初值
e = zeros(1,N); % 误差信号
for i = (k+1):N % 用LMS算法迭代滤波
XN = xn((i-k+1):(i));
y(i) = w*XN';
e(i) = s(i)-y(i);
w = w+u*e(i)*XN;
end
pp(q,:) = (e(k+1:N)).^2;
end
subplot(312)
plot(t,real(xn)); % 信号s 时域波形
title('信号s加噪声后的时域波形');
subplot(313)
plot(t,real(y)); % 信号s 时域波形
title('自适应滤波后的输出时域波形');
for b = 1:N-k
bi(b) = sum(pp(:,b))/g;
% 求误差的统计平均
end
figure(2); % 算法收敛曲线
t = 1:N-k;
plot(t,bi,'r');
hold on % 将每次循环的图形显示结果保存下来
title('均方误差曲线');
LMS.zip_lms算法_均方误差_均方误差对比_最小均方滤波
版权申诉
5星 · 超过95%的资源 12 浏览量
2022-09-15
00:07:39
上传
评论
收藏 16KB ZIP 举报
weixin_42653672
- 粉丝: 93
- 资源: 1万+
评论3