📄 chesti.asv
字号:
clear
tic
niters=100;
LogEbNo=0:5:20; %信噪比
len=length(LogEbNo);
for type=1:3
type
for EbNoindex=1:len
snr=LogEbNo(EbNoindex)
%%for iters=1:niters
avgpower=0.5;%平均衰落功率
Fc=2e9; %载波频率
N=30;
ha=fade(niters,avgpower);
hb=fade(niters,avgpower);
for iters=1:niters
bitstreamlength=N;
bitstream=zeros(1,bitstreamlength);
bitstream=randn(1,bitstreamlength)>0.5;
bitstream(1:2)=[1,1];
sr0=2*bitstream-1; %BPSK调制
s_pilot=[1,1];%导频序列
h0=ha(iters);
h1=hb(iters); %衰落信道
EbNo=10^(LogEbNo(EbNoindex)/10);
Eb=sum(sr0.*sr0)/(bitstreamlength);
No=Eb/EbNo;
s0=sr0/sqrt(2);
ro=zeros(1,bitstreamlength/2);
r1=zeros(1,bitstreamlength/2);
for index=1:bitstreamlength/2,
ro(index)=h0*s0(2*index-1)+h1*s0(2*index);
%%ro(i)=ro(i)+sqrt(No/2)*snoisy(2*i-1);
r1(index)=(-1)*h0*s0(2*index)+h1*s0(2*index-1);
%%r1(i)=r1(i)+sqrt(No/2)*snoisy(2*i);
end
ro2=awgnchannel(ro,No);
r12=awgnchannel(r1,No);
X1=[1,0;0,1];
X2=[0,1;-1,0];
r=zeros(1,bitstreamlength);
for l=1:bitstreamlength/2,
r(2*l-1)=ro2(l);
r(2*l)=r12(l);
end
switch type
case 1
H=[h0,h1];
case 2
H=trained(r,s_pilot,X1,X2);
case 3
H=semiblind(r,s_pilot,X1,X2);
otherwise
beep;
disp('You used invalid type')
end
ho0=H(1);
h11=H(2);
so=zeros(1,bitstreamlength);
for index=1:bitstreamlength/2,
so(2*index-1)=ho0*ro2(index)+h11*r12(index);
so(2*index)=h11*ro2(index)-ho0*r12(index);
end
srr=receive(so);
st=(srr+1)/2;
errors=sum(st~=bitstream);
ber(iters)=errors/bitstreamlength;
end
avber(EbNoindex)=sum(ber)/niters;
end
BERSTBC(type,:)=avber;
end
berstbc=BERSTBC(1,:)
bertrained=BERSTBC(2,:)
bersemiblind=BERSTBC(3,:)
semilogy(LogEbNo,BERSTBC(1,:),'r-+',LogEbNo,BERSTBC(2,:),'b-*',LogEbNo,BERSTBC(3,:),'k-v');grid
axis([0 20 10^(-5) 10^0]);
legend('STBC ','STBC trained','STBC semiblind');
toc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -