?? mmse.m
字號:
function LLR_value=MMSE(rec_sig,channel_matrix,noise_var,mapping)
[R_Antenna,T_Antenna,sig_length]=size(channel_matrix);
M=length(mapping);
K=log2(M);
LLR_value=zeros(sig_length,T_Antenna*K); %比特級似然值
for i1=1:sig_length
single_ch_m=channel_matrix(:,:,i1);
single_sig=rec_sig(:,i1);
single_LLR_value=zeros(T_Antenna,K);
MMSE_Matrix=single_ch_m'*inv(single_ch_m*single_ch_m'+noise_var*eye(R_Antenna));
soft_value_vector=MMSE_Matrix*single_sig;
noise_var_change_vector=noise_var*sum(abs(MMSE_Matrix).^2,2);
%%%%%%%%%%%%%%%%%% 計算比特級似然值 %%%%%%%%%%%%%%%%%%%%%%%%%
temp=[0:M-1];
bit_map=de2bi(temp,K,'left-msb');
soft_value_Matrix=repmat(soft_value_vector,1,M/2);
mapping_Matrix=repmat(mapping,T_Antenna,1);
noise_var_change_Matrix=repmat(noise_var_change_vector,1,M/2);
for i3=1:K
Index_bit_1=find(bit_map(:,i3)==1);
Index_bit_0=find(bit_map(:,i3)==0);
Prob_1=-abs(soft_value_Matrix-mapping_Matrix(:,Index_bit_1)).^2./noise_var_change_Matrix;
Prob_0=-abs(soft_value_Matrix-mapping_Matrix(:,Index_bit_0)).^2./noise_var_change_Matrix;
%判斷語句是為了防止高信噪比下出現溢出的情況
Prob_1(find(Prob_1<-1e300))=-1e300;
Prob_0(find(Prob_0<-1e300))=-1e300;
single_LLR_value(:,i3)=max(Prob_1,[],2)-max(Prob_0,[],2); % 采用了log(exp(x)+exp(y))=max(x,y)的近似公式,有效的避免了計算溢出。
end;
LLR_value(i1,:)=single_LLR_value(:)';
end;
LLR_value=LLR_value.';
LLR_value=LLR_value(:).';
%此步即為了控制似然值的范圍
for i1=1:sig_length*T_Antenna*K
if LLR_value(1,i1)>10
LLR_value(1,i1)=10;
end;
if LLR_value(1,i1)<-10
LLR_value(1,i1)=-10;
end;
end;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -