% 该程序实现时域LMS算法,并用统计的方法仿真得出不同步长下的收敛曲线
clear % 清空变量空间
close all
g=100; % 统计仿真次数为g
N=1024; % 输入信号抽样点数N
k=128; % 时域抽头LMS算法滤波器阶数
pp=zeros(g,N-k); % 将每次独立循环的误差结果存于矩阵pp中,以便后面对其平均
u=0.001;
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,3); % 加入均值为零的高斯白噪声,信噪比为3dB
% 设置初值
y=zeros(1,N); % 输出信号y
y(1:k)=xn(1:k); % 将输入信号xn的前k个值作为输出y的前k个值
w=zeros(1,k); % 设置抽头加权初值
e=zeros(1,N); % 误差信号
% 用LMS算法迭代滤波
for i=(k+1):N
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,10*log10(bi));
hold off % 将每次循环的图形显示结果保存下来
%lms程序(调试通过)
number=2^13 ;
M=4;
n=1:number;
noise=sin(0.02*n); % noise=randn(1,number)噪声分别为白噪声和正弦信号
s=sin(0.01*n);
subplot(4,1,1)
plot(1:number,s);
ylabel('(a)信号');
d=sin(0.01*n)+0.4*noise(n);
subplot(4,1,2)
plot(1:number,d)
ylabel('(b)信号+噪声');
X=zeros(1,M);
e=zeros(1,number);
w=ones(1,M)/M;
for n=1:number
if n<M
for j=1:n
X(j)= noise(n-j+1 );
end
else
for j=1:M
X(j)=noise(n-j+1);
end
end
y(n)=0;
for k=1:M
y(n)=y(n)+w(k)*X(k);
end
e(n)=d(n)-y(n);
mu=0.001;
w=w+2*mu*e(n)*X;
end
subplot(4,1,3)
plot(1:number,y)
ylabel('(c)输出信号');
subplot(4,1,4)
plot(1:number,e);
xlabel('sequence of time');
ylabel('(d)误差信号')
lms.rar_LMS MATLAB_LMS计算机_lms_lmsofoney_lms仿真
版权申诉
25 浏览量
2022-09-24
01:46:04
上传
评论
收藏 1KB RAR 举报
我虽横行却不霸道
- 粉丝: 71
- 资源: 1万+
最新资源
- 基于 Java的扫雷程序毕业设计
- axure9 里面有码 axure9 里面有码
- 551-2404242311-1.amr
- 自己搭建的关于springboot整合mybatis的框架.zip
- 这是一个保存Springboot+MyBaits项目的仓库.zip
- tensorflow-gpu-2.7.2-cp39-cp39-manylinux2010-x86-64.whl
- tensorflow-2.7.4-cp38-cp38-manylinux2010-x86-64.whl
- tensorflow-gpu-2.7.4-cp38-cp38-manylinux2010-x86-64.whl
- 詹佳 陈敏 口语2.mp3
- 图书管理系统毕业设计Java语言实现
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈