自学内容网 自学内容网

(61)使用LMS算法估计线性预测器并计算估计误差的MATLAB仿真


前言

本文介绍了LMS自适应滤波器对线性预测器系统权系数的估计,进行100次独立实验,计算平均估计误差,得到LMS算法的学习曲线。


一、仿真说明

考虑一个AR过程u(n),使其为二阶线性预测器的输入,在μ=0.05的情况下,使用LMS滤波器来估计w1和w2。在此基础上,滤波器进行100次独立实验,计算平均估计误差,得出LMS算法的学习曲线。

二、仿真代码

使用LMS算法估计线性预测器的仿真代码:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%程序功能:产生500点的样本函数
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;
close all
clear all

N = 500;                           % 样本序列长度
M = 100;                           % 独立试验次数
sigma = sqrt(0.0731);              % 标准差
a = [1 -0.975 0.95];               % AR模型系数

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%程序功能:用LMS算法来估计权系数w1和w2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
miu = 0.05;                                   % 步长
w = zeros(2,N);                               % 初始化权向量
w_sum = zeros(2,N);                           % 100次独立实验的权向量求和
e_sum = zeros(1,N);

for m = 1:M                                   % 100次独立实验
    vn = sigma * randn(N,1);                  % 高斯噪声
    un = filter(1,a,vn);                      % 产生一组独立信号Nx1

    e = zeros(1,N);                           % 初始化估计误差
    d_hat = zeros(1,N);                       % 初始化期望信号估计量
    for n = 3:N-1                             % 信号向量时刻的迭代
        w(:,n+1) = w(:,n) + miu * un(n-1:-1:n-2) * conj(e(n));  % 更新权向量
        d_hat(n+1) = w(:,n+1)' * un(n:-1:n-1);                  % 更新期望信号估计
        e(n+1) = un(n+1) - d_hat(n+1);        % 计算估计误差
    end
    
    % 累加每一次实验的运行结果
    w_sum = w_sum + w;                        % 权向量
    e_sum = e_sum + e.^2;                     % 学习误差
end

w_avrg = w_sum/M;                              % 100次独立实验权向量的均值
e_avrg = e_sum/M;                              % 100次独立实验的学习误差均值


% 绘制权向量更新曲线
t = 1:N;
width_line = 1.5;                              % 绘图线宽
figure()
plot(t,w','LineWidth',width_line)              % 权向量
grid on
hold on
plot(t,w_avrg','LineWidth',width_line)         % 权向量平均值
title(['LMS算法权向量更新曲线(步长=',num2str(miu),')'])
legend('一次实验权系数w1','一次实验权系数w2', ...
       '100次实验w1均值','100次实验w2均值', ...
       'Location','east')
xlabel('迭代次数')
ylabel('权向量')

% 绘制学习曲线
figure()
plot(t,e_avrg,'LineWidth',1);
grid on
title(['LMS算法学习曲线(步长= ',num2str(miu),')'])
xlabel('迭代次数')
ylabel('均方误差')

figure()
subplot(211)
plot(un,'LineWidth',width_line)
grid on
title('期望信号')
xlabel('time index'); ylabel('signal value');
subplot(212)
plot(d_hat,'LineWidth',width_line)
grid on
title('输出信号')
xlabel('time index'); ylabel('signal value');

三、仿真结果

1.LMS自适应滤波器权向量更新曲线

在这里插入图片描述

2.LMS自适应滤波器算法学习曲线

在这里插入图片描述

3.期望信号与LMS自适应滤波器输出信号

在这里插入图片描述

从仿真结果可见,LMS自适应滤波器逐渐收敛于最优维纳解,输出信号近似期望信号。




原文地址:https://blog.csdn.net/weixin_45333185/article/details/143581782

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!