|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 eecsseudl 于 2013-4-29 10:07 编辑
%仿真实现QPSK在不同信噪比SNR下传输误码率
%第一步设置数据,采样频率等相关参数
Fd=1;Fs=1;modulation='psk';
N=Fs/Fd;
M=4; %M元正交振幅调制参数,当M=2时为BPSK仿真
k=log2(M);
SNRpBit=0:2:10; %设置仿真信噪比的范围
SNR=SNRpBit+10*log10(k);
symbPerIter=4096; %设置每次迭代符号的次数
iters=3; %迭代次数
expSymErrs=60; %设置预期误差符号数目
numSymbTot=symbPerIter*iters;
%设置均匀随即数及高斯白噪产生的"随即种子"
rand('state',123456789);randn('state',987654321);
%计算理论的比特误差和理论符号误差SER与BER曲线
expBER=0.5.*erfc(sqrt(10.^(SNRpBit(.*0.1)));
expSER=1-(1-expBER).^k;
semilogy(SNRpBit(,expSER,'k-',SNRpBit(,expBER,'k:');
legend('理论的SER','理论的BER',0);
title('基带QPSK的性能仿真');
xlabel('SNR/bit(dB)');ylabel('SER and BER');hold on;
%产生GRAY码编码与解码序列
grayencod=bitxor([0:M-1],floor([0:M-1]/2));
[dummy graydecod]=sort(grayencod); graydecod=graydecod-1;
for(idx2=[1:length(SNR)]), %仿真不同SNR值时的BER和SER
idx=1;
while ((idx<=iters)|(sum(errSym)<=expSymErrs))
%第二步: 产生信号及GRAY编码
msg_orig=randsrc(symbPerIter,1,[0:M-1]);
msg_gr_orig=grayencod(msg_orig+1)';
%第三步:数字基带调制
msg_tx=dmodce(msg_gr_orig,Fd,Fs,modulation,M);
%第四步:对调制信号添加高斯噪声
msg_rx=awgn(msg_tx,SNR(idx2)-10*log10(1.*N),'measured',[],'dB');
%第五步:解调基带调制信号
msg_gr_demod=ddemodce(msg_rx,Fd,Fs,modulation,M);
%第六步:Gray码解码
msg_demod=graydecod(msg_gr_demod+1);
%计算本次迭代的BER,SER
[errBit(idx) ratBit(idx)] = biterr(msg_orig,msg_demod,k);
[errSym(idx) ratSym(idx)] = symerr(msg_orig,msg_demod);
idx=idx+1; pause(.1);
end
%计算各次迭代后的平均的BER,SER
errors(idx2,:)=[sum(errBit),sum(errSym)];
ratio(idx2,:)=[mean(ratBit),mean(ratSym)];
%绘制仿真的SER,BER曲线
semilogy(SNRpBit([1:size(ratio(:,2),1)]),ratio(:,2),'k*',...
SNRpBit([1:size(radio(:,1),1)]),radio(:,1),'ko');
legend('理论的SER','理论的BER','仿真的SER','仿真的BER',0);
pause(.1)
end
hold off;
高手帮我看看 哪里不对, 紧急~~谢谢~~~
|
|