📄 bd.m
字号:
% Simulation of BD precoding
clear all;
close all;
clc
% close all
M=2;
N=2;
E=1;
Mon=1000;
dl=100; % syms_length;
SNR=[0:5:30];
snr=10.^(0.1*SNR);
er_svd=zeros(1,length(snr));
for i_M=1:Mon
H=sqrt(0.5)*(randn(M,N)+j*randn(M,N));
% 生成比特流
tx_bit=rand(1,dl*2)>0;
% 调制
mod_type='QPSK';
B=reshape(tx_bit,2,dl);
table=exp(j*[-3/4*pi 3/4*pi 1/4*pi -1/4*pi]); % Gray vector;
table=table([0 1 3 2]+1);
table_E=trace(table*table')/length(table);
table=table/sqrt(table_E);
mod_syms=table([2 1]*B+1);
[U,S,V]=svd(H);
for i_s=1:length(snr)
noise=sqrt(E/snr(i_s))*sqrt(0.5)*(randn(M,dl)+j*randn(M,dl));
W=U'*H*V*mod_syms;
Y=W+noise;
% 判决
B_svd=vec_th(Y,cons);
% 解调
rx_bit=zeros(2*size(B_svd,1) , size(B_svd,2));
bit0=real(B_svd);
bit1=imag(B_svd);
rx_bit(1:2:size(rx_bit,1))=bit0>0;
rx_bit(2:2:size(rx_bit,1))=bit1>0;
% 错误个数
er_svd(i_s)=er_svd(i_s)+sum(sum(rx_bit~=tx_bit));
end
if mod(i_M,100)==0
disp(i_M);
end
end
%figure
semilogy(SNR,er_svd/Mon/(dl*2)/N,'b-o');
legend('(2,2),L=1,SVD');
xlabel('SNR(in dB)');
ylabel('BER');
grid on;
title(['M=',num2str(M),',N=',num2str(N),',QPSK'])
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -