www.gusucode.com > MIMO预编码技术源码程序 > MIMO预编码技术源码程序/code/THP_encoder.m

    function  [x, beta] = THP_encoder(u,H,period) 

Tap_num = size(u,2);

[N_r N_t] = size(H);

[F,S] = qr((H'));%% h = F*S 
s = S';%得到下三角矩阵 lower triagulate matix
f = F';
t = diag(1./diag(s));
B = s*t; %% make B's diag element  

tmp_sum = 0;
for kk = 1:N_t;
    tmp_sum = tmp_sum + 1/s(kk,kk)^2;
end;
p = sqrt(N_t/tmp_sum);%% scale power beta

x = zeros(N_t,Tap_num); 
for kk = 1:Tap_num;
    a = u(:,kk);

    % Feedback Filter
    x(1,kk) = a(1);
    for m = 2:N_t;                                                   
        g = 0;
        for k = 1:(m-1);
            g = B(m,k)*x(k,kk) + g;
        end
        x(m,kk) = a(m)-g;
%         x(m,kk) = THPMod(x(m,kk),period);                                   %% modulo
        x(m,kk) = mod_thp(x(m,kk),period);
    end

    % Forward Filter & Output
    vec_tmp = p*F*t*x(1:N_t,kk);                                            
    x(1:N_t,kk) = vec_tmp;
    
    beta(kk) = 1/p;                                                   %% prepare for the receiver mult 1/p
end;