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

matlab例程

开发平台:

Matlab

  1. % Analysis
  2. disp(' '), disp('------------------------------------------------------------')
  3. disp('Preparing Analysis')
  4. figure(1), clf
  5. if (input_type == 1) & (test_input_type == 1)
  6. subplot(221), stem(data_in), title('OFDM Binary Input Data');
  7. subplot(223), stem(output), title('OFDM Recovered Binary Data')
  8. else
  9. subplot(221), plot(data_samples), title('OFDM Symbol Input Data');
  10. subplot(223), plot(output_samples), title('OFDM Recovered Symbols');
  11. end
  12. subplot(222), plot(xmit), title('Transmitted OFDM');
  13. subplot(224), plot(recv), title('Received OFDM');
  14. % dig_x_axis = (1:length(QAM_tx_data))/length(QAM_tx_data);
  15. %  figure(4), clf, subplot(212)
  16. %  freq_data = abs(fft(QAM_rx_data));
  17. %  L = length(freq_data)/2;
  18. dig_x_axis = (1:length(xmit))/length(xmit);
  19. figure(2), clf
  20. if channel_on ==1
  21. num = [1, zeros(1, d1-1), a1, zeros(1, d2-d1-1), a2];
  22. den = [1];
  23. [H, W] = freqz(num, den, 512);
  24. mag = 20*log10(abs(H));
  25. phase = angle(H) * 180/pi;
  26. subplot(313)
  27. freq_data = abs(fft(recv));
  28. L = length(freq_data)/2;
  29. plot(dig_x_axis(1:L), freq_data(1:L))
  30. xlabel('FFT of Received OFDM')
  31. axis_temp = axis;
  32. subplot(311),
  33. freq_data = abs(fft(xmit));
  34. plot(dig_x_axis(1:L), freq_data(1:L)), axis(axis_temp)
  35. title('FFT of Transmitted OFDM')
  36. subplot(312)
  37. plot(W/(2*pi),mag),
  38. ylabel('Channel Magnitude Response')
  39. else
  40. subplot(212)
  41. freq_data = abs(fft(recv));
  42. L = length(freq_data)/2;
  43. plot(dig_x_axis(1:L), freq_data(1:L))
  44. xlabel('FFT of Received OFDM')
  45. axis_temp = axis;
  46. subplot(211),
  47. freq_data = abs(fft(xmit));
  48. plot(dig_x_axis(1:L), freq_data(1:L)), axis(axis_temp)
  49. title('FFT of Transmitted OFDM')
  50. end
  51. % if file_input_type == 4
  52. %  figure(5)
  53. %  subplot(211)
  54. %  image(data_in);
  55. %  colormap(map);
  56. %  subplot(212)
  57. %  image(output);
  58. %  colormap(map);
  59. % end
  60. if do_QAM == 1  % analyze if QAM was done
  61. figure(3), clf
  62. if (input_type == 1) & (test_input_type == 1)
  63. subplot(221), stem(data_in), title('QAM Binary Input Data');
  64. subplot(223), stem(QAM_data_out), title('QAM Recovered Binary Data')
  65. else
  66. subplot(221), plot(data_samples), title('QAM Symbol Input Data');
  67. subplot(223), plot(QAM_output_samples), title('QAM Recovered Symbols');
  68. end
  69. subplot(222), plot(QAM_tx_data), title('Transmitted QAM');
  70. subplot(224), plot(QAM_rx_data), title('Received QAM');
  71. dig_x_axis = (1:length(QAM_tx_data))/length(QAM_tx_data);
  72. figure(4), clf
  73. if channel_on ==1
  74. subplot(313)
  75. freq_data = abs(fft(QAM_rx_data));
  76. L = length(freq_data)/2;
  77. plot(dig_x_axis(1:L), freq_data(1:L))
  78. xlabel('FFT of Received QAM')
  79. axis_temp = axis;
  80. subplot(311),
  81. freq_data = abs(fft(QAM_tx_data));
  82.   plot(dig_x_axis(1:L),freq_data(1:L)), axis(axis_temp)
  83. title('FFT of Transmitted QAM')
  84. subplot(312)
  85. plot(W/(2*pi),mag)
  86. ylabel('Channel Magnitude Response')
  87. else
  88. subplot(212)
  89. freq_data = abs(fft(QAM_rx_data));
  90. L = length(freq_data)/2;
  91. plot(dig_x_axis(1:L), freq_data(1:L))
  92. title('FFT of Received QAM')
  93. axis_temp = axis;
  94. subplot(211),
  95. freq_data = abs(fft(QAM_tx_data));
  96.   plot(dig_x_axis(1:L),freq_data(1:L)), axis(axis_temp)
  97. title('FFT of Transmitted QAM')
  98. end
  99. % Plots the QAM Received Signal Constellation
  100. figure(5), clf, plot(xxx,yyy,'ro'), grid on, axis([-2.5 2.5 -2.5 2.5]), hold on
  101. %  % Overlay plot of transmitted constellation
  102. %  x_const = [-1.5 -0.5 0.5 1.5 -1.5 -0.5 0.5 1.5 -1.5 -0.5 0.5 1.5 -1.5 -0.5 0.5 1.5];
  103. %  y_const = [-1.5 -1.5 -1.5 -1.5 -0.5 -0.5 -0.5 -0.5 0.5 0.5 0.5 0.5 1.5 1.5 1.5 1.5];
  104. %  plot(x_const, y_const, 'b*')
  105. % Overlay of constellation boundarys
  106. x1 = [-2 -2]; x2 = [-1 -1]; x3 = [0 0]; x4 = [1 1]; x5 = [2 2]; x6 = [-2 2];
  107. y1 = [-2 -2]; y2 = [-1 -1]; y3 = [0 0]; y4 = [1 1]; y5 = [2 2]; y6 = [-2 2];
  108. plot(x1,y6), plot(x2,y6), plot(x3,y6), plot(x4,y6), plot(x5,y6)
  109. plot(x6,y1), plot(x6,y2), plot(x6,y3), plot(x6,y4), plot(x6,y5)
  110. hold off
  111. title('16-QAM Received Signal Constellation and Decision Boundarys')
  112. binary_err_bits_QAM = 0;
  113. for i = 1:length(data_in)
  114. err = abs(data_in(i)-QAM_data_out(i));
  115. if err > 0
  116. binary_err_bits_QAM = binary_err_bits_QAM + 1;
  117. end
  118. end
  119. BER_QAM = 100 * binary_err_bits_QAM/data_length;
  120. end
  121. figure(6), clf
  122. if channel_on == 1
  123. subplot(211), plot(W/(2*pi),mag),title('Channel Magnitude Response')
  124. xlabel('Digital Frequency'),ylabel('Magnitude in dB')
  125. subplot(212), plot(W/(2*pi),phase),title('Channel Phase Response')
  126. xlabel('Digital Frequency'),ylabel('Phase in Degrees')
  127. else
  128. title('Channel is turned off - No frequency response to plot')
  129. end
  130. % Compare output to input and count errors
  131. binary_err_bits_OFDM = 0;
  132. for i = 1:length(data_in)
  133. err = abs(data_in(i)-output(i));
  134. if err > 0
  135. binary_err_bits_OFDM = binary_err_bits_OFDM +1;
  136. end
  137. end
  138. BER_OFDM = 100 * binary_err_bits_OFDM/data_length;
  139. disp(strcat('OFDM: BER=', num2str(BER_OFDM,3), ' %'))
  140. disp(strcat('      Number of error bits=', num2str(binary_err_bits_OFDM)))
  141. if (do_QAM == 1)
  142. disp(strcat('QAM:  BER=', num2str(BER_QAM,3), ' %'))
  143. disp(strcat('      Number of error bits=', num2str(binary_err_bits_QAM)))
  144. end
  145. % Display text file before and after modulation
  146. if (input_type == 2) & (file_input_type == 2)
  147. original_text_file = char(data_samples')
  148. if do_QAM ==1
  149. edit QAM_text_out.txt
  150. end
  151. edit OFDM_text_out.txt
  152. end
  153. % Listen to sounds
  154. if (input_type == 2) & (file_input_type == 3)
  155. do_again = '1';
  156. while ( ~(isempty(do_again)) )
  157. disp(' ')
  158. disp('Press any key to hear the original sound'), pause
  159. sound(data_samples,11025)
  160. disp('Press any key to hear the sound after OFDM transmission'), pause
  161. sound(output_samples,11025)
  162. if do_QAM == 1
  163. disp('Press any key to hear the sound after QAM transmission'), pause
  164. sound(QAM_output_samples,11025)
  165. end
  166. do_again = '';
  167. do_again = input('Enter "1" to hear the sounds again or press "Return" to end  ', 's');
  168. end
  169. end