📄 jafarkhani.m
字号:
function DSTBC
Nt=2;%发射天线数为2
Nr=1;%接收天线数为1
min_snr=0;%最小的信噪设定为15
max_snr=10;%最大的信噪设定为15
symbol_per_frame=130;%每一帧的符号数为130个
tot_frame_tx=zeros(1,(max_snr-min_snr)/2+1);%在每一个snr下传送的帧的个数
tot_err_bit=zeros(1,(max_snr-min_snr)/2+1);%在每一个snr下bit错误的个数
for snr=min_snr:2:max_snr % snr循环
display(snr);
for i=1:1000 % 在某一snr下多次循环
tot_frame_tx((snr-min_snr)/2+1) = tot_frame_tx((snr-min_snr)/2+1)+1;%计算传送的帧的个数
bit_sequence = rand(1,symbol_per_frame)>0.5; %生成伪随机二进制待发送序列
mapping_sequence =Mapping(bit_sequence); %二进制信道与QPSK信号的转换
sig = sqrt(1/(10^(snr/10))); %归一化的噪声能量
addtional_gaussian_noise =sig * (randn(Nr,Nt,symbol_per_frame+1) + j*randn(Nr,Nt,symbol_per_frame+1))/sqrt(2);%生成加性高斯噪声
H=RayleighCH(Nr,Nt); %生成具有瑞利分布特性的信道衰落系数
X1=[mapping_sequence(1) -conj(mapping_sequence(2)); mapping_sequence(2) conj(mapping_sequence(1))]; % 第一个参考信号
R1=H*X1 + addtional_gaussian_noise(:,:,symbol_per_frame+1);
for k=3:2:symbol_per_frame+1
X=[mapping_sequence(k) -conj(mapping_sequence(k+1)); mapping_sequence(k+1) conj(mapping_sequence(k))]; %接收信号
R=H*X+ addtional_gaussian_noise(:,:,k-2);
r1=R(1)*conj(R1(1))+conj(R(2))*R1(2);
r2=R(1)*conj(R1(2))-conj(R(2))*R1(1);
d2=[r1,r2];
dh = [1 0;0 1; 0 -1;-1 0];
D1=abs([r1 r2;r1 r2;r1 r2;r1 r2;]-dh);
for m=1:4
distance(m)=abs(D1(m,1))^2+ abs(D1(m,2))^2;
end
[minnumber1 position1]=min(distance);%求出最小的距离
c1=dh(position1,1);
c2=dh(position1,2);
p=decoding(c1,c2);
x1=p(1);
x2=p(2);
if (bit_sequence(k-2)~=x1)%计算bit错误的个数
tot_err_bit((snr-min_snr)/2+1)=tot_err_bit((snr-min_snr)/2+1)+1;
end
if (bit_sequence(k-1)~=x2)
tot_err_bit((snr-min_snr)/2+1)=tot_err_bit((snr-min_snr)/2+1)+1;
end
R1=R;% 前一个接收到参考信号
end
end
end
%在不同信噪比条件下,求系统SER和BER
ber_snr=tot_err_bit./(tot_frame_tx * symbol_per_frame);
figure(1);
semilogy(min_snr:2:max_snr,ber_snr,'-o');
grid
xlabel('SNR');
ylabel('Bit Error Ratio');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -