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

matlab例程

开发平台:

Matlab

  1. % Program 3-21
  2. % qam16
  3. %
  4. % Simulation program to realize 16QAM transmission system
  5. %
  6. % Programmed by H.Harada and R.Funada
  7. %
  8. %******************** preparation part *************************************
  9. sr=256000.0; % Symbol rate
  10. ml=4;        % ml:Number of modulation levels (BPSK:ml=1, QPSK:ml=2, 16QAM:ml=4)
  11. br=sr .* ml; % Bit rate
  12. nd = 1000;    % Number of symbols that simulates in each loop
  13. ebn0=6;      % Eb/N0
  14. IPOINT=8;    % Number of oversamples
  15. %********************** Filter initialization   **************************
  16. irfn=21;                  % Number of taps
  17. alfs=0.5;                 % Rolloff factor
  18. [xh] = hrollfcoef(irfn,IPOINT,sr,alfs,1);   %Transmitter filter coefficients 
  19. [xh2] = hrollfcoef(irfn,IPOINT,sr,alfs,0);  %Receiver filter coefficients 
  20. %************************** START CALCULATION *******************************
  21. nloop=100;  % Number of simulation loops
  22. noe = 0;    % Number of error data
  23. nod = 0;    % Number of transmitted data
  24. for iii=1:nloop
  25.     
  26. %*************************** Data generation ********************************
  27. data1=rand(1,nd*ml)>0.5;
  28. %*************************** 16QAM Modulation ********************************
  29. [ich,qch]=qammod(data1,1,nd,ml);
  30. [ich1,qch1]= compoversamp(ich,qch,length(ich),IPOINT); 
  31. [ich2,qch2]= compconv(ich1,qch1,xh); 
  32. %**************************** Attenuation Calculation ***********************
  33.     spow=sum(ich2.*ich2+qch2.*qch2)/nd;
  34. attn=0.5*spow*sr/br*10.^(-ebn0/10);
  35. attn=sqrt(attn);
  36. %********************** Fading channel **********************
  37.   % Generated data are fed into a fading simulator
  38.   %  [ifade,qfade]=sefade(ich2,qch2,itau,dlvl,th1,n0,itnd1,now1,length(ich2),tstp,fd,flat);
  39.   
  40.   % Updata fading counter
  41.   %  itnd1 = itnd1+ itnd0;
  42. %********************* Add White Gaussian Noise (AWGN) **********************
  43.     [ich3,qch3]= comb(ich2,qch2,attn);% add white gaussian noise
  44. [ich4,qch4]= compconv(ich3,qch3,xh2);
  45. sampl=irfn*IPOINT+1;
  46. ich5 = ich4(sampl:IPOINT:length(ich4));
  47. qch5 = qch4(sampl:IPOINT:length(ich4));
  48.         
  49. %**************************** 16QAM Demodulation *****************************
  50.     [demodata]=qamdemod(ich5,qch5,1,nd,ml);
  51. %******************** Bit Error Rate (BER) ****************************
  52.     noe2=sum(abs(data1-demodata));
  53. nod2=length(data1);
  54. noe=noe+noe2;
  55. nod=nod+nod2;
  56. fprintf('%dt%en',iii,noe2/nod2);
  57. end % for iii=1:nloop    
  58. %********************** Output result ***************************
  59. ber = noe/nod;
  60. fprintf('%dt%dt%dt%en',ebn0,noe,nod,noe/nod);
  61. fid = fopen('BERqam.dat','a');
  62. fprintf(fid,'%dt%et%ft%ftn',ebn0,noe/nod,noe,nod);
  63. fclose(fid);
  64. %******************** end of file ***************************