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

matlab例程

开发平台:

Matlab

  1. % Program 4-8
  2. % ofdmce.m
  3. %
  4. % Simulation program to realize OFDM transmission system
  5. %
  6. % Programmed by T.Yamamura and H.Harada
  7. %
  8. % GI CE GI data GI data...(data 6symbols)
  9. % (CE: Chanel estimation symbol, GI Guard interval)
  10. %
  11. %********************** preparation part ***************************
  12. para=52;    % Number of parallel channel to transmit (points)
  13. fftlen=64;  % FFT length
  14. noc=53;     % Number of carriers
  15. nd=6;       % Number of information OFDM symbol for one loop
  16. knd=1;      % Number of known channel estimation (CE) OFDM symbol
  17. ml=2;       % Modulation level : QPSK
  18. sr=250000;  % OFDM symbol rate (250 ksyombol/s)
  19. br=sr.*ml;  % Bit rate per carrier
  20. gilen=16;   % Length of guard interval (points)
  21. ebn0=3;     % Eb/N0
  22. %%%%%%%%%%%%% fading initialization %%%%%%%%%%%
  23. tstp=1/sr/(fftlen+gilen); % Time resolution
  24. itau=[0];       % Arrival time for each multipath normalized by tstp 
  25. dlvl1=[0];      % Mean power for each multipath normalized by direct wave.
  26. n0=[6];         % Number of waves to generate fading n0(1),n0(2)
  27. th1=[0.0];      % Initial Phase of delayed wave
  28. itnd1=[1000];   % set fading counter        
  29. now1=1;         % Number of directwave + Number of delayed wave
  30. fd=150;         % Maximum Doppler frequency
  31. flat=0;         % Flat or not (see ofdm_fading.m)
  32. itnd0=nd*(fftlen+gilen)*20; % Number of fading counter to skip 
  33. %************************** main loop part **************************
  34. nloop=1000;  % Number of simulation loops
  35. noe = 0;    % Number of error data
  36. nod = 0;    % Number of transmitted data
  37. eop=0;      % Number of error packet
  38. nop=0;      % Number of transmitted packet
  39. %************************** transmitter *****************************
  40. for iii=1:nloop
  41.    
  42. seridata=rand(1,para*nd*ml)>0.5;  %  DC=0
  43. paradata=reshape(seridata,para,nd*ml); %size(51  *  nd*ml)
  44. %-------------- ml modulation ---------------- 
  45. [ich,qch]=qpskmod(paradata,para,nd,ml);
  46. kmod=1/sqrt(2);
  47. ich=ich.*kmod;
  48. qch=qch.*kmod;
  49. % CE data generation
  50. kndata=zeros(1,fftlen);
  51. kndata0=2.*(rand(1,52)>0.5)-1;
  52. kndata(2:27)=kndata0(1:26);
  53. kndata(39:64)=kndata0(27:52);
  54. ceich=kndata; % CE:BPSK
  55. ceqch=zeros(1,64);
  56. %------------- data mapping (DC=0) -----------
  57. [ich1,qch1]=crmapping(ich,qch,fftlen,nd);
  58. ich2=[ceich.' ich1]; % I-channel transmission data
  59. qch2=[ceqch.' qch1]; % Q-channel transmission data
  60. %------------------- IFFT  -------------------
  61. x=ich2+qch2.*i;
  62. y=ifft(x);
  63. ich3=real(y);
  64. qch3=imag(y);
  65. %---------- Gurad interval insertion ---------
  66. fftlen2=fftlen+gilen;
  67. [ich4,qch4]= giins(ich3,qch3,fftlen,gilen,nd+1);
  68. %---------- Attenuation Calculation ----------
  69. spow=sum(ich4.^2+qch4.^2)/nd./para;
  70. attn=0.5*spow*sr/br*10.^(-ebn0/10);
  71. attn=sqrt(attn);
  72. %********************** fading channel ****************************** 
  73. %If you would like to simulate performance under fading, please remove "*"
  74. %from the following four sentenses
  75. %[ifade,qfade,ramp,rcos,rsin]=sefade(ich4,qch4,itau,dlvl1,th1,n0,itnd1,now1,length(ich4),tstp,fd,flat);
  76. %itnd1 = itnd1+itnd0;  % Updata fading counter
  77. %ich4=ifade;
  78. %qch4=qfade;
  79. %***************************  Receiver  *****************************
  80. %--------------- AWGN addition --------------- 
  81. [ich5,qch5]=comb(ich4,qch4,attn);
  82. %----Perfect fading compensation for one path fading ----
  83. %If you would like to simulate performance under perfect compensation, please remove "*"
  84. %from the following four sentenses
  85. %ifade2=1./ramp.*(rcos(1,:).*ich5+rsin(1,:).*qch5);
  86. %qfade2=1./ramp.*(-rsin(1,:).*ich5+rcos(1,:).*qch5);
  87. %ich5=ifade2;
  88. %qch5=qfade2;
  89. %----------- Guard interval removal ----------
  90. [ich6,qch6]= girem(ich5,qch5,fftlen2,gilen,nd+1);
  91. %------------------  FFT  --------------------
  92. rx=ich6+qch6.*i;
  93. ry=fft(rx);
  94. ich7=real(ry);
  95. qch7=imag(ry);
  96. %-------------- Fading compensation by CE symbol --------------
  97. %
  98. %If you would like to simulate performance under CE-based compensation, please remove "*"
  99. %in this area
  100. %
  101. % preparation known CE data
  102. %ce=1;
  103. %ice0=ich2(:,ce);
  104. %qce0=qch2(:,ce);
  105. % taking CE data out of received data
  106. %ice1=ich7(:,ce);
  107. %qce1=qch7(:,ce);
  108. % calculating reverse rotation 
  109. %iv=real((1./(ice1.^2+qce1.^2)).*(ice0+i.*qce0).*(ice1-i.*qce1));
  110. %qv=imag((1./(ice1.^2+qce1.^2)).*(ice0+i.*qce0).*(ice1-i.*qce1));
  111. % matrix for reverse rotation
  112. %ieqv1=[iv iv iv iv iv iv iv];
  113. %qeqv1=[qv qv qv qv qv qv qv];
  114. % reverse rotation
  115. %icompen=real((ich7+i.*qch7).*(ieqv1+i.*qeqv1));
  116. %qcompen=imag((ich7+i.*qch7).*(ieqv1+i.*qeqv1));
  117. %ich7=icompen;
  118. %qch7=qcompen;
  119. %---------- CE symbol removal ----------------
  120. ich8=ich7(:,knd+1:nd+1);
  121. qch8=qch7(:,knd+1:nd+1);
  122. % DC and pilot data removal
  123. [ich9,qch9]=crdemapping(ich8,qch8,fftlen,nd);
  124. %----------------- demoduration --------------
  125. ich10=ich9./kmod;
  126. qch10=qch9./kmod;
  127. [demodata]=qpskdemod(ich10,qch10,para,nd,ml);   
  128. %--------------  error calculation  ----------
  129. demodata1=reshape(demodata,1,para*nd*ml);
  130. noe2=sum(abs(demodata1-seridata));
  131. nod2=length(seridata);
  132. % calculating PER
  133. if noe2~=0
  134.    eop=eop+1;
  135. else
  136.    eop=eop;
  137. end   
  138.    eop;
  139.    nop=nop+1;
  140.    
  141. % calculating BER
  142. noe=noe+noe2;
  143. nod=nod+nod2;
  144. fprintf('%dt%et%dn',iii,noe2/nod2,eop);
  145.    
  146. end
  147. per=eop/nop;
  148. ber=noe/nod;
  149. %********************** Output result ***************************
  150. fprintf('%ft%et%et%dt%dn',ebn0,ber,per,nloop,fd);
  151.   
  152. fid = fopen('BERofdmce.dat','a');
  153. fprintf(fid,'%ft%et%et%dtn',ebn0,ber,per,nloop);
  154. fclose(fid);
  155. %******************** end of file ***************************