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

📄 stbc44.m

📁 很经典的一部教程书《Space-time codes and MIMO systems》里面有每一章节的源码!空是编码:BLAST
💻 M
字号:
function [FER,FER_uncoded,SER,SER_uncoded, BER, BER_uncoded]=stbc34(channel_model,K,Num,no_tx_antennas,no_rx_antennas,modulation)%SNR upto 20 dBsEbNo=[0:2:20];%N, M: number of transmit and receive antennasN=no_tx_antennas;M=no_rx_antennas;%initialize packet_countidx=1;h=waitbar(0,'Percentage Completed');set(h,'Position',[230 60 275.25 56.25]);set(h,'name','Please wait...');wb=9.09;for SNR=EbNo    sigma=0.5/(10^(SNR/10));       for packet_count=1:Num% we are interested in transmitting 'K' SYMBOLS not bits. Hence, K*2 for QPSK% etc.        switch (modulation)            case 'BPSK '                data=randint(K,N);                BIT=1;            case 'QPSK '                data=randint(K*2,N);                BIT=2;            case '8PSK '                data=randint(K*3,N);                BIT=3;            case '16QAM'                data=randint(K*4,N);                BIT=4;            otherwise                disp('No Modulation')        end        tx_bits=data.';temp1=[];temp=[];for i=1:N     [temp1 s P]=tx_modulate(tx_bits(i,:),modulation);    temp=[temp; temp1];    temp1=0;end%ready to transmit symbols of length 'K'X=temp.';fr_length=length(X); %block signals in the lth time slot-Block coding for G4 STBC  x0=X(:,1); x1=X(:,1:4); x2(:,1)=-X(:,2); x2(:,2)=X(:,1); x2(:,3)=-X(:,4);x2(:,4)=X(:,3); x3(:,1)=-X(:,3); x3(:,2)=X(:,4); x3(:,3)=X(:,1);x3(:,4)=-X(:,2); x4(:,1)=-X(:,4); x4(:,2)=-X(:,3); x4(:,3)=X(:,2);x4(:,4)=X(:,1); x5=conj(x1); x6=conj(x2); x7=conj(x3); x8=conj(x4);  % form the channel matrix for n=1:N     if channel_model=='AWGN    '         Hr(n,:,:)=ones(fr_length,N);     else         Hr(n,:,:)=(randn(fr_length,N)+j*randn(fr_length,N))/sqrt(2);     end end        for n=1:N%transmission matrix   H=reshape(Hr(n,:,:),fr_length,N);Habs(:,n)=sum(abs(H).^2,2); %received signal per receiver antenna    r1(:,n)=sum(H.*x1,2)/sqrt(N)+sqrt(sigma)*(randn(fr_length,1)+j*randn(fr_length,1)); r2(:,n)=sum(H.*x2,2)/sqrt(N)+sqrt(sigma)*(randn(fr_length,1)+j*randn(fr_length,1));  r3(:,n)=sum(H.*x3,2)/sqrt(N)+sqrt(sigma)*(randn(fr_length,1)+j*randn(fr_length,1)); r4(:,n)=sum(H.*x4,2)/sqrt(N)+sqrt(sigma)*(randn(fr_length,1)+j*randn(fr_length,1));  r5(:,n)=sum(H.*x5,2)/sqrt(N)+sqrt(sigma)*(randn(fr_length,1)+j*randn(fr_length,1)); r6(:,n)=sum(H.*x6,2)/sqrt(N)+sqrt(sigma)*(randn(fr_length,1)+j*randn(fr_length,1));  r7(:,n)=sum(H.*x7,2)/sqrt(N)+sqrt(sigma)*(randn(fr_length,1)+j*randn(fr_length,1)); r8(:,n)=sum(H.*x8,2)/sqrt(N)+sqrt(sigma)*(randn(fr_length,1)+j*randn(fr_length,1));% demodulate the received signals  z1_1(:,n)=r1(:,n).*conj(H(:,1))+r2(:,n).*conj(H(:,2))+r3(:,n).*conj(H(:,3))+r4(:,n).*conj(H(:,4));  z1_2(:,n)=conj(r5(:,n)).*H(:,1)+conj(r6(:,n)).*H(:,2)+conj(r7(:,n)).*H(:,3)+conj(r8(:,n)).*H(:,4);  z1(:,n)=z1_1(:,n)+z1_2(:,n);    z2_1(:,n)=r1(:,n).*conj(H(:,2))-r2(:,n).*conj(H(:,1))-r3(:,n).*conj(H(:,4))+r4(:,n).*conj(H(:,3));  z2_2(:,n)=conj(r5(:,n)).*H(:,2)-conj(r6(:,n)).*H(:,1)-conj(r7(:,n)).*H(:,4)+conj(r8(:,n)).*H(:,3);  z2(:,n)=z2_1(:,n)+z2_2(:,n);    z3_1(:,n)=r1(:,n).*conj(H(:,3))+r2(:,n).*conj(H(:,4))-r3(:,n).*conj(H(:,1))-r4(:,n).*conj(H(:,2));  z3_2(:,n)=conj(r5(:,n)).*H(:,3)+conj(r6(:,n)).*H(:,4)-conj(r7(:,n)).*H(:,1)-conj(r8(:,n)).*H(:,2);  z3(:,n)=z3_1(:,n)+z3_2(:,n);    z4_1(:,n)=r1(:,n).*conj(H(:,4))-r2(:,n).*conj(H(:,3))+r3(:,n).*conj(H(:,2))-r4(:,n).*conj(H(:,1));  z4_2(:,n)=conj(r5(:,n)).*H(:,4)-conj(r6(:,n)).*H(:,3)+conj(r7(:,n)).*H(:,2)-conj(r8(:,n)).*H(:,1);  z4(:,n)=z4_1(:,n)+z4_2(:,n);end%uncoded(1,1)r01=H(:,1).*x0+sqrt(sigma)*(randn(fr_length,1)+j*randn(fr_length,1));  %form estimatesfor m=1:P   d01(:,m)=abs(r01-H(:,1)*s(m)).^2; %uncoded signal%coded signals          d1(:,m)=abs(sum(z1,2)-s(m)).^2+(-1+sum(Habs,2))*abs(s(m))^2;   d2(:,m)=abs(sum(z2,2)-s(m)).^2+(-1+sum(Habs,2))*abs(s(m))^2;   d3(:,m)=abs(sum(z3,2)-s(m)).^2+(-1+sum(Habs,2))*abs(s(m))^2;   d4(:,m)=abs(sum(z4,2)-s(m)).^2+(-1+sum(Habs,2))*abs(s(m))^2;end% determine the minimum of estimates      %decision for detecting uncoded      [y0,i0]=min((d01),[],2);      s0d=s(i0).';            clear d01       %decision for detecting s1           [y1,i1]=min(d1,[],2);      s1d=s(i1).';            clear d1%decision for detecting s2           [y2,i2]=min(d2,[],2);      s2d=s(i2).';            clear d2%decision for detecting s3           [y3,i3]=min(d3,[],2);      s3d=s(i3).';            clear d3%decision for detecting s4           [y4,i4]=min(d4,[],2);      s4d=s(i4).';            clear d4% form received symbols        Xd=[s1d s2d s3d s4d];%determine symbol errors   error_un(packet_count)=sum(X(:,1)~=s0d);% for uncodedtemp1=X>0;temp2=Xd>0;error(packet_count)=sum(sum(temp1~=temp2));% for coded       end% end of FOR loop for "packet_count"%calculate FER, SER and BER for current idx%for uncoded signal  SER_uncoded(idx)=sum(error_un)/(Num*K);  BER_uncoded(idx)=SER_uncoded(idx)/BIT;  FER_uncoded(idx)=SER_uncoded(idx)*K;%for coded signal  SER(idx)=sum(error)/(Num*K);  BER(idx)=SER(idx)/BIT;  FER(idx)=SER(idx)*K;  %increment idx    idx=idx + 1;  str_bar=[num2str(wb) '% Completed'];waitbar(wb/100,h,str_bar);wb=wb+9.09;  end% end of FOR loop for SNR   close(h);

⌨️ 快捷键说明

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