📄 blast_transmitter.m
字号:
function Ps=BLAST_transmitter(ant_num,rx_num,sub_num,dK,pre_ratio,pilot_num,data_num,fd,deltaT,Lh,Cons,Tdata,SNR)
%%%%%%%%%%%%%%%%%%%%%% OFDM
Ps=zeros(1,length(SNR));
data=reshape(Tdata,ant_num,length(Tdata)/ant_num);
FRAME_NUM=length(Tdata)/data_num/ant_num;
pilot=Cons(2*round(rand(ant_num,pilot_num*FRAME_NUM))+round(rand(ant_num,pilot_num*FRAME_NUM))+1);
[pilot_position, Tx_data]=OFDM_tx1(pilot,pilot_num,data,data_num,dK,ant_num,sub_num,pre_ratio,FRAME_NUM);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%channel
ht=Tap_Rayleigh_Jakes(fd,deltaT,length(Tx_data),ant_num,rx_num);
R=zeros(rx_num,length(Tx_data));
for k=1:1:rx_num
rd=zeros(size(Tx_data));
rd=Tx_data.*ht((k-1)*ant_num+1:k*ant_num,:);
for rn=1:1:ant_num
R(k,:)=R(k,:)+rd(rn,:);
end
end
for snr=1:1:length(SNR)
SNR(snr)
RD=zeros(size(R));
Es=zeros(1,rx_num);
Noise=zeros(size(R));
for rn=1:1:rx_num
Es(rn)=(R(rn,:)*R(rn,:)')/length(R(rn,:));
Noise(rn,:)=sqrt(Es(rn)/(10^(SNR(snr)/10))/2)*(randn(1,length(R))+randn(1,length(R))*i);
end
No=Es(1)/(10^(SNR(snr)/10));
RD=R+Noise;
%%%%%%%%%%receiver
[H,tx_data]=OFDM_rx(ant_num,rx_num,FRAME_NUM,sub_num,pre_ratio,pilot,RD,pilot_position,Lh,pilot_num,data_num);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
Rx=zeros(length(Tdata),1);
for k=1:1:length(tx_data)
Rd=tx_data(k,:).';
h=reshape(H(k,:),ant_num,rx_num).';
%Rx(M*(k-1)+1:M*k,1)=ZFdecode(Rd,h,Cons);
%Rx(M*(k-1)+1:M*k,1)=QR_ZF_decode(Rd,h,Cons);
%Rx(M*(k-1)+1:M*k,1)=MMSEdecode(Rd,h,Cons,No);
Rx(ant_num*(k-1)+1:ant_num*k,1)=QR_MMSE_decode(Rd,h,Cons,No);
end
Rdata=reshape(Rx,1,length(Tdata));
error=0;
for k=1:1:length(Tdata)
if Rdata(k)~=Tdata(k);
error=error+1;
end
end
Ps(snr)=error/length(Tdata);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -