?? stbc22_cor.m
字號:
function [FER,FER_uncoded,SER,SER_uncoded, BER, BER_uncoded]=stbc22_cor(channel_model,K,Num,alpha,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 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)); % Num -> number of packets 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') endtx_bits=data.';temp=[];temp1=[];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 coding-Alamouti x0=X(:,1);% required to verify a 1x1 system x1=X; x2(:,1)=-conj(X(:,2)); x2(:,2)=conj(X(:,1)); % 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 %matrix must remain positive definite if alpha==1 alpha=0.99; end for n=1:M%transmission matrix H=reshape(Hr(n,:,:),fr_length,N);%correlation at the receiver corr=chol([1 alpha;alpha 1]); H=corr*H.'; %premultiply for correlation at the receiver H=H.'; 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)); % demodulate the received signals z1(:,n)=r1(:,n).*conj(H(:,1))+conj(r2(:,n)).*H(:,2); z2(:,n)=r1(:,n).*conj(H(:,2))-conj(r2(:,n)).*H(:,1);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;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% form received symbols Xd=[s1d s2d]; %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 + -