⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 alamouti_space_time_coding.m

📁 space time coding-alamouti scheme
💻 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 + -