研发埠

标题: 关于数字调制解调误码率仿真问题 [打印本页]

作者: 石磊    时间: 2013-5-28 13:44
标题: 关于数字调制解调误码率仿真问题
初来乍到,初学MATLAB,想请教下各位大神能不能帮我看看我的PSK误码率仿真的程序,在仿真结果里,普通接收机实际误码率的图像只有两个圈,-2dB之后就没有他的图像了,但其他两者的误码率图像都OK,这是什么情况啊?%误码率仿真clear allclose allA=1;  %载波振幅fc=2;  %载波频率(Hz)SNRindB1=-5:1:12;   %信噪比取值向量,dB为单位SNRindB2=-5:0.2:12; %信噪比取值向量,dB为单位N_sample=100; %每个码元的采样点数N=10000; %码元数Ts=1;  %码元宽度df=0.01;d=sign(randn(1,N)-0.5+eps);simu_err_prb=zeros(1,length(SNRindB1));%理论误码率for i=1:length(SNRindB2)  %计算信噪比    SNR=10^(SNRindB2(i)/10);  %计算普通接收机的理论误码率    theo_err_prb(i)=0.5*erfc(sqrt(SNR));     %互补误差函数    theo_err_prb1(i)=0.5*erfc(sqrt(2*SNR)); %最佳接收机理论误码率曲线end%计算普通接收机实际误码率for i=1:length(SNRindB1)[numoferr,panjue,desinga1,t]=bpskberr(A,fc,SNRindB1(i),N_sample,N,Ts,d,df);%调用函数simu_err_prb(i)=numoferr;end%误码率曲线图:估计值和理论值曲线对比图semilogy(SNRindB2,theo_err_prb,SNRindB1,simu_err_prb,'o',SNRindB2,theo_err_prb1,'*');axis([-5 12 0.00000001 1]);xlabel('SNR in dB');ylabel(&#39rb of Err');legend('普通接收机理论误码率','普通接收机实际误码率','最佳接收机理论误码率');title(&#39SK误码率');子函数function[numoferr,panjue,desinga1,t]=bpskberr(A,fc,snr,N_sample,N,Ts,d,df);%--------------------系统仿真参数B=1/Ts;f_start=fc-B;f_cutoff=fc+B;fs=fc*N_sample; %系统采样频率,即考虑载波后,一个码元内的采样点数ts=Ts/fs; %系统采样间隔t=0:ts:N*Ts-ts;Lt=length(t);%----------------------调制信号%产生二进制信源dd=sigexpand((d+1)/2,fc*N_sample);gt=ones(1,fc*N_sample); %NRZ波形,不归零波形d_NRZ=conv(dd,gt);d_sjx=2*d_NRZ-1;d_sjx1=d_sjx(1t);%-----------------------2PSK信号的调制解调ht=A*cos(2*pi*fc*t); %载波s_2psk=d_sjx(1t).*ht; %生成已调制的2PSK信号%-----------------------生成高斯白噪声snr_lin=10^(snr/10); %换算成倍数signal_energy=0.5*A^2*Ts; %求出接收信号平均能量noise_power=(signal_energy*fs)/(snr_lin*4); %求出噪声方差,均值为0noise_std=sqrt(noise_power); %求出噪声均方差noise=noise_std.*rand(1,Lt); %以噪声均方差作为幅度产生高斯白噪声%-----------------------将已调信号送入信道r=s_2psk(1t)+noise(1t); %叠加了噪声的已调信号[rf,r,df1,f]=T2F(r,ts,df,fs);%--------------------------在接收端进行解调,先通过带通滤波器[H,f]=bp_f(length(rf),f_start,f_cutoff,df1,fs,1);DEM=H.*rf;  %滤波器输出频谱[dem]=F2T(DEM,fs);  %滤波器输出波形%--------------------------进行相干解调,先和本地载波相乘,即混频der=dem(1t).*ht;  %和本地载波相乘,即混频[derf,der,df1,f]=T2F(der,ts,df,fs);%----------------------------在经过低通滤波器[LPF,f]=lp_f(length(derf),B,df1,fs,1);DM=LPF.*derf;  %滤波器输出频谱[dm]=F2T(DM,fs); %滤波器输出波形%----------------------------最后对LPF输出信号抽样判决panjue=zeros(1,N);  %建立存储判决值的矩阵%抽样判决规则:大于等于0判1,小于0判-1for i=1:N;    if dm(fc*N_sample*(i-1)+fc*N_sample/2+1)>=0;  %抽样判决时刻        panjue(i)=1;    else        panjue(i)=-1;    endend%-----------------------------画出判决的基带信号波形dd1=sigexpand(panjue,fc*N_sample);gt1=ones(1,fc*N_sample);  %NRZ波形desinga=conv(dd1,gt1);desinga1=desinga(1t);%----------------------------统计误码数numoferr=sum(abs(panjue-d))/N;  %计算出错误码元数end




欢迎光临 研发埠 (http://bbs.yanfabu.com/) Powered by Discuz! X3.2