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

matlab例程

开发平台:

Matlab

  1. % Program 3-22
  2. % qam16_fading
  3. %
  4. % Simulation program to realize 16QAM transmission system
  5. % (under one path fading)
  6. %
  7. % Programmed by H.Harada and R.Funada
  8. %
  9. %******************** preparation part *************************************
  10. sr=256000.0; % Symbol rate
  11. ml=4;        % 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=15;     % 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;
  66. %*************************** 16QAM Modulation ********************************
  67. [ich,qch]=qammod(data1,1,nd,ml);
  68. [ich1,qch1]= compoversamp(ich,qch,length(ich),IPOINT); 
  69. [ich2,qch2]= compconv(ich1,qch1,xh); 
  70. %**************************** Attenuation Calculation ***********************
  71.     spow=sum(ich2.*ich2+qch2.*qch2)/nd;
  72. attn=0.5*spow*sr/br*10.^(-ebn0/10);
  73. attn=sqrt(attn);
  74. %********************** Fading channel **********************
  75.   % Generated data are fed into a fading simulator
  76.     [ifade,qfade,ramp]=sefade(ich2,qch2,itau,dlvl,th1,n0,itnd1,now1,length(ich2),tstp,fd,flat);
  77.   
  78.     % Updata fading counter
  79.     itnd1 = itnd1+ itnd0;
  80. %********************* Add White Gaussian Noise (AWGN) **********************
  81.     [ich3,qch3]= comb(ifade,qfade,attn);% add white gaussian noise
  82.  
  83. %*************** Compensate the fluctuation of fading by ramp*******************    
  84.     
  85.     ich3=ich3./ramp(1:length(ramp));
  86.     qch3=qch3./ramp(1:length(ramp));
  87.     
  88. [ich4,qch4]= compconv(ich3,qch3,xh2);
  89.     sampl=irfn*IPOINT+1;
  90. ich5 = ich4(sampl:IPOINT:length(ich4));
  91. qch5 = qch4(sampl:IPOINT:length(ich4));
  92.         
  93. %**************************** 16QAM Demodulation *****************************
  94.     [demodata]=qamdemod(ich5,qch5,1,nd,ml);
  95. %******************** Bit Error Rate (BER) ****************************
  96.     noe2=sum(abs(data1-demodata));
  97. nod2=length(data1);
  98. noe=noe+noe2;
  99. nod=nod+nod2;
  100. fprintf('%dt%en',iii,noe2/nod2);
  101. end % for iii=1:nloop    
  102. %********************** Output result ***************************
  103. ber = noe/nod;
  104. fprintf('%dt%dt%dt%en',ebn0,noe,nod,noe/nod);
  105. fid = fopen('BERqamfad.dat','a');
  106. fprintf(fid,'%dt%et%ft%ftn',ebn0,noe/nod,noe,nod);
  107. fclose(fid);
  108. %******************** end of file ***************************