📄 br_combiner.m
字号:
%R_comb=BR_combiner(R_dfs,H,state)
%Combine received signal
%Equilization and scaling is also performed when necessary
%R_dfs is the output signal of FFT, without CP
%H is the channel frequency response
%state can be 1,2,3 or 4, indicates different systems (1=SISO,2=MRC,3=MISO,4=EGC)
%R_comb will be demodulated later to recover the transmitted bits
%
%by Yuanye Wang
%CTIF, Aalborg University
%yywang@kom.aau.dk
%29-06-2006
function R_comb=BR_combiner(R_dfs,H,state)
% if flg_csi_err == 1
% H = H.*10.^((randn(size(H)) + i*randn(size(H)))/sqrt(2)/10);
% %g=10.^((10*log10(g_noCSI_Err)+randn(size(g_noCSI_Err)))/10);%/chEstErrorFactor;
% end
[N,Nsymbol,R_div]=size(R_dfs);
if state==1||state==5
for k=1:Nsymbol
R_comb(:,k)=R_dfs(:,k)./H(:,k);
end
elseif state==2 || state == 7
for k=1:Nsymbol
temp(:,:)=H(:,k,:);
scale4=1./sum(abs(temp).^2,2);
R_mrc(:,:)=R_dfs(:,k,:);
R_mrc2=R_mrc.*conj(temp);
R_comb(:,k)=sum(R_mrc2,2).*scale4;
end
elseif state==3
for k=1:2:Nsymbol
H1(:,:)=H(:,k,:);
%H2(:,:)=H(:,i+1,:);
scale4=1./sum(abs(H1).^2,2);
R_comb(:,k)=(conj(H1(:,1)).*R_dfs(:,k)+H1(:,2).*conj(R_dfs(:,k+1))).*scale4;
R_comb(:,k+1)=(conj(H1(:,2)).*R_dfs(:,k)-H1(:,1).*conj(R_dfs(:,k+1))).*scale4;
end
elseif state==4
for k=1:Nsymbol
temp(:,:)=H(:,k,:);
R_egc(:,:)=R_dfs(:,k,:);
R_egc2=R_egc./temp;
%R_egc2(:,:)=R_egc(:,:).*conj(H)./(abs(H).^2+1/snr);
R_comb(:,k)=sum(R_egc2,2)/divn;
end
elseif state == 6
for k = 1:2:Nsymbol
scale4=1./sum(abs(squeeze(H(:,k,:))).^2,2);
r0 = R_dfs(:,k,1); r1 = R_dfs(:,k+1,1);
r2 = R_dfs(:,k,2); r3 = R_dfs(:,k+1,2);
h0 = H(:,k,1); h1 = H(:,k,2);
h2 = H(:,k,3); h3 = H(:,k,4);
R_comb(:,k) = (conj(h0).*r0 + h1.*conj(r1) + conj(h2).*r2 + h3.*conj(r3)).*scale4;
R_comb(:,k+1) = (conj(h1).*r0 - h0.*conj(r1) + conj(h3).*r2 - h2.*conj(r3)).*scale4;
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -