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

3G开发

开发平台:

Matlab

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