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