MatLab实现RMS、RLS自适应滤波器

RMS滤波器滤波在这里插入代码片过程如下:


data1=load('怀孕母亲腹部心电图数据(1).txt');
data2=load('怀孕母亲胸部心电图数据(1).txt');
thorax=data2(1:2000);%胸部信号,参考信号
dn=thorax.';
abdomen=data1(1:2000);%腹部信号,输入信号
xn=abdomen.';
M=20;%阶数
itr=2000;%迭代次数
en=zeros(itr,1);%误差序列
W=zeros(M,itr);%权系数
mu=0.5;%步长因子
s=zeros(itr,1);%均方误差

%迭代计算
for k=M:itr
    x=xn(k:-1:k-M+1);%滤波器M个抽头的输入
    y=W(:,k-1).'*x;%滤波器输出
    en(k)=dn(k)-y;%第k次迭代误差
    W(:,k)=W(:,k-1)+2*mu*en(k)*x;%权系数更新
    s(k)=s(k-1)+abs(en(k)).^2;
    c(k)=sqrt(s(k)/k);%均方误差
end
%求最优时滤波器的输出序列
yn=inf*ones(size(xn));
for k=M:length(xn)
    x=xn(k:-1:k-M+1);
    yn(k)=W(:,end).'*x;
end
figure;
subplot(3,1,1),plot((1:2000),xn-yn,'r',(1:2000),dn,'b');
legend('胎儿心电图','母亲心电图');
xlabel('采样点数');ylabel('幅度');
subplot(3,1,2);plot(c);
xlabel('迭代次数');ylabel('均方误差');
subplot(3,1,3);plot(W(1,:),'r');hold on;
plot(W(2,:));plot(W(3,:),'k');
xlabel('迭代次数');ylabel('滤波器系数');
legend('权系数1','权系数2','权系数3');

RLS实现过程如下:

for k=(M+1):itr
    X=dn(k-1:-1:k-M);
    K=(T*X)/(la+X'*T*X);
    e1=dn(k)-wR(:,k-1)'*X;
    wR(:,k)=wR(:,k-1)+K*e1;
    Y(k)=wR(:,k)'*X;
    err(k)=dn(k)-Y(k);
    T=(T-K*X'*T)/la;
    s(k)=s(k-1)+abs(err(k-1))^2;
    C(k)=sqrt(S(k)/k);%均方误差
end

原数据链接


版权声明:本文为BigFaceCatpro原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。