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

原数据链接

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值