自适应滤波器(Adaptive Filter)(1)–简介
自适应滤波器(adaptive filter)(2)–LMS算法
自适应滤波器的介绍与LMS算法推到过程可参照以上两篇文章。一下是matlab演示自适应滤波器 LMS算法。
LMS算法的核心是
y(i)=w*XN';%y(n)=W*XN;
e(i)=d(i)-y(i);
w=w+u*e(i)'*XN;
函数ADLMS:
% 输入参数:
% xn 输入的信号序列
% d 所期望的响应序列
% k 滤波器的阶数 (标量)
% u 收敛因子(步长) (标量) 要求大于0,小于xn的相关矩阵最大特征值的倒数
% 输出参数:
% W 滤波器的权值矩阵 (矩阵)
% e 误差序列(itr x 1)
% y 实际输出序列
function [y,w,e]=ADLMS(xn,d,k,u)
itr = length(xn);
e = zeros(1,itr); % 误差序列,en(k)表示第k次迭代时预期输出与实际输入的误差
w = zeros(1,k); % 每一行代表一个加权参量,每一列代表-次迭代,初始为0
y= zeros(1,itr); %存放输出信号
% 迭代计算
for i = (k+1):itr % 第k次迭代
XN=xn((i-k+1):(i));
y(i)=w*XN';%y(n)=W*XN;
e(i)=d(i)-y(i);
w=w+u*e(i)'*XN;
end
clc
clear all
close all
Fs =44100;
fc =1000;
L=44100;
t=1/Fs:1/Fs:L/Fs;
s=sin(2*pi*t*fc);
figure(1);
subplot(4,1,1);
plot(t(1:512),s(1:512));grid;
ylabel('幅度');
xlabel('时间');
title('原始正玄信号');
v = sqrt(0.1) * randn(1,L);
subplot(4,1,2);
plot(t(1:512),v(1:512));grid;
ylabel('幅度');
xlabel('时间');
title('原始噪声信号');
xn=s+v;
subplot(4,1,3);
plot(t(1:512),xn(1:512));grid;
ylabel('幅度');
xlabel('时间');
title('原始噪声+正玄信号');
%%%%%%%%%%%%%%%%%LMS%%%%%%%%%%%%%%%%%%%%%
k=128; %FIR滤波器系数
u =1/512;
d =s;
[y,w,e]=ADLMS(xn,d,k,u)
subplot(4,1,4);
plot(t(512:1024),y(512:1024));grid;
ylabel('幅度');
xlabel('时间');
title('自适应滤波后正玄+噪声信号');
%%
ss=s-y;%剩余噪声
figure(2);
subplot(2,1,1);
plot(t,ss);grid;
ylabel('幅度');
xlabel('时间');
title('剩余噪声');
%% 一小段三个信号比较
figure(3),
t=(20000:20500);
plot(t,y(20000:20500 ),'r',t,ss(20000:20500),'g',t,s(20000:20500),'b');
axis([20000,20500,-1,1]);
ylabel('幅度');
xlabel('时间');
legend('去噪后的正玄+噪声信号','剩余噪声','原始正玄信号');
title('一小段三个信号比较');
FPGA_IC设计课程推广
对数字IC/FPGA设计更加感兴趣的同学,可以关注由15年前端经验的工程师SKY带来的数字IC设计入门课程。已有数家IC公司用该课程做新人培训。
详情请点击下面的链接了解:数字IC/FPGA设计_从入门到精通
拿不到offer,几乎退全款。
更多精彩推荐,请关注我们