哈尔滨工业大学-自适应信号处理-LMS算法实验

该文通过Matlab代码展示了LMS算法在信号处理中的应用,包括不同步长参数下的学习曲线和均衡器抽头数对性能的影响。通过对伯努利序列的模拟,计算了均方误差,并进行了200次蒙特卡洛实验以观察算法稳定性。实验结果显示,步长和均衡器参数选择对算法收敛速度和误差性能有显著影响。
摘要由CSDN通过智能技术生成

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

clc;clear;close all;
% r = [1.070880965,0.376510198,0.035439982];
% r = [1.125001,0.5,0.0625];
% r = [1.190540872,0.617316568,0.095269936];
r = [1.263783726,0.72633701,0.131891363];


R = zeros(11,11);

for i = 1:11
    R(i,i) = r(1);
end

for j = 1:10
    R(j+1,j) = r(2);
    R(j,j+1) = r(2);
end

for k = 1:9
    R(k+2,k) = r(3);
    R(k,k+2) = r(3);
end

[x,y]=eig(R);
m=diag(y);
zuixiao = min(m)
zuida = max(m)
chi = zuida/zuixiao


close all;clear;clc;
%% 初始化参数
N = 5000;   %设置伯努利序列长度
M = 11;     %滤波器长度
W = 3.2;     %设置W的值
n = [1;2;3];    %生成3行1列矩阵
h = 0.5*(1+cos(2*pi*(n-2)/W));   %信道单位脉冲响应
miu = [0.075,0.025,0.005];  %步长参数
 
%% 计算均方误差
for i = 1:200       %进行200次蒙特卡洛实验
    x = binornd(1,0.5,N,1);     %产生值为1,-1的伯努利序列
    m = find(x==0);
    x(m) = -1;      %1,-1的概率都为0.5的伯努利序列
    sigma = 0.001;      %设置sigma参数
    v1 = sqrt(sigma)*randn(N+2,1);  %生成高斯白噪声,其均值为0,方差为0.001
    u = conv(h(:,1),x)+v1;      %将输入序列x与h做卷积
    for miuk = 1:3      %计算不同步长参数mu下的值
        w = zeros(M,1);         %初始化滤波器系数
        for k = 1:N-M+1
            utemp = u(k+M-1:-1:k);  %存放u(n)的临时向量
            y(k,miuk) = w.'*utemp;      %滤波器的输出
            e(k,miuk) = x(k+4)-y(k,miuk);    %估计误差
            Pe(i,k,miuk) = e(k,miuk).*e(k,miuk);    %估计误差平方
            w = w+miu(miuk)*utemp*conj(e(k,miuk));  %更新滤波器系数
        end
    end
end
%% 绘图
figure;                                
semilogy(mean(Pe(:,:,1)),'b');hold on;
semilogy(mean(Pe(:,:,2)),'.-g');hold on;
semilogy(mean(Pe(:,:,3)),'--r');hold on;
xlabel('迭代次数');ylabel('集平均平方误差');
title('改变步长时LMS算法学习曲线','fontsize',14);
legend('\mu=0.075','\mu=0.025','\mu=0.005');grid on;
text(1200,0.05,'\mu=0.005');
text(700,0.015,'\mu=0.075');
text(700,0.0015,'\mu=0.025');

close all;clear;clc;
%% 初始化参数
N = 500;    %伯努利序列长度
M = 11;  %均衡器抽头数
% W = [2.9,3.1,3.3,3.5];  %控制均衡器抽头输入相关矩阵的特征值分布
W = [2.8,3.0,3.2,3.4];  %控制均衡器抽头输入相关矩阵的特征值分布
n = [1;2;3];    %3行1列
h = 0.5*(1+cos(2*pi*(n-2)*(1./W)));  %信道的脉冲响应函数
% step = 0.075;    %步长参数
step = 0.050;    %步长参数


%% 自适应滤波
for i = 1:200    %做200次蒙特卡洛实验
    x = binornd(1,0.5,N,1);     %产生值为1,-1的伯努利序列
    m = find(x==0);     %寻找第一个为0的x值
    x(m) = -1;      %将值为0的数设置为-1,循环操作之后将所有的0改为-1
    sigma = 0.001;      %定义参数sigma
    v = sqrt(sigma)*randn(N+2,1);    %生成N+2行,1列的高斯白噪声,均值为0,方差为0.001
    u(:,1) = conv(h(:,1),x)+v;      %计算h与x的卷积;
    u(:,2) = conv(h(:,2),x)+v;      %计算h与x的卷积;
    u(:,3) = conv(h(:,3),x)+v;      %计算h与x的卷积;
    u(:,4) = conv(h(:,4),x)+v;      %计算h与x的卷积;
    for wk = 1:4    %根据不同的参数计算W
        w = zeros(M,1);      %初始化参数w
        for k = 1:N-M+1         %设置循环次数
            utemp = u(k+M-1:-1:k,wk);   %临时存放向量u(n)
            y(k,wk) = w.'*utemp;    %滤波器输出
            e(k,wk) = x(k+4)-y(k,wk);    %估计误差
            Pe(i,k,wk) = e(k,wk).*e(k,wk);    %均方误差
            w = w+step*utemp*conj(e(k,wk));    %更新滤波器系数
        end
        wo(i,:,wk) = w;     %将滤波器系数系数记录在wo中
    end
end
%% 作图
figure;
semilogy(mean(Pe(:,:,1)),'k');hold on;     %semilogy函数对y取对数代替原来的y
semilogy(mean(Pe(:,:,2)),'--b');hold on;
semilogy(mean(Pe(:,:,3)),':m');hold on;
semilogy(mean(Pe(:,:,4)),'-.r');hold on;
title('LMS算法的学习曲线');
xlabel('迭代次数');ylabel('集平均平方误差');
legend(['W=',num2str(W(1))],['W=',num2str(W(2))],['W=',num2str(W(3))],['W=',num2str(W(4))]);grid on;

figure;subplot(2,1,1);
stem(mean(wo(:,:,1)));text(11.1,0,['W=',num2str(W(1))]);
xlabel('k');ylabel('w_k');
title('自适应均衡器的集平均脉冲响应','fontsize',14);
subplot(2,1,2);
stem(mean(wo(:,:,2)));text(11.1,0,['W=',num2str(W(2))]);
xlabel('k');ylabel('w_k');

figure;subplot(2,1,1);
stem(mean(wo(:,:,3)));text(11.1,0,['W=',num2str(W(3))]);
xlabel('k');ylabel('w_k');
title('自适应均衡器的集平均脉冲响应','fontsize',14);
subplot(2,1,2);
stem(mean(wo(:,:,4)));text(11.1,0,['W=',num2str(W(4))]);
xlabel('k');ylabel('w_k');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的键盘巨好用

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值