📄 alamouti_space_frequency_coding1.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 + -