Pre-ci test passed git-svn-id: http://svn.eurecom.fr/openair4G/trunk@4000 818b1a75-f10b-46b9-bf7c-635c3b92a50f
43 lines
845 B
Matlab
43 lines
845 B
Matlab
function [Hq,idx] = quantize_H_codebook(H,Codebook)
|
|
% Hq = quantize_H(H, codebook)
|
|
%
|
|
% This function quantizes H according to the given codebook
|
|
%
|
|
% Parameters:
|
|
% H [N_Tx x N_User] Channel matrix to be quatized
|
|
% codebook [N_Tx x N_codes] Codebook
|
|
|
|
[N_Tx, N_User] = size(H);
|
|
|
|
N_codes = size(Codebook,2);
|
|
|
|
if size(Codebook,1) ~= N_Tx
|
|
error('codebook must be of size [N_Tx x N_codes]');
|
|
end
|
|
|
|
% normalize the channel
|
|
for k=1:N_User
|
|
normH(k) = norm(H(:,k));
|
|
H(:,k) = H(:,k)./norm(H(:,k));
|
|
end
|
|
|
|
d = zeros(N_codes,N_User);
|
|
for k=1:N_User
|
|
for i=1:N_codes
|
|
d(i,k) = Codebook(:,i)'*H(:,k);
|
|
end
|
|
end
|
|
|
|
% plot(abs(d))
|
|
|
|
[m,idx] = max(abs(d));
|
|
|
|
Hq = Codebook(:,idx);
|
|
|
|
% Hq has to have the same amplitude as H
|
|
for i=1:N_User
|
|
% Hq(:,i) = Hq(:,i).*d(idx(i),i).*normH(i);
|
|
Hq(:,i) = Hq(:,i).*normH(i);
|
|
end
|
|
|