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

matlab例程

开发平台:

Matlab

  1. % Program 4-2
  2. % ofdm_fading.m
  3. %
  4. % Simulation program to realize OFDM transmission system
  5. % (under one path fading)
  6. %
  7. % programmed by T.Yamamura and H.Harada
  8. %
  9. %********************** preparation part ***************************
  10. para=128;   % Number of parallel channel to transmit (points)
  11. fftlen=128; % FFT length
  12. noc=128;    % Number of carrier
  13. nd=6;       % Number of information OFDM symbol for one loop
  14. ml=2;       % Modulation level : QPSK
  15. sr=250000;  % Symbol rate
  16. br=sr.*ml;  % Bit rate per carrier
  17. gilen=32;   % Length of guard interval (points)
  18. ebn0=10;    % Eb/N0
  19. %******************* Fading initialization ********************
  20. % If you use fading function "sefade", you can initialize all of parameters.
  21. % Otherwise you can comment out the following initialization.
  22. % The detailed explanation of all of valiables are mentioned in Program 2-8.
  23. % Time resolution
  24. tstp=1/sr/(fftlen+gilen); 
  25. % Arrival time for each multipath normalized by tstp
  26. % If you would like to simulate under one path fading model, you have only to set 
  27. % direct wave.
  28. itau = [0];
  29. % Mean power for each multipath normalized by direct wave.
  30. % If you would like to simulate under one path fading model, you have only to set 
  31. % direct wave.
  32. dlvl = [0];
  33. % Number of waves to generate fading for each multipath.
  34. % In normal case, more than six waves are needed to generate Rayleigh fading
  35. n0=[6];
  36. % Initial Phase of delayed wave
  37. % In this simulation four-path Rayleigh fading are considered.
  38. th1=[0.0];
  39. % Number of fading counter to skip 
  40. itnd0=nd*(fftlen+gilen)*10;
  41. % Initial value of fading counter
  42. % In this simulation one-path Rayleigh fading are considered.
  43. % Therefore one fading counter are needed.
  44.   
  45. itnd1=[1000];
  46. % Number of directwave + Number of delayed wave
  47. % In this simulation one-path Rayleigh fading are considered
  48. now1=1;        
  49. % Maximum Doppler frequency [Hz]
  50. % You can insert your favorite value
  51. fd=320;       
  52. % You can decide two mode to simulate fading by changing the variable flat
  53. % flat     : flat fading or not 
  54. % (1->flat (only amplitude is fluctuated),0->nomal(phase and amplitude are fluctutated)
  55. flat =1;
  56. %************************** main loop part **************************
  57. nloop=500;  % Number of simulation loops
  58. noe = 0;    % Number of error data
  59. nod = 0;    % Number of transmitted data
  60. eop=0;      % Number of error packet
  61. nop=0;      % Number of transmitted packet
  62. for iii=1:nloop
  63. %************************** transmitter *********************************
  64. %************************** Data generation **************************** 
  65. seldata=rand(1,para*nd*ml)>0.5;  %  rand : built in function
  66. %****************** Serial to parallel conversion ***********************
  67. paradata=reshape(seldata,para,nd*ml); %  reshape : built in function
  68. %************************** QPSK modulation ***************************** 
  69. [ich,qch]=qpskmod(paradata,para,nd,ml);
  70. kmod=1/sqrt(2); %  sqrt : built in function
  71. ich1=ich.*kmod;
  72. qch1=qch.*kmod;
  73. %******************* IFFT ************************
  74. x=ich1+qch1.*i;
  75. y=ifft(x);      %  ifft : built in function
  76. ich2=real(y);   %  real : built in function
  77. qch2=imag(y);   %  imag : built in function
  78. %********* Gurad interval insertion **********
  79. [ich3,qch3]= giins(ich2,qch2,fftlen,gilen,nd);
  80. fftlen2=fftlen+gilen;
  81. %********* Attenuation Calculation *********
  82. spow=sum(ich3.^2+qch3.^2)/nd./para;  %  sum : built in function
  83. attn=0.5*spow*sr/br*10.^(-ebn0/10);
  84. attn=sqrt(attn);
  85. %********************** Fading channel **********************
  86. % Generated data are fed into a fading simulator
  87. [ifade,qfade]=sefade(ich3,qch3,itau,dlvl,th1,n0,itnd1,now1,length(ich3),tstp,fd,flat);
  88.   
  89. % Updata fading counter
  90. itnd1 = itnd1+ itnd0;
  91. %***************************  Receiver  *****************************
  92. %***************** AWGN addition ********* 
  93. [ich4,qch4]=comb(ifade,qfade,attn);
  94. %****************** Guard interval removal *********
  95. [ich5,qch5]= girem(ich4,qch4,fftlen2,gilen,nd);
  96. %******************  FFT  ******************
  97. rx=ich5+qch5.*i;
  98. ry=fft(rx);    % fft : built in function
  99. ich6=real(ry); % real : built in function
  100. qch6=imag(ry); % imag : built in function
  101. %***************** demoduration *******************
  102. ich7=ich6./kmod;
  103. qch7=qch6./kmod;
  104. [demodata]=qpskdemod(ich7,qch7,para,nd,ml);   
  105. %**************  Parallel to serial conversion  *****************
  106. demodata1=reshape(demodata,1,para*nd*ml);
  107. %************************** Bit Error Rate (BER) ****************************
  108. % instantaneous number of error and data
  109. noe2=sum(abs(demodata1-seldata));  %  sum : built in function
  110. nod2=length(seldata);  %  length : built in function
  111. % cumulative the number of error and data in noe and nod
  112. noe=noe+noe2;
  113. nod=nod+nod2;
  114. % calculating PER
  115. if noe2~=0  
  116.    eop=eop+1;
  117. else
  118.    eop=eop;
  119. end   
  120.    eop;
  121.    nop=nop+1;
  122.    
  123. fprintf('%dt%et%dn',iii,noe2/nod2,eop);  %  fprintf : built in function
  124.    
  125. end
  126. %********************** Output result ***************************
  127. per=eop/nop;
  128. ber=noe/nod;
  129. fprintf('%ft%et%et%dtn',ebn0,ber,per,nloop);
  130. fid = fopen('BERofdmfad.dat','a');
  131. fprintf(fid,'%ft%et%et%dtn',ebn0,ber,per,nloop);
  132. fclose(fid);
  133. %******************** end of file ***************************