📄 br_combiner2.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,4 or 5, indicates different systems (1=SISO,2=MRC,3=Alamouti,4=EGC,5=AS)
%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_combiner2(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,divn]=size(R_dfs);
if state==1||state==5
for i=1:Nsymbol
R_comb(:,i)=R_dfs(:,i)./H(:,i);
end
elseif state==2
for i=1:Nsymbol
temp(:,:)=H(:,i,:);
scale4=1./sum(abs(temp).^2,2);
R_mrc(:,:)=R_dfs(:,i,:);
R_mrc2=R_mrc.*conj(temp);
R_comb(:,i)=sum(R_mrc2,2).*scale4;
end
elseif state==3
for i=1:2:N
clear H1;H1(:,:)=H(i,:,:); H1=H1.';
%H2(:,:)=H(:,i+1,:);
%scale5=sum(abs(H1).^2,2)
scale4=1./sum(abs(H1).^2,1);
% scale4(i+1,:)=1./sum(abs(H1).^2,1);
R_alam(i,:)=(conj(H1(1,:)).*R_dfs(i,:)+H1(2,:).*conj(R_dfs(i+1,:))).*scale4;
R_alam(i+1,:)=(conj(H1(2,:)).*R_dfs(i,:)-H1(1,:).*conj(R_dfs(i+1,:))).*scale4;
end
% for i=1:N
% R_comb(i,:)=R_alam(i,:).*scale4(i,:);
% end
elseif state == 6
for k = 1:2:N
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
% for i=1:2:Nsymbol
% H1(:,:)=H(:,i,:);
% %H2(:,:)=H(:,i+1,:);
% scale4=1./sum(abs(H1).^2,2);
% R_alam(:,i)=conj(H1(:,1)).*R_dfs(:,i)+H1(:,2).*conj(R_dfs(:,i+1));
% R_alam(:,i+1)=conj(H1(:,2)).*R_dfs(:,i)-H1(:,1).*conj(R_dfs(:,i+1));
% end
% for i=1:Nsymbol
% R_comb(:,i)=R_alam(:,i).*scale4;
% end
elseif state==4
for i=1:Nsymbol
temp(:,:)=H(:,i,:);
R_egc(:,:)=R_dfs(:,i,:);
R_egc2=R_egc./temp;
R_comb(:,i)=sum(R_egc2,2)/divn;
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -