?? 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為濾波器參數(shù)因子
[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,:);%估計濾波器系數(shù)分支
p=p+1;
end
xn_enf2(m,:)=xn_2(m,(p-2)*enfshift+enflen+1:len);%估計濾波器系數(shù)分支殘余
end
enf=p-1;%幀數(shù)
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 + -