📄 ostbc4.m
字号:
function OSTBC4
Nt=4;%发射天线数为4
Nr=1;%接收天线数为1
max_snr=20;%最大的信噪设定为15
symbol_per_frame=120;%每一帧的符号数为120个
tot_frame_tx=zeros(1,max_snr+1);
tot_err_bit=zeros(1,max_snr+1);
tot_err_symbol=zeros(1,max_snr+1);
for snr=0:max_snr
sig =sqrt(4/(10^(snr/10)));
for ii=0:1000
tot_frame_tx(snr+1) = tot_frame_tx(snr+1)+1;
bit_sequence = rand(1,symbol_per_frame * 2)>0.5; %生成伪随机二进制待发送序列
qpsk_sequence = QpskMapping(bit_sequence); %二进制信道与QPSK信号的转换
%归一化的噪声能量
addtional_gaussian_noise =sig * (randn(Nr,Nt,symbol_per_frame/3) + j*randn(Nr,Nt,symbol_per_frame/3))/sqrt(2); %生成加性高斯噪声
H=RayleighCH(Nr,Nt); %生成具有瑞利分布特性的信道衰落系数
for k=1:3:(symbol_per_frame-3)
M=1;
X=[qpsk_sequence(k) -conj(qpsk_sequence(k+1)) conj(qpsk_sequence(k+2))/sqrt(2) conj(qpsk_sequence(k+2))/sqrt(2);
qpsk_sequence(k+1) conj(qpsk_sequence(k)) conj(qpsk_sequence(k+2))/sqrt(2) -conj(qpsk_sequence(k+2))/sqrt(2);
qpsk_sequence(k+2)/sqrt(2) qpsk_sequence(k+2)/sqrt(2) (-qpsk_sequence(k)-conj(qpsk_sequence(k))+qpsk_sequence(k+1)-conj(qpsk_sequence(k+1)))/2 (qpsk_sequence(k+1)+conj(qpsk_sequence(k+1))+qpsk_sequence(k)-conj(qpsk_sequence(k)))/2;
qpsk_sequence(k+2)/sqrt(2) -qpsk_sequence(k+2)/sqrt(2) (-qpsk_sequence(k+1)-conj(qpsk_sequence(k+1))+qpsk_sequence(k)-conj(qpsk_sequence(k)))/2 -(qpsk_sequence(k)+conj(qpsk_sequence(k))+qpsk_sequence(k+1)-conj(qpsk_sequence(k+1)))/2;];
R=H*X+addtional_gaussian_noise(:,:,M); %接收信号
M=M+1;
x1=R(1,1)*conj(H(1,1))+conj(R(1,2))*H(1,2)+(R(1,4)-R(1,3))*(conj(H(1,3))-conj(H(1,4)))/2-conj(R(1,4)+R(1,3))*(H(1,3)+H(1,4))/2;
x2=R(1,1)*conj(H(1,2))-conj(R(1,2))*H(1,1)+(R(1,4)+R(1,3))*(conj(H(1,3))-conj(H(1,4)))/2+conj(R(1,4)-R(1,3))*(H(1,3)+H(1,4))/2;
x3=((R(1,1)+R(1,2))*conj(H(1,3))+(R(1,1)-R(1,2))*conj(H(1,4))+conj(R(1,3))*(H(1,1)+H(1,2))+conj(R(1,4))*(H(1,1)-H(1,2)))/sqrt(2);
dh = [1+j -1+j -1-j 1-j]/sqrt(2);
D1=abs(x1*[1 1 1 1]-dh).^2;
[minnumber1 position1]=min(D1);%求出最小的距离
X1=dh(position1); %估计出x1的值
D2=abs(x2*[1 1 1 1]-dh).^2;
[minnumber1 position2]=min(D2);
X2=dh(position2);
D3=abs(x3*[1 1 1 1]-dh).^2;
[minnumber1 position3]=min(D3);
X3=dh(position3);
if(X(1,1)~=X1) %计算自然循序mapping时bit错误的个数
tot_err_symbol(snr+1)=tot_err_symbol(snr+1)+1;
if((X(1,1)+X1)*sqrt(2)==2|(X(1,1)+X1)*sqrt(2)==-2)
tot_err_bit(snr+1)=tot_err_bit(snr+1)+2;
else
tot_err_bit(snr+1)=tot_err_bit(snr+1)+1;
end
end
if(X(2,1)~=X2)
tot_err_symbol(snr+1)=tot_err_symbol(snr+1)+1;
if((X(2,1)+X2)*sqrt(2)==2|(X(2,1)+X2)*sqrt(2)==-2)
tot_err_bit(snr+1)=tot_err_bit(snr+1)+2;
else
tot_err_bit(snr+1)=tot_err_bit(snr+1)+1;
end
end
if(X(3,1)*sqrt(2)~=X3)
tot_err_symbol(snr+1)=tot_err_symbol(snr+1)+1;
if((X(3,1)*sqrt(2)+X3)*sqrt(2)==2|(X(3,1)*sqrt(2)+X3)*sqrt(2)==-2)
tot_err_bit(snr+1)=tot_err_bit(snr+1)+2;
else
tot_err_bit(snr+1)=tot_err_bit(snr+1)+1;
end
end
end
end
end
%在不同信噪比条件下,求系统SER和BER
ser_snr=tot_err_symbol./(tot_frame_tx * symbol_per_frame) ;
ber_snr=tot_err_bit./(tot_frame_tx * symbol_per_frame*2);
figure(1);
semilogy(0:max_snr,ser_snr,'-o');
grid
hold on
semilogy(0:max_snr,ber_snr,'-*');
xlabel('SNR');
ylabel('Error Ratio');
legend('SER-SNR','BER-SNR');
title('Ideal CSI');
hold off
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -