decode1.m
上传用户:look542
上传日期:2009-06-04
资源大小:784k
文件大小:1k
源码类别:

传真(Fax)编程

开发平台:

Matlab

  1. function output=decode1(Y,H,Cons,hard_soft)
  2. %% hard_soft : 1: hard , 0; soft
  3. con_len = length(Cons);
  4. G=inv(H'*H)*H';%求H的伪逆矩阵
  5. ch=H;
  6. len=size(H);
  7. S=zeros(1,len(2));
  8. for i=1:1:len(2)
  9.     len1=size(G,1);
  10.     for l=1:1:len1
  11.         m(l)=norm(G(l,:));%计算H的伪逆矩阵的每一行的范数
  12.     end
  13.     
  14.     n=find(m==min(m));%找出最小范数所对应的行
  15.     m=zeros(1,len(2)-i);
  16.     know=1;
  17.     kpre=n;
  18.     while(kpre>=know)
  19.         if S(1,know)~=0
  20.             kpre=kpre+1;
  21.         end
  22.         know=know+1;
  23.     end
  24.     S(kpre)=kpre;
  25.     w=G(n,:);%取出范数最小的行
  26.     y=w*Y;%求出估计值
  27.     if hard_soft == 0
  28.         output(kpre,:)=y;
  29.         M = zeros(1,con_len);
  30.         for k=1:1:con_len  %对估计值进行判决
  31.             M(k)=(y-Cons(k))*conj(y-Cons(k));
  32.         end
  33.         output1(kpre,:)=Cons(find(M==min(M)));
  34.         Y=Y-output1(kpre,:)*H(:,kpre);%消除信号的干扰
  35.         h=zeros(len(1),len(2)-i);
  36.         h=ch(:,[1:n-1,n+1:len(2)-i+1]);%去掉范数最小的行对应的信道矩阵中的列
  37.         ch=h;
  38.         G=inv(ch'*ch)*ch'; %求伪逆矩阵
  39.     else
  40.         M = zeros(1,con_len);
  41.         for k=1:1:con_len  %对估计值进行判决
  42.             M(k)=(y-Cons(k))*conj(y-Cons(k));
  43.         end
  44.         output(kpre,:)=Cons(find(M==min(M)));
  45.         Y=Y-output(kpre,:)*H(:,kpre);%消除信号的干扰
  46.         h=zeros(len(1),len(2)-i);
  47.         h=ch(:,[1:n-1,n+1:len(2)-i+1]);%去掉范数最小的行对应的信道矩阵中的列
  48.         ch=h;
  49.         G=inv(ch'*ch)*ch'; %求伪逆矩阵
  50.     end
  51. end