% % [ 预处理]
clc;
clear;
close all;
% % [ 配置参数]
N= 3000000 ; % 数据点数(个)
SNR_dB= 0 : 1 : 45 ; % 信噪比(dB形式)
SNR= 10. ^ ( SNR_dB/ 10 ) ; % 信噪比(一般形式,Eb/ N0)
Ps= 1 ; % 信号功率,功率为1 时其dB形式为0 。
Pn= Ps. / SNR; % 噪声功率
Error_Count_1T1R= zeros ( 1 , length ( SNR_dB) ) ; % 码元错误个数(1 发1 收)
Error_Count_2T1R= zeros ( 1 , length ( SNR_dB) ) ; % 码元错误个数(2 发1 收)
Error_Count_1T2R= zeros ( 1 , length ( SNR_dB) ) ; % 码元错误个数(1 发2 收)
SER_1T1R= zeros ( 1 , length ( SNR_dB) ) ; % 仿真误码率(1 发1 收)
SER_2T1R= zeros ( 1 , length ( SNR_dB) ) ; % 仿真误码率(2 发1 收)
SER_1T2R= zeros ( 1 , length ( SNR_dB) ) ; % 仿真误码率(1 发2 收)
Demod_1T1R= zeros ( 1 , N) ; % 解调信号(1 发1 收)
Demod_2T1R= zeros ( 2 , N) ; % 解调信号(2 发1 收)
Demod_1T2R= zeros ( 1 , N) ; % 解调信号(1 发2 收)
yn_1T1R= zeros ( 1 , N) ; % 接收信号(1 发1 收)
yn_2T1R= zeros ( 2 , N) ; % 接收信号(2 发1 收)
yn_1T2R= zeros ( 1 , N) ; % 接收信号(1 发2 收)
h_1T1R= ( randn ( 1 , N) + 1 i* randn ( 1 , N) ) ; % 复高斯瑞利信道, 均值为0 + 0 i,方差为2 (1 发1 收)
h_2T1R= ( randn ( 2 , N) + 1 i* randn ( 2 , N) ) ; % 复高斯瑞利信道, 均值为0 + 0 i,方差为2 (2 发1 收)
h_1T2R= ( randn ( 2 , N) + 1 i* randn ( 2 , N) ) ; % 复高斯瑞利信道, 均值为0 + 0 i,方差为2 (1 发2 收)
h_2T1R= h_2T1R. / sqrt ( 2 ) ; % 信道能量归一化,方差为1 (2 发1 收)
h_1T2R= h_1T2R. / sqrt ( 2 ) ; % 信道能量归一化,方差为1 (1 发2 收)
h_1T1R= h_1T1R. / sqrt ( 2 ) ; % 信道能量归一化,方差为1 (1 发1 收)
% % 1 【1 发1 收】
sn_1T1R= round ( rand ( 1 , N) ) ; % 原信号: 0 , 1 序列sn
sn1_1T1R= round ( ( sn_1T1R- 1 / 2 ) * 2 ) ; % 原信号:- 1 , 1 序列sn1
for i= 1 : length ( SNR_dB)
noise_1T1R = sqrt ( Pn ( i) / 2 ) * ( randn ( 1 , N) + 1 i* randn ( 1 , N) ) ; % 高斯白噪声
% yn_1T1R= sn1_1T1R+ noise_1T1R. / h_1T1R;
r_1T1R= h_1T1R. * sn1_1T1R+ noise_1T1R; % 接收
yn_1T1R= r_1T1R. / h_1T1R; % 判决变量
% % % 解码
for j= 1 : N
if ( yn_1T1R ( j) > 0 )
Demod_1T1R ( j) = 1 ; % 接收信号大于0 ,则判1
else
Demod_1T1R ( j) = 0 ; % 接收信号小于0 ,则判0
end
end
% % % 计算错误比特个数
for j= 1 : N
if ( Demod_1T1R ( j) ~ = sn_1T1R ( j) )
Error_Count_1T1R ( i) = Error_Count_1T1R ( i) + 1 ;
end
end
% % % 计算误码率
SER_1T1R ( i) = Error_Count_1T1R ( i) / N; % 仿真误码率
end
% % 2 【2 发1 收 空时码】
sn_2T1R= round ( rand ( 2 , N) ) ; % 原信号: 0 , 1 序列sn
sn1_2T1R= ( 1 / sqrt ( 2 ) ) . * round ( ( sn_2T1R- 1 / 2 ) * 2 ) ; % 原信号
for i= 1 : length ( SNR_dB)
% % % 生成信号
noise_1= sqrt ( Pn ( i) / 2 ) * ( randn ( 1 , N) + 1 i* randn ( 1 , N) ) ; % 第一个信道上的噪声
noise_2= sqrt ( Pn ( i) / 2 ) * ( randn ( 1 , N) + 1 i* randn ( 1 , N) ) ; % 第二个信道上的噪声
% noise_2T1R ( 1 , : ) = ( conj ( h_2T1R ( 1 , : ) ) . * noise_1+ h_2T1R ( 2 , : ) . * conj ( noise_2) ) . / ( sum ( abs ( h_2T1R) . ^ 2 ) ) ; % ( h1* n1+ h2n2* ) / ( || h|| )
% noise_2T1R ( 2 , : ) = ( conj ( h_2T1R ( 2 , : ) ) . * noise_1- h_2T1R ( 1 , : ) . * conj ( noise_2) ) . / ( sum ( abs ( h_2T1R) . ^ 2 ) ) ; % ( h2* n1- h1n2* ) / ( || h|| )
% yn_2T1R= sn1_2T1R+ noise_2T1R;
r1_2T1R= h_2T1R ( 1 , : ) . * sn1_2T1R ( 1 , : ) + h_2T1R ( 2 , : ) . * sn1_2T1R ( 2 , : ) + noise_1; % t1时刻接收
r2_2T1R= - h_2T1R ( 1 , : ) . * conj ( sn1_2T1R ( 2 , : ) ) + h_2T1R ( 2 , : ) . * conj ( sn1_2T1R ( 1 , : ) ) + noise_2; % t2时刻接收
yn_2T1R ( 1 , : ) = ( conj ( h_2T1R ( 1 , : ) ) . * r1_2T1R+ h_2T1R ( 2 , : ) . * conj ( r2_2T1R) ) . / ( sum ( abs ( h_2T1R) . ^ 2 ) ) ; % 判决变量
yn_2T1R ( 2 , : ) = ( conj ( h_2T1R ( 2 , : ) ) . * r1_2T1R- h_2T1R ( 1 , : ) . * conj ( r2_2T1R) ) . / ( sum ( abs ( h_2T1R) . ^ 2 ) ) ;
% % % 解码
for j= 1 : 2
for k= 1 : N
if ( yn_2T1R ( j, k) > 0 )
Demod_2T1R ( j, k) = 1 ; % 接收信号大于0 ,则判1
else
Demod_2T1R ( j, k) = 0 ; % 接收信号小于0 ,则判0
end
end
end
% % % 计算错误比特个数
for j= 1 : 2
for k= 1 : N
if ( Demod_2T1R ( j, k) ~ = sn_2T1R ( j, k) )
Error_Count_2T1R ( i) = Error_Count_2T1R ( i) + 1 ;
end
end
end
% % % 计算误码率
SER_2T1R ( i) = Error_Count_2T1R ( i) / N/ 2 ; % 仿真误码率
end
% % 3 【1 发2 收】
sn_1T2R= round ( rand ( 1 , N) ) ; % 原信号: 0 , 1 序列sn
sn1_1T2R= [ round ( ( sn_1T2R- 1 / 2 ) * 2 ) ; round ( ( sn_1T2R- 1 / 2 ) * 2 ) ] ; % 原信号:- 1 , 1 序列sn1
for i= 1 : length ( SNR_dB)
% % % 生成信号
noise_1T2R= sqrt ( Pn ( i) / 2 ) * ( randn ( 2 , N) + 1 i* randn ( 2 , N) ) ;
r_1T2R= h_1T2R. * sn1_1T2R+ noise_1T2R; % 接收信号
% yn_1T2R= ( conj ( h_1T2R ( 1 , : ) ) . * ( h_1T2R ( 1 , : ) . * sn1_1T2R ( 1 , : ) + noise_1T2R ( 1 , : ) ) + . . . % y= [ h1* ( h1x1+ n1) + h2* ( h2x2+ n2) ] / ( h1^ 2 + h2^ 2 )
% conj ( h_1T2R ( 2 , : ) ) . * ( h_1T2R ( 2 , : ) . * sn1_1T2R ( 2 , : ) + noise_1T2R ( 2 , : ) ) ) . / . . .
% ( abs ( h_1T2R ( 1 , : ) ) . ^ 2 + abs ( h_1T2R ( 2 , : ) ) . ^ 2 ) ;
yn_1T2R= ( conj ( h_1T2R ( 1 , : ) ) . * r_1T2R ( 1 , : ) + conj ( h_1T2R ( 2 , : ) ) . * r_1T2R ( 2 , : ) ) . / ( sum ( abs ( h_1T2R) . ^ 2 ) ) ;
% % % 解码
for j= 1 : N
if ( yn_1T2R ( j) > 0 )
Demod_1T2R ( j) = 1 ; % 接收信号大于0 ,则判1
else
Demod_1T2R ( j) = 0 ; % 接收信号小于0 ,则判0
end
end
% % % 计算错误比特个数
for j= 1 : N
if ( Demod_1T2R ( j) ~ = sn_1T2R ( j) )
Error_Count_1T2R ( i) = Error_Count_1T2R ( i) + 1 ;
end
end
% % % 计算误码率
SER_1T2R ( i) = Error_Count_1T2R ( i) / N; % 仿真误码率
end
% % [ 4 、显示结果]
semilogy ( SNR_dB, SER_1T1R, 'go-' , SNR_dB, SER_2T1R, 'r*-' , SNR_dB, SER_1T2R, 'k*-' ) ;
axis ( [ 0 45 10 ^ - 5 10 ^ 0 ] ) ;
legend ( "1发1收" , "2发1收" , "1发2收" ) ;
xlabel ( '信噪比SNR/dB' ) ; % 横轴坐标
ylabel ( '误码率BER' ) ; % 纵轴坐标
title ( "BPSK调制信号在复高斯瑞利信道下Alamouti的误码率分析" ) ;
grid on; % 显示表格线
% yn_1T2R= ( r_1T2R* conj ( h_1T2R' ) ) . / ( sum ( abs ( h_1T2R) . ^ 2 ) ) ; % 判决变量. / ( sum ( abs ( h_1T2R) . ^ 2 ) )