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

matlab例程

开发平台:

Matlab

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