QAM.m
上传用户:tdqh1998
上传日期:2021-06-03
资源大小:3k
文件大小:4k
源码类别:

3G开发

开发平台:

Matlab

  1. % OFDM
  2. % QAM.m
  3. %********************** preparation part ***************************
  4. clc;
  5. clear;
  6. para=1024; % Number of parallel channel to transmit (points)
  7. fftlen=1024; % FFT length
  8. noc=1024; % Number of carrier
  9. nd=6; % Number of information OFDM symbol for one loop
  10. ml=2;       % Modulation level : QAM
  11. sr=250000;  % Symbol rate
  12. br=sr.*ml;  % Bit rate per carrier
  13. gilen=256;  % Length of guard interval (points)
  14. ber=zeros(1,21); % store ber
  15. %************************** main loop part **************************
  16. nloop=10;  % Number of simulation loops
  17. noe = 0;    % Number of error data
  18. nod = 0;    % Number of transmitted data
  19. for ebn0=0:1:20  %Eb/No
  20.     noe = 0;    % Number of error data
  21.     nod = 0;    % Number of transmitted data
  22.    for iii=1:nloop
  23. %************************** transmitter *********************************
  24. %************************** Data generation **************************** 
  25. seldata=rand(1,para*nd*ml)>0.5;  %  rand : built in function
  26. %****************** Serial to parallel conversion ***********************
  27. paradata=reshape(seldata,para,nd*ml); %  reshape : built in function
  28. %**************************QAM modulation ***************************** 
  29. [ich,qch]=qam_mod(paradata,para,nd,ml);
  30. kmod=1/sqrt(42); %  sqrt : built in function
  31. ich1=ich.*kmod;
  32. qch1=qch.*kmod;
  33. %******************* IFFT ************************
  34. x=ich1+qch1.*i;
  35. y=ifft(x);      %  ifft : built in function
  36. ich2=real(y);   %  real : built in function
  37. qch2=imag(y);   %  imag : built in function
  38. %********* Gurad interval insertion **********
  39. [ich3,qch3]= giins(ich2,qch2,fftlen,gilen,nd);
  40. fftlen2=fftlen+gilen;
  41. %********* Attenuation Calculation *********
  42. spow=sum(ich3.^2+qch3.^2)/nd./para;  %  sum : built in function
  43. attn=0.5*spow*sr/br*10.^(-ebn0/10);
  44. attn=sqrt(attn);
  45. %***************************  Receiver  *****************************
  46. %***************** AWGN addition ********* 
  47. [ich4,qch4]=comb(ich3,qch3,attn);
  48. %****************** Guard interval removal *********
  49. [ich5,qch5]= girem(ich4,qch4,fftlen2,gilen,nd);
  50. %******************  FFT  ******************
  51. rx=ich5+qch5.*i;
  52. ry=fft(rx);    % fft : built in function
  53. ich6=real(ry); % real : built in function
  54. qch6=imag(ry); % imag : built in function
  55. %***************** QAM demoduration *******************
  56. ich7=ich6./kmod;
  57. qch7=qch6./kmod;
  58. [demodata]=qam_demod(ich7,qch7,para,nd,ml);   
  59. %**************  Parallel to serial conversion  *****************
  60. demodata1=reshape(demodata,1,para*nd*ml);
  61. %************************** Bit Error Rate (BER) ****************************
  62. % instantaneous number of error and data
  63. noe2=sum(abs(demodata1-seldata));  %  sum : built in function
  64. nod2=length(seldata);  %  length : built in function
  65. % cumulative the number of error and data in noe and nod
  66. noe=noe+noe2;
  67. nod=nod+nod2;
  68.    
  69. end
  70. ber(1,ebn0+1)=noe/nod
  71. switch ebn0
  72.     case 20
  73.         x=complex(reshape(ich,1,1024*6),reshape(qch,1,1024*6));
  74.         y=complex(reshape(ich6,1,1024*6),reshape(qch6,1,1024*6));
  75.         scatterplot(x,1,0,'b*'),grid on,title('映射后未加噪声时星座图')
  76.         eyediagram(y,2)
  77.         scatterplot(y,1,0,'b*'),grid on,title('映射后加噪声时星座图,Eb/N0(dB)=3')
  78.        
  79.     end
  80. end
  81. semilogy([0:1:20],ber,'bp'),grid on,title('信噪比-误码率曲线')
  82. xlabel('Eb/N0(dB)'),ylabel('bit error rate')
  83. %********************** Output result **********************************
  84. y=complex(reshape(ich6,1,1024*6),reshape(qch6,1,1024*6));
  85. scatterplot(y,1,0,'b*'),grid on,title('映射后加噪声时星座图,Eb/N0(dB)=20')
  86. eyediagram(y,2)
  87. %******************** end of file **************************************