最).txt
上传用户:jeffyma
上传日期:2017-08-11
资源大小:4k
文件大小:2k
源码类别:

软件测试

开发平台:

Matlab

  1. clear all;
  2. clc;
  3. N_symbol=4;
  4. N = 1024; %the number of carrier
  5. %N = 256; %the number of carrier
  6. %T=10^(-6); % Sampling time : 1us
  7. L=128; % the number of prefix
  8. SNR=15; % SNR of signal 
  9. rx_pre2 = zeros(1,N+L); %buffer for symber i-1
  10. rx_pre1 = zeros(1,N+L); %buffer for symbol i
  11. rx = zeros(1,N+L); %buffer for symbol i+1
  12. ro = SNR/(SNR+1);
  13. %e=0.25;
  14. %abs(e)=0;
  15. delay=floor(rand*N); %generate delay
  16. cnt = 0;
  17. while cnt <= N_symbol+1
  18. % Generate Signal
  19. input_stream = (sign(randn(1,N*2))+1)/2;
  20. % modulation to QPSK
  21. qpsk_str = QPSK(input_stream); % QPSK stream : 1024
  22. % inverse fft : from frequency domain to time domain
  23. xn=ifft(qpsk_str,N);
  24. % add_prefix
  25. len_xn = length(xn); % for checking : len_xn=N
  26. sn=[xn(len_xn-L+1:len_xn) xn];
  27. rx_pre2=rx_pre1;
  28. rx_pre1=rx;
  29. %############################ AWGN Channel #############################
  30. e=0.25;
  31. for k=1:length(sn)
  32. rx(k)=sn(k)*exp(j*2*pi*e*(k-1)/N);
  33. end
  34. %rx= rx+add_noise(sn,SNR); % add noise
  35. %rx(delay:length(rx))=rx;
  36. %rx(1:delay-1)=0;
  37. obs_rx=[rx_pre2(N+L-delay+1:N+L) rx_pre1 rx(1:N-delay)]; % observe 2N+L
  38. obs_rx=obs_rx+add_noise(obs_rx,SNR); % add noise
  39. %################## Calculate gamma(m) & PI(m) ###################
  40. if cnt > 1
  41. i=cnt-1;
  42. gamma =zeros(1,N);
  43. pii =zeros(1,N);
  44. for theta=1:N
  45. %Equation 2-(6),2-(7)
  46. for k=theta:theta+L-1
  47. gamma(theta)= gamma(theta)+obs_rx(k)*conj(obs_rx(k+N));
  48. pii(theta)=pii(theta)+0.5*( abs(obs_rx(k))^2 + abs(obs_rx(k+N))^2 );
  49. end
  50. %equation 2-(5)
  51. %lamda(i,theta)=abs(gamma(theta))*cos( 2*pi*e+angle(gamma(theta)) ) - ro*pii(theta);
  52. lamda(i,theta)=abs(gamma(theta))- ro*pii(theta);
  53. gamma1(i,theta)=-angle(gamma(theta))/(2*pi);
  54. end %end loop_theta
  55. end %end if
  56. cnt= cnt+1; % increase counter
  57. end % end while
  58. % S/P for lamda
  59. lamda_str=[];
  60. gamma1_str=[];
  61. for i=1:N_symbol
  62. lamda_str=[ lamda_str lamda(i,];
  63. gamma1_str=[ gamma1_str gamma1(i,];
  64. end
  65. % for display
  66. clf;
  67. figure(1);
  68. grid on
  69. plot(lamda_str)
  70. %plot(abs(xn)*100) 
  71. figure(2);
  72. plot(gamma1_str)
  73. error=gamma1_str(find(lamda_str==max(lamda_str)))-e