?? stbc14_qpsk_ber.m
字號:
hold on
%SNR upto 20 dBs
EbNo=[0:2:20];
%N, M: number of transmit and receive antennas
%N=no_tx_antennas;
N=1;
%M=no_rx_antennas;
M=4;
%initialize count
idx = 1;
Num=100;
K=1000;
%channel_model='AWGN ';%信道模型是高斯信道
model='Rayleigh';%信道模型是Rayleigh
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.
data=randint(K*2,N);
BIT=2;
tx_bits=data.';
%[temp s P]=tx_modulate(tx_bits,modulation);
bits_in=tx_bits;
full_len = length(bits_in);
% Angle [pi/4 3*pi/4 -3*pi/4 -pi/4] corresponds to
% Gray code vector [00 10 11 01], respectively.
table=exp(j*[-3/4*pi 3/4*pi 1/4*pi -1/4*pi]); % generates QPSK symbols
table=table([0 1 3 2]+1); % Gray code mapping pattern for QPSK symbols
inp=reshape(bits_in,2,full_len/2);
mod_symbols=table([2 1]*inp+1); % maps transmitted bits into QPSK symbols
P=4;% 4 constellation points
temp=mod_symbols;
s=table;
%ready to transmit symbols of length 'K'
X=temp.';
fr_length=length(X);
% MRC
x0=X;
% form the channel matrix
%if channel_model=='AWGN '
% Hr=ones(fr_length,M);
%else
Hr=(randn(fr_length,M)+j*randn(fr_length,M))/sqrt(2);
%end
%transmission matrix
H=reshape(Hr,fr_length,M);
Habs=sum(abs(H).^2,2);
%received signal per receiver antenna
r1=sum(H(:,1).*x0,2)/sqrt(N)+sqrt(sigma)*(randn(fr_length,1)+j*randn(fr_length,1));
r2=sum(H(:,2).*x0,2)/sqrt(N)+sqrt(sigma)*(randn(fr_length,1)+j*randn(fr_length,1));
r3=sum(H(:,3).*x0,2)/sqrt(N)+sqrt(sigma)*(randn(fr_length,1)+j*randn(fr_length,1));
r4=sum(H(:,4).*x0,2)/sqrt(N)+sqrt(sigma)*(randn(fr_length,1)+j*randn(fr_length,1));
% demodulate the received signals
z1=r1.*conj(H(:,1))+r2.*conj(H(:,2))+r3.*conj(H(:,3))+r4.*conj(H(:,4));
%uncoded(1,1)
r01=H(:,1).*x0+sqrt(sigma)*(randn(fr_length,1)+j*randn(fr_length,1));
%form estimates
for m=1:P
d01(:,m)=abs(r01-H(:,1)*s(m)).^2; %uncoded signal
%coded signal
d1(:,m)=abs(sum(z1,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
% form received symbols
Xd=[s1d];
%determine symbol errors
error_un(packet_count)=sum(X(:,1)~=s0d);% for uncoded
temp1=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;
end% end of FOR loop for SNR
%semilogy(EbNo,SER,'-.')
%hold on
semilogy(EbNo,BER,'+')
%legend('SER','BER')
clc
clear
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -