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

matlab例程

开发平台:

Matlab

  1. % Program 3-6
  2. % qpsk_fading.m
  3. %
  4. % Simulation program to realize QPSK transmission system
  5. % (under one path fading)
  6. %
  7. % Programmed by H.Harada and T.Yamamura
  8. %
  9. %******************** Preparation part *************************************
  10. sr=256000.0; % Symbol rate
  11. ml=2;        % ml:Number of modulation levels (BPSK:ml=1, QPSK:ml=2, 16QAM:ml=4)
  12. br=sr .* ml; % Bit rate
  13. nd = 100;    % Number of symbols that simulates in each loop
  14. ebn0=10;     % Eb/N0
  15. IPOINT=8;    % Number of oversamples
  16. %************************* Filter initialization ***************************
  17. irfn=21;                  % Number of taps
  18. alfs=0.5;                 % Rolloff factor
  19. [xh] = hrollfcoef(irfn,IPOINT,sr,alfs,1);   %Transmitter filter coefficients 
  20. [xh2] = hrollfcoef(irfn,IPOINT,sr,alfs,0);  %Receiver filter coefficients 
  21. %******************* Fading initialization ********************
  22. % If you use fading function "sefade", you can initialize all of parameters.
  23. % Otherwise you can comment out the following initialization.
  24. % The detailed explanation of all of valiables are mentioned in Program 2-8.
  25. % Time resolution
  26. tstp=1/sr/IPOINT; 
  27. % Arrival time for each multipath normalized by tstp
  28. % If you would like to simulate under one path fading model, you have only to set 
  29. % direct wave.
  30. itau = [0];
  31. % Mean power for each multipath normalized by direct wave.
  32. % If you would like to simulate under one path fading model, you have only to set 
  33. % direct wave.
  34. dlvl = [0];
  35. % Number of waves to generate fading for each multipath.
  36. % In normal case, more than six waves are needed to generate Rayleigh fading
  37. n0=[6];
  38. % Initial Phase of delayed wave
  39. % In this simulation four-path Rayleigh fading are considered.
  40. th1=[0.0];
  41. % Number of fading counter to skip 
  42. itnd0=nd*IPOINT*100;
  43. % Initial value of fading counter
  44. % In this simulation one-path Rayleigh fading are considered.
  45. % Therefore one fading counter are needed.
  46.   
  47. itnd1=[1000];
  48. % Number of directwave + Number of delayed wave
  49. % In this simulation one-path Rayleigh fading are considered
  50. now1=1;        
  51. % Maximum Doppler frequency [Hz]
  52. % You can insert your favorite value
  53. fd=160;       
  54. % You can decide two mode to simulate fading by changing the variable flat
  55. % flat     : flat fading or not 
  56. % (1->flat (only amplitude is fluctuated),0->nomal(phase and amplitude are fluctutated)
  57. flat =1;
  58. %******************** START CALCULATION *************************************
  59. nloop=1000;  % Number of simulation loops
  60. noe = 0;    % Number of error data
  61. nod = 0;    % Number of transmitted data
  62. for iii=1:nloop
  63.     
  64. %*************************** Data generation ********************************  
  65.     data1=rand(1,nd*ml)>0.5;  % rand: built in function
  66.     
  67. %*************************** QPSK Modulation ********************************  
  68.     [ich,qch]=qpskmod(data1,1,nd,ml);
  69. [ich1,qch1]= compoversamp(ich,qch,length(ich),IPOINT); 
  70. [ich2,qch2]= compconv(ich1,qch1,xh); 
  71.      
  72. %**************************** Attenuation Calculation ***********************
  73.     spow=sum(ich2.*ich2+qch2.*qch2)/nd;  % sum: built in function
  74. attn=0.5*spow*sr/br*10.^(-ebn0/10);
  75. attn=sqrt(attn);  % sqrt: built in function
  76.      
  77. %********************** Fading channel **********************
  78.   % Generated data are fed into a fading simulator
  79.     [ifade,qfade]=sefade(ich2,qch2,itau,dlvl,th1,n0,itnd1,now1,length(ich2),tstp,fd,flat);
  80.   
  81.   % Updata fading counter
  82.     itnd1 = itnd1+ itnd0;
  83. %********************* Add White Gaussian Noise (AWGN) **********************
  84.     [ich3,qch3]= comb(ifade,qfade,attn);% add white gaussian noise
  85. [ich4,qch4]= compconv(ich3,qch3,xh2);
  86.     syncpoint=irfn*IPOINT+1;
  87.     ich5=ich4(syncpoint:IPOINT:length(ich4));
  88.     qch5=qch4(syncpoint:IPOINT:length(qch4));
  89.         
  90. %**************************** QPSK Demodulation *****************************
  91.     [demodata]=qpskdemod(ich5,qch5,1,nd,ml);
  92. %************************** Bit Error Rate (BER) ****************************
  93.     noe2=sum(abs(data1-demodata));  % sum: built in function
  94. nod2=length(data1);  % length: built in function
  95. noe=noe+noe2;
  96. nod=nod+nod2;
  97. fprintf('%dt%en',iii,noe2/nod2);  % fprintf: built in function
  98. end % for iii=1:nloop    
  99. %********************** Output result ***************************
  100. ber = noe/nod;
  101. fprintf('%dt%dt%dt%en',ebn0,noe,nod,noe/nod);  % fprintf: built in function
  102. fid = fopen('BERqpskfad.dat','a');
  103. fprintf(fid,'%dt%et%ft%ftn',ebn0,noe/nod,noe,nod);  % fprintf: built in function
  104. fclose(fid);
  105. %******************** end of file ***************************