📄 lms.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 该程序实现时域LMS算法,并用统计的方法仿真得出不同步长下的学习曲线
% W为信道参数,u为迭代步长
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function LMS(W,u)
% 初始化参数
g=200; % 统计仿真次数为g
N=1000; % 输入信号抽样点数N,也为迭代次数
M=11; % 时域抽头LMS算法滤波器阶数
d=6; % 信号延迟
ee=zeros(g,N-M+1); % 将每次独立循环的误差结果存于矩阵ee中,以便后面对其平均
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 产生信道序列
h=zeros(1,3); % 信道序列初始化
for n=1:3
h(n)=0.5*(1+cos(2*pi/W*(n-2))); % 信道序列
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 独立循环算法
for q=1:g
out = randint(1,N); % 产生随机0、1序列
I = (out-0.5).*2; % 得到原始信号I
xx=conv(h,I); % 原始信号通过信道后的信号
x=awgn(xx,30,'measured'); % 给信号加上方差为0.001的白噪声
xn=x(1:N); % 被噪声污染的输入信号
yd=zeros(1,N); % 期望输出信号yd初始化
yd((d+1):N)=I(1:(N-d)); % yd为I延迟7个单位
w=zeros(1,M); % 设置抽头加权初值
e=zeros(1,N); % 误差信号初始化
% 用LMS算法迭代滤波
for i=M:N
XN=xn((i-M+1):(i));
y(i)=w*XN';
e(i)=yd(i)-y(i);
w=w+u*e(i)*XN;
end
ee(q,:)=(e(M:N)).^2; % 存储误差平方序列
end
for b=1:(N-M+1)
bi(b)=sum((ee(:,b)))/g; % 求误差平方值的的统计平均
end
t=1:(N-M+1);
semilogy(t,bi); % 平均学习曲线
title('MSE学习曲线');
xlabel('迭代次数');
ylabel('均方误差');
hold on
% EOF
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -