资源描述:
《通信系统的计算机模拟第十三讲》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、通信系统的计算机模拟第十三讲1通信系统的蒙特卡罗仿真相移键控(Phase-shiftKeying,PSK)数字通信系统,尽管非常简单,基本构建模块,差分QPSK系统的仿真,其中考虑了相位和符号同步误差的影响。讨论半解析(SA)方法,即把蒙特卡罗仿真和解析的方法结合在一起。蒙特卡罗方法几乎不需要任何的数学分析,只要系统方框图中每个功能模块的信号处理算法是已知的就能应用蒙特卡罗仿真是一个很通用的工具,缺点是仿真运行时间长,半解析方法需要更高水平的分析,降低了仿真运行时间。运行一次蒙特卡罗仿真得到的是单个误比特率估计值,而半解析
2、仿真得到的是以为Eb/N0函数的完整的误比特率曲线,半解析仿真不是一个普遍适用的方法,仅适用于一类很有限的系统,半解析仿真消耗的机时是微不足道的,因此在能运用半解析仿真时,都应优先考虑这种方法。2两个蒙特卡罗实例将蒙特卡罗方法用于估计数字通信系统的误比特率时,是让N个采样符号通过系统的仿真模型,并计算产生差错的个数来实现的假设符号导致了Ne个差错,那么误比特率的估计值为是一个随机变量,要获得误比特率的准确估计,估计器必须是无偏,并具有小的方差,小的方差要求有大的N,而这又会导致较长的计算时间。3例10-1(PSK)假设为B
3、PSK调制,信号星座中的两个信号点都位于直接(同相)信道上(回顾一下例9-3),根据这一假设,在仿真中我们可以不考虑正交信道。假设调制器输出端的滤波器是三阶巴特沃思滤波器,其带宽等于比特率(BW=rb),该滤波器会产生码间干扰(ISI)。仿真的目的是确定由滤波器带来的ISI所增加的误比特率。这里采用了块级联(block-serial)的方法,迭代处理由1000个符号组成的块,直到处理完所有N个符号。这样做主要是为了利用MATLAB内置的函数filter,它可以实现时域卷积。它作为内置函数具有非常高的运行效率,可大大地减少仿
4、真时间。注意必须保证滤波器的输出在块与块之间是连续的,这是通过使用filter提供的初始条件参数来实现的。4Solution第一个问题是要确定delay的值最妙的方法是,把调制器的输入和接收机的输出进行互相关。在进行半解析仿真时我们会采用这种方法。为了说明正确选择时延值的重要性,具体来说,我们会选定一个值,用不同的delay值对系统进行仿真,并观察结果5MatlabProgramEbNodB=6;%Eb/No(dB)valuez=10.^(EbNodB/10);%converttolinearscaledelay=0:8;
5、%delayvectorBER=zeros(1,length(delay));%initializeBERvectorErrors=zeros(1,length(delay));%initializeErrorsvectorBER_T=q(sqrt(2*z))*ones(1,length(delay));%theoreticalBERvectorN=round(100./BER_T);%100errorsforideal(zeroISI)systemFilterSwitch=1;%setfilterswitch(in=1o
6、rout=0)fork=1:length(delay)[BER(k),Errors(k)]=c10_MCBPSKrun(N(k),z,delay(k),FilterSwitch)endsemilogy(delay,BER,'o',delay,BER_T,'-');grid;xlabel('Delay');ylabel('BitErrorRate');6ResultAWGN环境下的理想系统(没有ISI)在Eb/N0=6dB时的性能7function[BER,Errors]=MCBPSKrun(N,EbNo,delay,Fil
7、terSwitch)SamplesPerSymbol=10;%samplespersymbolBlockSize=1000;%blocksizeNoiseSigma=sqrt(SamplesPerSymbol/(2*EbNo));%scalenoiselevelDetectedSymbols=zeros(1,BlockSize);%initializevectorNumberOfBlocks=floor(N/BlockSize);%numberofblocksprocessed[BTx,ATx]=butter(5,2/Sa
8、mplesPerSymbol);%computefilterparameters[TxOutput,TxFilterState]=filter(BTx,ATx,0);%initializestatevectorBRx=ones(1,SamplesPerSymbol);ARx=1;%matchedfilt