h0=sqrt(0.5).*(randn(1,k/2)+j.*randn(1,k/2));
h1=sqrt(0.5).*(randn(1,k/2)+j.*randn(1,k/2));
s0=(pskmod(S0,2))/sqrt(2);
s1=(pskmod(S1,2))/sqrt(2);
R0=h0.*s0+h1.*s1;
R1=-conj(s1).*h0+h1.*conj(s0);
for i=1:length(SNRindB)
i
snr=10^(SNRindB(i)/10);
sgma=sqrt(1/snr/2);
r0=(R0+sgma.*(randn(1,k/2)+j*randn(1,k/2)));
r1=(R1+sgma.*(randn(1,k/2)+j*randn(1,k/2)));
s_0=conj(h0).*r0+h1.*conj(r1);
s_1=conj(h1).*r0-h0.*conj(r1);
m0=pskdemod(s_0,2);
m1=pskdemod(s_1,2);
er0(i)=nnz(S0-m0);
er1(i)=nnz(S1-m1);
err(i)=er0(i)+er1(i);
end
semilogy(SNRindB,err/k, '-r+');
grid on
xlabel('SNR, dB');
ylabel('BER');
hold on
% toc;
麻烦再问下sgma=sqrt(1/snr/2); 这里为什么要除2呢?
还有程序中取了k=1000000;(我忘了贴上去)这个k是什么意思呀?
万分感谢!!!
1.如果不加系数复基带信号功率是实信号功率的两倍,所以除以一个根2。
2.k应该就是表示码元个数。因为你要做蒙特卡洛实验,所以选择这么多码元,最后统计误码率用的。