📄 alamouti.m
字号:
clear;
clf;
frame=130; packet=4000; NTx=2; NRx=1; BIT=2;
EbN0=[0:2:30]; sq_NTx=sqrt(NTx); sq2=sqrt(2);
for i_SNR=1:length(EbN0)
SNR=EbN0(i_SNR); sigma=0.5/(10^(SNR/10)); sq_sigma=sqrt(sigma);
for p_count=1:length(packet)
symbol_data=randint(frame*BIT, NTx);
tx_bits=symbol_data.'; tmp=[]; tmp1=[];
for i=1:NTx
[tmp1,s,P]=modulator(tx_bits(i,:),BIT); tmp=[tmp; tmp1];
end
X=tmp.'; x0=X(:,1); x1=X; x2=[-conj(X(:,2)) conj(X(:,1))]; frlg=length(X);
for n=1:NTx
Hr(n,:,:)=(randn(frlg,NTx)+j*randn(frlg,NTx))/sq2;
end
H=reshape(Hr(n,:,:),frlg,NTx); Habs(:,n)=sum(abs(H).^2,2);
r1=sum(H.*x1,2)/sq_NTx+sq_sigma*(randn(frlg,1)+j*randn(frlg,1));
r2=sum(H.*x2,2)/sq_NTx+sq_sigma*(randn(frlg,1)+j*randn(frlg,1));
z1=r1.*conj(H(:,1))+conj(r2).*H(:,2);
z2=r1.*conj(H(:,2))-conj(r2).*H(:,1);
for m=1:P
d1(:,m)=abs(sum(z1,2)-s(m)).^2+(-1+sum(Habs,2))*abs(s(m))^2;
d2(:,m)=abs(sum(z2,2)-s(m)).^2+(-1+sum(Habs,2))*abs(s(m))^2;
end
[y1,i1]=min(d1,[],2); s1d=s(i1).'; clear d1
[y2,i2]=min(d2,[],2); s2d=s(i2).'; clear d2
Xd=[s1d s2d]; tmp1=X>0; tmp2=Xd>0;
error(p_count)=sum(sum(tmp1~=tmp2));
end
BER(i_SNR)=sum(error)/(packet*frame*BIT);
end
figure(1), semilogy(EbN0,BER,'s'), axis([EbN0([1 end]) 1e-6 1e0]); grid on; hold on;
xlabel('SNR(dB)'); ylabel('BER');
semilogy(EbN0,BER,'b'), axis([EbN0([1 end]) 1e-6 1e0]); hold on;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -