⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iirmmse.m

📁 基于Matlab
💻 M
字号:
function [W,G,Wa,Wb,g] = iirmmse(c,SNR,Nw,spacing)

% Get channel & format it
c=c(:).';
c=c/norm(c);
if (rem(length(c),2)==1)
   c=[c 0];
end;


if (spacing==1/2)

   % Divide into even and odd subchannels
   ca=c(1:2:length(c));
   cb=c(2:2:length(c));
   Nc=length(ca);

   % Correct forward equalizer length
   % if necessary
   if (rem(Nw,2)==1)
      Nw=Nw+1;
   end;

   % Compute noise variance
   sigma2=10^(-SNR(length(SNR))/10);

   % Compute autocorrelation function
   Q=xcorr(ca)+xcorr(cb);
   Q(Nc)=Q(Nc)+sigma2;

   % Perform spectral factorization
   % to get feedback filter (matches channel length)
   z=roots(Q);
   I=find(abs(z)<1);
   g=poly(z(I));
   G=g(2:length(g));

   % Form truncated all-pass forward FIRs
   if (Nw/2<Nc)
      Wa=filter(1,g,ca(1:Nw/2));
      Wb=filter(1,g,cb(1:Nw/2));
   else
      Wa=filter(1,g,[ca zeros(1,Nw/2-Nc)]);
      Wb=filter(1,g,[cb zeros(1,Nw/2-Nc)]);
   end;
   Wa=fliplr(conj(Wa));
   Wb=fliplr(conj(Wb));
   GG=xcorr(g);
   gamma=abs(GG(Nc));
   Wa=gamma*Wa;
   Wb=gamma*Wb;

   % Place forward filters in T/2-spaced filter
   W=zeros(1,Nw);
   W(1:2:Nw)=Wb;
   W(2:2:Nw)=Wa;

   % Compute channel-forward filter combo
   v=conv(ca,Wa)+conv(cb,Wb);

   % Compute complete response
   h=filter(1,g,v);

else
  
   % Get channel length
   Nc=length(c);

   % Compute noise variance
   sigma2=10^(-SNR(length(SNR))/10);

   % Compute autocorrelation function
   Q=xcorr(c);
   Q(Nc)=Q(Nc)+sigma2;

   % Perform spectral factorization
   % to get feedback filter (matches channel length)
   z=roots(Q);
   I=find(abs(z)<1);
   g=poly(z(I));
   G=g(2:length(g));

   % Form truncated all-pass forward FIR
   if (Nw<Nc)
      W=filter(1,g,c(1:Nw));
   else
      W=filter(1,g,[c zeros(1,Nw-Nc)]);
   end;
   W=fliplr(conj(W));
   Wa=[];
   Wb=[];
   GG=xcorr(g);
   gamma=abs(GG(Nc));
   W=gamma*W;

   % Compute channel-forward filter combo
   v=conv(c,W);

   % Compute complete response
   h=filter(1,g,v);

end;

W=W(:);
Wa=Wa(:);
Wb=Wb(:);
G=G(:);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -