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

📄 alamouti_space_frequency_coding1.m

📁 space time frequency coding-alamouti scheme
💻 M
字号:
clc;clear all;close all;N=10;% fft_size=512;% cp=64;s00=randsrc(1,N*512);  %% BPSK modulation %%l=1;    for k=1:2560            s01(l)=s00(l);        s01(l+1)=-conj(s00(l+1));            s11(l)=s00(l+1);        s11(l+1)=conj(s00(l));            l=l+2;            end           for i=1:10           s0(i,:)=s01((((i-1)*512)+1):(i*512));        s1(i,:)=s11((((i-1)*512)+1):(i*512));            endfor snr=1:1:30        for monte=1:1:10                       for a=1:4                        X1=randn(1,10);            Y1=randn(1,10);            ch(a,:)=channel(X1,Y1,10);                                            end                    h0=ch(1,:);            h1=ch(2,:);            h2=ch(3,:);            h3=ch(4,:);                   for i=1:10                                    t(1,((i-1)*512)+1:(i*512))=s0(i,1:512);            t(2,((i-1)*512)+1:(i*512))=s1(i,1:512);                                             end         r1=(sqrt(1/2)*t(1,1:end));        r2=(sqrt(1/2)*t(2,1:end));                for i=1:10                    r11(i,:)=h0(i)*r1(1,((i-1)*512+1):(i*512));            r22(i,:)=h1(i)*r2(1,((i-1)*512+1):(i*512));            r33(i,:)=h2(i)*r1(1,((i-1)*512+1):(i*512));            r44(i,:)=h3(i)*r2(1,((i-1)*512+1):(i*512));                        r01(i,:)=ifft(r11(i,:),512);            r02(i,:)=ifft(r22(i,:),512);            r03(i,:)=ifft(r33(i,:),512);            r04(i,:)=ifft(r44(i,:),512);                    r1r(i,:)=[r01(i,512-64+1:512),r01(i,1:512)];            r2r(i,:)=[r02(i,512-64+1:512),r02(i,1:512)];            r3r(i,:)=[r03(i,512-64+1:512),r03(i,1:512)];                        r4r(i,:)=[r04(i,512-64+1:512),r04(i,1:512)];                                end         %%----------------------------------------------------------------------%%                          %% ALAMOUTI scheme (SPACE FREQUENCY ENCODING) %% %%----------------------------------------------------------------------%%                                                   %% TWO TX AND ONE RX %%                                                                  for a=1:10                        p1=(r1r(a,:)*r1r(a,:)')/length(r1r(a,:));            p2=(r2r(a,:)*r2r(a,:)')/length(r2r(a,:));            p3=(r3r(a,:)*r3r(a,:)')/length(r3r(a,:));            p4=(r2r(a,:)*r2r(a,:)')/length(r2r(a,:));                        n1(a,:)=noise(p1,snr,(1*(512+64)));            n2(a,:)=noise(p2,snr,(1*(512+64)));            n3(a,:)=noise(p3,snr,(1*(512+64)));            n4(a,:)=noise(p4,snr,(1*(512+64)));                            rr1(a,:)=r1r(a,:)+n1(a,:);            rr2(a,:)=r2r(a,:)+n2(a,:);            rr3(a,:)=r3r(a,:)+n3(a,:);            rr4(a,:)=r4r(a,:)+n4(a,:);                        rx1(a,:)=rr1(a,:)+rr2(a,:);            rx2(a,:)=rr3(a,:)+rr4(a,:);                        rx01(a,:)=fft(rx1(a,65:576),512);            rx02(a,:)=fft(rx2(a,65:576),512);                    end        %         m=0;%         %         for i=1:1%             %             oro00(i,:)=r(1,(m*512)+1:(i*512));        %             %             %oro01(i,:)=t(2,(m*512)+1:(i*512));%         %             %or00(i,:)=[oro00(i,(512-64+1):512),oro00(i,1:512)]+n(1,((m*576)+1):(i*576));%             %             %or01(i,:)=[oro01(i,(512-64+1):512),oro01(i,1:512)]+n(2,((m*576)+1):(i*576));%         %             r00(i,:)=fft(r(i,65:576),512);%             %             %r01(i,:)=fft(or01(i,65:576),512);%                                 %             m=m+1;%         end                for k=1:10            for i=1:2:512                            sest3(k,i)=(conj(h0(k))*rx01(k,i))+(h1(k)*conj(rx01(k,i+1)))+(conj(h2(k))*rx02(k,i+1))+(h3(k)*conj(rx02(k,i+1)));                sest3(k,i+1)=(conj(h1(k))*rx01(k,i))-(h0(k)*conj(rx01(k,i+1)))+(conj(h3(k))*rx02(k,i+1))-(h2(k)*conj(rx02(k,i+1)));                                                 end        end        for i=1:10            sest(1,((i-1)*512+1):(i*512))=sest3(i,:);        end                    %% SIGNAL ESTIMATION %%                                    for i=1:1:(1*512)                                                            if ((dist(sest(i),-1))<(dist(sest(i),1)))                       decision(i)=-1;                    else                        decision(i)=1;                    end                                                                                                end                                    %% ERROR CALCULATION %%                error1=0;        error2=0;        error3=0;        error4=0;        error5=0;        error6=0;                        for i=1:1:(1*512)                                                            if (decision(i)~=s00(i))                       error3=error3+1;                    end                                                                            end                                                         ber3(monte)=((error3)/(10*512));                 end        pb3(snr)=mean(ber3);            endsnr=1:30;semilogy(snr,pb3,'-bh','LineWidth',2,...                        'MarkerEdgeColor','k',...                       'MarkerFaceColor','y',...                       'MarkerSize',5);hold on;  grid on;hold on;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%55N=10;fft_size=512;cp=64;s00=randsrc(1,N*256);  %% BPSK modulation %%s01=randsrc(1,N*256);  %% BPSK modulation %%i=1;l=1;m=0;for l=1:1    for k=1:256            s0(l,i)=s00((m*256)+k);        s0(l,(i+1))=-conj(s01((m*256)+k));            s1(l,i)=s01((m*256)+k);        s1(l,i+1)=conj(s00((m*256)+k));            i=i+2;        end    m=m+1;endfor snr=1:1:50        for monte=1:1:1000                       for a=1:4                        X1=randn(1,512);            Y1=randn(1,512);            ch(a,:)=channel(X1,Y1,512);                                            end                    h0=ch(1,1);            h1=ch(2,1);            h2=ch(3,1);                        h3=ch(4,1);                     %%----------------------------------------------------------------------%%                          %% 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,(512+64));%             %         end%         %         %             oro0=ifft(r(1,:),512);%             oro1=ifft(r(2,:),512);%             oro2=ifft(r(3,:),512);%             oro3=ifft(r(4,:),512);%             %             or0=[oro0((512-64+1):512),oro0(1:512)]+n0(1,:);%             %             or1=[oro0((512-64+1):512),oro0(1:512)]+n0(1,:);%             %             or2=[oro0((512-64+1):512),oro0(1:512)]+n0(1,:);%             %             or3=[oro0((512-64+1):512),oro0(1:512)]+n0(1,:);%             %             r0=fft(or0(65:576),512);            %             r1=fft(or1(65:576),512);%             r2=fft(or2(65:576),512);%             r3=fft(or3(65:576),512);%         %         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 FREQUENCY ENCODING) %% %%----------------------------------------------------------------------%%                                                   %% TWO TX AND ONE RX %%                                    rr(1,:)=(sqrt(1/2)*(h0*s0))+(sqrt(1/2)*(h1*s1));        rr(2,:)=(sqrt(1/2)*(((-1)*h0)*conj(s1)))+(sqrt(1/2)*(h1*conj(s0)));                p=0;                for a=1:2                        p=(rr(a,:)*rr(a,:)')/length(rr(a,:));                        n1(a,:)=noise(p,snr,(512+64));        end                    oro00=ifft(rr(1,:),512);                oro01=ifft(rr(2,:),512);                or00=[oro00((512-64+1):512),oro00(1:512)]+n1(1,:);        or01=[oro01((512-64+1):512),oro01(1:512)]+n1(2,:);                r00=fft(or00(65:576),512);        r01=fft(or01(65:576),512);                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,512);%         end%         %         or10=ifft(rrr(1,:),512)+n2(1,:);%         %         or11=ifft(rrr(2,:),512)+n2(2,:);%         %         or12=ifft(rrr(3,:),512)+n2(3,:);%         %         or13=ifft(rrr(4,:),512)+n2(4,:);%         %         r10=fft(or10,512);%         r11=fft(or11,512);%         r12=fft(or12,512);%         r13=fft(or13,512);%         %         %         %         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(1,i))%                        error1=error1+1;%                     end%                     %                     if (decision2(i)~=s0(1,i))%                        error2=error2+1;%                     end                                        if (decision3(i)~=s0(1,i))                       error3=error3+1;                    end                    if (decision4(i)~=s1(1,i))                       error4=error4+1;                    end                    %                     if (decision5(i)~=s0(1,i))%                        error5=error5+1;%                     end% %                     if (decision6(i)~=s1(1,i))%                        error6=error6+1;%                     end                                    end                                %             ber1(monte)=(error1/512);%             %             ber2(monte)=(error2/512);%                         ber3(monte)=((error3+error4)/(512));% semilogy(snr,pb4,'^--','LineWidth',2,... %                       'MarkerEdgeColor','k',...%                       'MarkerFaceColor','r',...%                       'MarkerSize',5);% hold on;            %             ber4(monte)=((error5+error6)/(1024));                 end    %     pb1(snr)=mean(ber1);%     %     pb2(snr)=mean(ber2);%         pb3(snr)=mean(ber3);    %     pb4(snr)=mean(ber4);        endsnr=1:30;% 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;  % 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;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -