📄 wf.m
字号:
function y=wf(xn_2,xn_1,a)
% function w=wf(xn_2,xn_1,a)
% y为滤波后输出信号
% xn_2为M*length(sinal)的信号矩阵
% xn_1为要增强的信号
% a为滤波器参数因子
[M,N]=size(xn_2);P=length(xn_1);
if M>N
xn_2=conj(xn_2');
T=M; M=N; N=T;
end
if P==1
xn_1=conj(xn_1');
end
len=N;
enflen=128;enfshift=enflen/2;
for m=1:M
p=1;
while (p-1)*enfshift+enflen<len
xn_2_temp(p,:)=xn_2(m,(p-1)*enfshift+1:(p-1)*enfshift+enflen);
xn_enf(m,p,:)=xn_2_temp(p,:);%估计滤波器系数分支
p=p+1;
end
xn_enf2(m,:)=xn_2(m,(p-2)*enfshift+enflen+1:len);%估计滤波器系数分支残余
end
enf=p-1;%帧数
for p=1:enf
temp1=zeros(enf,enflen);temp2=zeros(enf,enflen);
for m=1:M
temp00(p,:)=xn_enf(m,p,:).^2;%信号的自相关估计
temp1(p,:)=temp1(p,:)+temp00(p,:);
for m0=m:M
if m~=m0
temp11(p,:)=abs(xn_enf(m,p,:).*xn_enf(m0,p,:));%信号的互相关估计
temp2(p,:)=temp2(p,:)+temp11(p,:);
end
end
end
rx(p,:)=temp1(p,:)/M;
rs(p,:)=2*temp2(p,:)/((M-1)*M);
end
temp1=zeros(1,len-((enf-1)*enfshift+enflen));
temp2=zeros(1,len-((enf-1)*enfshift+enflen));
for m=1:M
temp1=temp1+xn_enf2(m,:).^2;
for m0=m:M
if m~=m0
temp2=temp2+abs(xn_enf2(m,:).*xn_enf2(m0,:));
end
end
end
rx1=temp1/M;
rs1=2*temp2/((M-1)*M);
%维纳滤波
p=1;
while (p-1)*enfshift+enflen<len
xn_1_temp(p,:)=xn_1((p-1)*enfshift+1:(p-1)*enfshift+enflen);
y1(p,:)=xn_1_temp(p,:).*((rs(p,:)./rx(p,:)).^a);
p=p+1;
end
xn_1_enf=xn_1((p-2)*enfshift+enflen+1:len);%残余
y2=xn_1_enf.*((rs1./rx1).^a);
%--------------------------------------------%
y=[];
for p=1:enf-1
y=[y y1(p,1:enfshift)];
end
y=[y y1(p+1,:) y2];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -