LMS自适应滤波模型与matlab仿真

一、LMS自适应滤波模型

  假设x(n)为包含噪声的输入信号,y(n)为自适应滤波后的输出信号,d(n)为输入信号的参考信号,则信号的绝对误差e(n) = d(n)-y(n)。

   均方误差J=E[e^2(n)],是自适应滤波最常用的指标,滤波器抽头系数的自适应表达式为:w(n+1)=w(n)+2ux(n)e*(n)。经过多次迭代后,使得J最小的一组w即为LMS自适应滤波器系数。模型结构如下图:

LMS自适应滤波模型

二、matlab程序

1.代码

代码如下:


%------------------------自适应滤波器结构------------------------

clc;
clear all;
close all;

g = 100;%统计仿真次数
N=10240;%输入信号抽样点数
k=128;%时域抽头 LMS算法滤波器阶数
pp = zeros(g,N-k);%将每次独立循环的误差结果存于矩阵pp中,以便后面对其平均
u=0.0002;

f = 24e6;       %信号频率
phase = 0;      %初始相位
a = 1;          %振幅

Fs = 100e6;     %采样率
ts = 1/Fs;      %采样间隔
t = 0:ts:(N-1)*ts;      %采样点数

s= a*cos(2*pi*f*t + phase); %原始信号
 
figure(1);
subplot(421)
plot(t,real(s));%信号s时域波形
title("信号时域波形");
xlabel('n');
ylabel('s');   

   
K = 0;
f_len = (0:N/2-1)*(Fs/N);
s_fft = abs(fft(real(s)));
s_fft = 10*log10(s_fft(1:N/2));

subplot(422)
plot(f_len,s_fft);%信号频域波形
title("信号频域波形");
xlabel('f');
ylabel('s');

for q=1:g
    %加入均值为零的高斯白噪声,信噪比为 10dB
    xn = awgn(s,10)
    % 设置初值
    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(423)
plot(t,real(xn));%自适应滤波器输入信号xn时域波形
title("自适应滤波器输入信号xn时域波形");

xn_fft = abs(fft(real(xn)));
xn_fft = 10*log10(xn_fft(1:(N-K)/2));

subplot(424)
plot(f_len,xn_fft);%自适应滤波器输入信号xn频域波形
title("自适应滤波器输入信号xn频域波形");
xlabel('f');
ylabel('xf');


subplot(425)
plot(t,real(y));
title("自适应滤波输出信号y时域波形");

% K=0;
% f_len = (0:N/2-1)*(Fs/N);
y_fft = abs(fft(real(y)));
y_fft = 10*log10(y_fft(1:(N-K)/2));
subplot(426)
plot(f_len,y_fft)
title("自适应滤波输出信号频域波形");
for b=1:N-k
    bi(b) = sum(pp(:,b))/g;%求误差的统计平均
end
t=1:N-k;
figure(2);% 算法收敛曲线
% subplot(427)
plot(t,bi,'r');
title("均方误差曲线");
hold on     %将每次循环的图形显示结果保存下来

2.仿真结果

  代码如下(示例):
在这里插入图片描述
在这里插入图片描述


三、结果分析

  从仿真结果可以看出LMS自适应滤波具备较好的降噪功能,通过输出信号与参考信号的误差不断调整滤波器系数,使输出信号更接近输入信号。

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值