📄 alamouti_space_time_coding.m
字号:
clc;clear all;close all;N=1000;s00=randsrc(1,N/2); %% BPSK modulation %%s11=randsrc(1,N/2); %% BPSK modulation %%i=1;for k=1:length(s00) s0(i)=s00(k); s0(i+1)=-conj(s11(k)); s1(i)=s11(k); s1(i+1)=conj(s00(k)); i=i+2; endfor snr=1:1:30 for monte=1:1:100 for a=1:4 X1=randn(1,N); Y1=randn(1,N); ch(a,:)=channel(X1,Y1,N); end h0=ch(1,:); h1=ch(2,:); h2=ch(3,:); h3=ch(4,:); %%----------------------------------------------------------------------%% %% MRRC scheme %% %%----------------------------------------------------------------------%% % r(1,:)=(h0.*s0); %% antenna zero %%% % r(2,:)=(h1.*s0); %% antenna one %%% % r(3,:)=(h2.*s0); %% antenna two %%% % r(4,:)=(h3.*s0); %% antenna three %%% % % for a=1:4% % p=(r(a,:)*r(a,:)')/length(r(a,:));% % n0(a,:)=noise(p,snr,N);% % end% % % r0=r(1,:)+n0(1,:);% r1=r(2,:)+n0(2,:);% r2=r(3,:)+n0(3,:);% r3=r(4,:)+n0(4,:); % % sest1=(conj(h0).*r0)+(conj(h1).*r1); %% Two branch MRRC (ONE TX AND TWO RX) %%% sest2=(conj(h0).*r0)+(conj(h1).*r1)+(conj(h2).*r2)+(conj(h3).*r3); %% Two branch MRRC (ONE TX AND FOUR RX) %%% %%----------------------------------------------------------------------%% %% ALAMOUTI scheme (SPACE TIME ENCODING) %% %%----------------------------------------------------------------------%% %% TWO TX AND ONE RX %% rr(1,:)=((h0.*s0))+((h1.*s1)); rr(2,:)=((((-1)*h0).*conj(s1)))+((h1.*conj(s0))); p=0; for a=1:2 p=(rr(a,:)*rr(a,:)')/length(rr(a,:)); n1(a,:)=noise(p,snr,N); end r00=rr(1,:)+n1(1,:); r01=rr(2,:)+n1(1,:); sest3=(conj(h0).*r00)+(h1.*conj(r01)); sest4=(conj(h1).*r00)-(h0.*conj(r01)); % %% TWO TX AND TWO RX %%% % rrr(1,:)=(sqrt(1/2)*(h0.*s0))+(sqrt(1/2)*(h1.*s1));% rrr(2,:)=(sqrt(1/2)*(((-1)*h0).*conj(s1)))+(sqrt(1/2)*(h1.*conj(s0)));% rrr(3,:)=(sqrt(1/2)*(h2.*s0))+(sqrt(1/2)*(h3.*s1));% rrr(4,:)=(sqrt(1/2)*(((-1)*h2).*conj(s1)))+(sqrt(1/2)*(h3.*conj(s0)));% % p=0;% % for a=1:4% % p=(rrr(a,:)*rrr(a,:)')/length(rrr(a,:));% % n2(a,:)=noise(p,snr,N);% end% % r10=rrr(1,:)+n2(1,:);% % r11=rrr(2,:)+n2(2,:);% % r12=rrr(3,:)+n2(3,:);% % r13=rrr(4,:)+n2(4,:);% % sest5=(conj(h0).*r10)+(h1.*conj(r11))+(conj(h2).*r12)+(h3.*conj(r13));% sest6=(conj(h1).*r10)-(h0.*conj(r11))+(conj(h3).*r12)-(h2.*conj(r13)); %% SIGNAL ESTIMATION %% for i=1:1:N % if ((dist(sest1(i),-1))<(dist(sest1(i),1)))% decision1(i)=-1;% else% decision1(i)=1; % end% % if ((dist(sest2(i),-1))<(dist(sest2(i),1)))% decision2(i)=-1;% else% decision2(i)=1; % end if ((dist(sest3(i),-1))<(dist(sest3(i),1))) decision3(i)=-1; else decision3(i)=1; end if ((dist(sest4(i),-1))<(dist(sest4(i),1))) decision4(i)=-1; else decision4(i)=1; end % if ((dist(sest5(i),-1))<(dist(sest5(i),1)))% decision5(i)=-1;% else% decision5(i)=1; % end% % if ((dist(sest6(i),-1))<(dist(sest6(i),1)))% decision6(i)=-1;% else% decision6(i)=1; % end end %% ERROR CALCULATION %% error1=0; error2=0; error3=0; error4=0; error5=0; error6=0; for i=1:1:N % if (decision1(i)~=s0(i))% error1=error1+1;% end% % if (decision2(i)~=s0(i))% error2=error2+1;% end if (decision3(i)~=s0(i)) error3=error3+1; end if (decision4(i)~=s1(i)) error4=error4+1; end % if (decision5(i)~=s0(i))% error5=error5+1;% end% % if (decision6(i)~=s1(i))% error6=error6+1;% end end % ber1(monte)=(error1/N);% % ber2(monte)=(error2/N);% ber3(monte)=((error3+error4)/(2*N));% ber4(monte)=((error5+error6)/(2*N)); %%-----------------------------------------------------------------------%% %% Two branch MRRC (ONE TX AND TWO RX) %% %%-----------------------------------------------------------------------%% end % pb1(snr)=mean(ber1);% % pb2(snr)=mean(ber2); pb3(snr)=mean(ber3); % pb4(snr)=mean(ber4);% endsnr=1:30;% pb4(snr)=mean(ber4);% % semilogy(snr,pb1,'-rd','LineWidth',2,...% 'MarkerEdgeColor','k',...% 'MarkerFaceColor','g',...% 'MarkerSize',5);% hold on;% semilogy(snr,pb2,'-gs','LineWidth',2,...% 'MarkerEdgeColor','k',...% 'MarkerFaceColor','c',...% 'MarkerSize',5);% hold on;semilogy(snr,pb3,'-bh','LineWidth',2,... 'MarkerEdgeColor','k',... 'MarkerFaceColor','y',... 'MarkerSize',5);hold on; % pb4(snr)=mean(ber4);% % semilogy(snr,pb4,'^--','LineWidth',2,... % 'MarkerEdgeColor','k',...% 'MarkerFaceColor','r',...% 'MarkerSize',5);% hold on;% % semilogy(snr,pb1,'r*-');% hold on;% semilogy(snr,pb2,'g*-');% hold on;% semilogy(snr,pb3,'k^-');% hold on;% semilogy(snr,pb4,'ko-');grid on;hold on;%symerr(x,y);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -