?? vblast_receiver.m
字號:
function [BER] = VBLAST_receiver(channelestime_est,YY_data,XX_data,antennatrans);
% ordered V-BLAST receiver
%
% Begin: April 2007
% Last edited: Aug.8, 2007
% Feng Wan
enable_ordered=1; % if 1, Make ordered MMSE receiver eanable
if(enable_ordered==1) %%% Step1: sort the channel order
channel_vec_norm=zeros(antennatrans,1);
for n1=1:antennatrans
channel_vec_norm(n1)=sum(abs(channelestime_est(:,n1)).^2);
end
[sort_channel_vec_norm,sort_index] = sort(channel_vec_norm);
Perturbation_matrix=zeros(antennatrans);
for n1=1:antennatrans
index_value=sort_index(n1);
Perturbation_matrix(index_value,n1)=1;
end
channel_ordered=channelestime_est*Perturbation_matrix;
else
channel_ordered=channelestime_est;
Perturbation_matrix=eye(antennatrans);
end %%% Step1: sort the channel order
%%% Step2: get the V-BLAST receiver
[Q_matrix,R_matrix] = qr(channel_ordered);
YY_data_new=Q_matrix(:,1:antennatrans)'*YY_data;
ch_est_effective=Q_matrix(:,1:antennatrans)'*channel_ordered;
length_data=size(YY_data,2);
data_decoding_pre=zeros(antennatrans,length_data);
temp_data_row=YY_data_new(antennatrans,:)/ch_est_effective(antennatrans,antennatrans);
data_decoding_pre(antennatrans,:)=(sign(real(temp_data_row))+...
sqrt(-1)*sign(imag(temp_data_row)))/sqrt(2);
for n1=antennatrans-1:-1:1
pre_data_sum=zeros(1,length_data);
for n2=n1+1:antennatrans
pre_data_sum=pre_data_sum+ch_est_effective(n1,n2)*data_decoding_pre(n2,:);
end
temp_data_row=(YY_data_new(n1,:)-pre_data_sum)/ch_est_effective(n1,n1);
data_decoding_pre(n1,:)=(sign(real(temp_data_row))+...
sqrt(-1)*sign(imag(temp_data_row)))/sqrt(2);
end
data_decoding=Perturbation_matrix*data_decoding_pre;
bit_errors=0;
for n1=1:antennatrans
bit_errors=bit_errors+length(find(XX_data(n1,:)~=data_decoding(n1,:)));
end
BER=2*bit_errors/(size(data_decoding_pre,1)*size(data_decoding_pre,2));
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -