BPSK误码率的Matlab仿真实验作者:黄准南京航空航天大学,江苏省南京市430062摘要:对于刚刚从事通信领域研究性工作的研究生来说,很有必要通过Matlab强大的仿真功能来强化理解通信信号处理的过程。本文正是通过对BPSK的Matlab仿真来提供一个比较好的实例。关键词:BPSK,高斯白噪声,带通滤波器,载波,抽样判决1BPSK的理论分析1.1基本原理图1.1BPSK相干解调原理框图输入信号A(t)可表示为:NbnNTtgatA)(*)((1.1-1)式中)(bNTtg为矩形波,而na表达式如下:对A(t)进行傅里叶变换,得到A(t)的功率谱密度)(fps(式中Ts为码元时间长度):加法器s(t)相乘器BPF相乘器LPF抽样判决A(t)WGNt0cos定时脉冲A(t)t0cos得到A(t)的频谱图如1.2所示(图中Tb为码元时间长度)图1.2矩形基带信号频谱A(t)与载波相乘:twtAtsccos*)()(其频谱图如图1.3所示:图1.3图中fc为载波频率,fs=1/Tb=Rb(码速率),故带通滤波器的中心频率为fc,带宽至少为2fs。经过带通滤波器的高斯白噪声变成了窄带高斯信号,可以表示为:经过带通滤波器后的信号为y(t)y(t)=s(t)+n(t)与载波相乘后再经过低通滤波器滤除高频分量得到x(t)由x(t)的功率谱密度图(图1.4所示)可知,最佳判决门限为0;误码率Pe=0.5*erfc(sqrt(r));式中信噪比r=A^2/2*σ^2,σ^2为窄带高斯信号的方差,由于其均值为0,故噪声功率就是其方差。图1.4附录:clearallclcnum=5000;%码元数Rb=1000;%码速率2*Rb=fstnum=500;%没一个码元用tnum个点代替fs=Rb*tnum;%采样频率fs2*(fp+Rb)fp=100000;%载波频率t=0:1/fs:num/Rb-1/fs;%时间t的长度与间隙。panjue1=zeros(1,num);%基带传输的判决输出panjue2=zeros(1,num);%频带传输的判决输出pe1=zeros(1,15);%基带传输的误码率矩阵pe2=zeros(1,15);%频带传输的误码率矩阵a=2*(fp-2*Rb)/fs;%带通滤波器的第一截止频率b=2*(fp+2*Rb)/fs;%带通滤波器的第二截止频率s=1;%循环累加数%[a1,b1]=butter(2,[a,b]);%采用butter滤波器,得到butter滤波器的H(z)的分子分母参数noise=randn(1,num*tnum);%产生正态分布参数nwgnnoise=filter(a1,b1,noise);%对WGN进行带通滤波stdnwgn=std(nwgnnoise);%为了减少运算量。[a2,b2]=butter(2,b);%低通滤波[h1w1]=freqz(a1,b1);%带通滤波器频谱[h2w2]=freqz(a2,b2);%低通滤波器频谱%以上一段代码是为了防止加重计算机的计算量而从循环中提出来的。%forSNR_db=-5:10;in=randint(1,num);in1=2*in-1;g=ones(1,tnum);inn=upsample(in,tnum);inn=filter(g,1,inn);in2=inn*2-1;%以上一段代码产生基带信号inn=in2.*sin(2*pi*fp*t);%产生频带信号noise=randn(1,num*tnum);%产生标准正态分布的高斯白噪声信号snr=10^(SNR_db/10);%信噪比换算sigma=sqrt(1/(2*snr));%求出高斯白噪声标准差s2=in2+noise*sigma;%基带传输s1=inn+noise*sigma;%频带传输,暂未用上%带通滤波器v=filter(a1,b1,inn);%对载波信号进行带通滤波nwgnnoise=filter(a1,b1,noise);%对WGN进行带通滤波,此处分开滤波是为了对窄带高斯信号的功率进行处理nwgnnoise=nwgnnoise/stdnwgn;%使得滤波后的窄带高斯噪声任然为正态分布nwgnnoise=nwgnnoise*sigma;%改变噪声功率使其符合预设的信噪比。v=v+nwgnnoise;%经过带通滤波器后的信号v2=v.*sin(2*pi*fp*t);%与载波相乘v=filter(a2,b2,v2);%进行低通滤波i=1;%进行抽样判决whilei=numifs2(i*tnum-tnum/2)0%基带抽样判决panjue1(i)=1;elsepanjue1(i)=-1;endifv(i*tnum-tnum/2)0%频带抽样判决panjue2(i)=1;elsepanjue2(i)=-1;endi=i+1;endpe1(s)=length(find(panjue1~=in1))/num;%基带误码率pe2(s)=length(find(panjue2~=in1))/num;%频带误码率s=s+1;endfigure(1);subplot(3,2,1);pwelch(in2,[],[],[],fs);title('基带信号频谱');figure(1);subplot(3,2,2);pwelch(inn,[],[],[],fs);title('频带信号');figure(1);subplot(3,2,4);plot(w1,h1);title('带通信号频谱');figure(1);subplot(3,2,3);plot(w2,h2);title('低通信号频谱');figure(1);subplot(3,2,5);pwelch(noise,[],[],[],fs);title('高斯白噪声信号频谱');figure(1);subplot(3,2,6);pwelch(nwgnnoise,[],[],[],fs);title('窄带高斯信号频谱');figure(3);SNR_db=-5:10;pelilun=0.5*erfc(sqrt(10.^((SNR_db)./10)));semilogy(SNR_db,pe1,'-or');holdon;semilogy(SNR_db,pe2,'-ob');holdon;semilogy(SNR_db,pelilun,'-og');legend('基带误码率曲线','频带误码率曲线','理论误码率曲线');gridon;holdon;xlabel('SNR_db');ylabel('pe');