gmsk.m
上传用户:m_sun_001
上传日期:2014-07-30
资源大小:1115k
文件大小:3k
源码类别:

matlab例程

开发平台:

Matlab

  1. % Program 3-18
  2. % gmsk.m
  3. %
  4. % Simulation program to realize GMSK transmission system
  5. %
  6. % Programmed by R.Sawai and H.Harada
  7. %
  8. %******************** Preparation part *************************************
  9. sr=256000.0; % Symbol rate
  10. ml=1;        % ml:Number of modulation levels 
  11. br=sr.*ml;   % Bit rate
  12. nd = 1000;   % Number of symbols that simulates in each loop
  13. ebn0=5;      % Eb/N0
  14. IPOINT=8;    % Number of oversamples
  15. %************************* Filter initialization ***************************
  16. irfn=21;                  % Number of taps
  17. B=0.25*sr;
  18. B2=0.6*sr;
  19. [xh] = gaussf(B,irfn,IPOINT,sr,1);   %Transmitter filter coefficients 
  20. [xh2] =gaussf(B2,irfn,IPOINT,sr,0);  %Receiver filter coefficients 
  21. %******************** START CALCULATION *************************************
  22. nloop=100;  % Number of simulation loops
  23. noe = 0;    % Number of error data
  24. nod = 0;    % Number of transmitted data
  25. for iii=1:nloop 
  26. %*************************** Data generation ******************************** 
  27.     
  28.     data1=rand(1,nd.*ml)>0.5;  % rand: built in function
  29. %*************************** GMSK Modulation ********************************  
  30.     data11=2*data1-1;
  31.     data2=oversamp(data11,length(data11),IPOINT);    
  32.     data3=conv(data2,xh);                           % NEW for GMSK
  33.     th=zeros(1,length(data3)+1);
  34.     ich2=zeros(1,length(data3)+1);
  35.     qch2=zeros(1,length(data3)+1);
  36.     for ii=2:length(data3)+1
  37.     th(1,ii)=th(1,ii-1)+pi/2*data3(1,ii-1)./IPOINT;
  38.     end
  39.     ich2=cos(th);
  40.     qch2=sin(th);
  41. %************************** Attenuation Calculation ***********************
  42.     spow=sum(ich2.*ich2+qch2.*qch2)/nd;  % sum: built in function
  43. attn=0.5*spow*sr/br*10.^(-ebn0/10);
  44. attn=sqrt(attn);                     % sqrt: built in function
  45.    
  46. %********************** Fading channel **********************
  47.     %[ifade,qfade]=sefade2(data2,qdata1,itau,dlvl1,th1,n0,itnd1,now1,length(data2),fftlen2,fstp,fd,flat);
  48. %********************* Add White Gaussian Noise (AWGN) **********************
  49.     [ich3,qch3]= comb(ich2,qch2,attn);% add white gaussian noise
  50.   
  51.     [ich4,qch4] = compconv(ich3,qch3,xh2);
  52.    
  53.     syncpoint =irfn*IPOINT-IPOINT/2+1;
  54.     ich5=ich4(syncpoint:IPOINT:length(ich4));
  55.     qch5=qch4(syncpoint:IPOINT:length(qch4));
  56.         
  57. %**************************** GMSK Demodulation *****************************
  58.     demoddata2(1,1)=-1;
  59.     for k=3:2:nd*ml+1
  60.          demoddata2(1,k)=ich5(1,k)*qch5(1,k-1)*cos(pi*(k))>0;
  61.     end
  62.     for n=2:2:nd*ml+1
  63.          demoddata2(1,n)=ich5(1,n-1)*qch5(1,n)*cos(pi*(n))>0;
  64.     end
  65.     [demodata]=demoddata2(1,2:nd*ml+1);
  66.     
  67. %************************** Bit Error Rate (BER) ****************************
  68.     noe2=sum(abs(data1-demodata));  % sum: built in function
  69. nod2=length(data1);  % length: built in function
  70. noe=noe+noe2;
  71. nod=nod+nod2;
  72. fprintf('%dt%en',iii,noe2/nod2);  % fprintf: built in function
  73. end % for iii=1:nloop    
  74. %********************** Output result ***************************
  75. ber = noe/nod;
  76. fprintf('%dt%dt%dt%en',ebn0,noe,nod,noe/nod);  % fprintf: built in function
  77. fid = fopen('BERgmsk.dat','a');
  78. fprintf(fid,'%dt%et%ft%ftn',ebn0,noe/nod,noe,nod);  % fprintf: built in function
  79. fclose(fid);
  80. %******************** end of file ***************************