Advertisement
Guest User

Star-16-QAM

a guest
Jul 1st, 2012
2,262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 2.43 KB | None | 0 0
  1. % author: David Rörich
  2. % date: 01.07.2012
  3.  
  4. % Random bit sequence
  5. numberOfBits = 1e5;
  6. x = rand(1, numberOfBits);
  7. x( x < 0.5 ) = 0;
  8. x( x >= 0.5 ) = 1;
  9.  
  10. % Radius of inner and outer circle
  11. r1 = 1;
  12. r2 = 2;
  13.  
  14. % Define mapping table applying Gray mapping
  15. mappingTable(1) = r1 * exp(1i* 0);
  16. mappingTable(2) = r1 * exp(1i* pi/4);
  17. mappingTable(3) = r1 * exp(1i* 3*pi/4);
  18. mappingTable(4) = r1 * exp(1i* pi/2);
  19. mappingTable(5) = r1 * exp(1i* 7*pi/4);
  20. mappingTable(6) = r1 * exp(1i* 3*pi/2);
  21. mappingTable(7) = r1 * exp(1i* pi);
  22. mappingTable(8) = r1 * exp(1i* 5*pi/4);
  23. mappingTable(9:16) = mappingTable(1:8) ./ r1 .* r2;
  24.  
  25. if mod(numberOfBits, 4) ~= 0
  26.     error('numberOfBits must be a multiple of 4.');
  27. end
  28. mappedSymbols = zeros(1, numberOfBits / 4);
  29.  
  30. % Map bits to symbols
  31. for i = 1:4:length(x)
  32.    
  33.     symbolBits = x(i:i+3);
  34.        
  35.     symbolIndex = 2^3 * symbolBits(1) + 2^2 * symbolBits(2) + 2^1 * symbolBits(3) + 2^0 * symbolBits(4);
  36.    
  37.     % Mapping
  38.     mappedSymbols((i - 1)/4 + 1) = mappingTable( symbolIndex + 1);
  39. end
  40.  
  41. % Add white Gaussian noise
  42. snr = 20; % signal-to-noise ratio in dB
  43. meanSignalPower = (r1^2 + r2^2)/2;
  44. snr_lin = 10^(snr/10); % linear scale
  45. meanNoisePower = meanSignalPower ./ snr_lin;
  46. receivedSignal = mappedSymbols + randn(1, length(mappedSymbols)) * sqrt(meanNoisePower/2) +...
  47.     1i * randn(1, length(mappedSymbols)) * sqrt(meanNoisePower/2);
  48.  
  49. % Decision and demapping
  50. receivedBits = zeros(1, numberOfBits / 4);
  51. for i = 1:length(receivedSignal)
  52.   [mindiff minIndex] = min(receivedSignal(i) - mappingTable);
  53.   symbolIndex = minIndex - 1;
  54.   bitString = dec2bin(symbolIndex, 4);
  55.   receivedBits((i-1)*4 + 1) = str2double(bitString(1));
  56.   receivedBits((i-1)*4 + 2) = str2double(bitString(2));
  57.   receivedBits((i-1)*4 + 3) = str2double(bitString(3));
  58.   receivedBits((i-1)*4 + 4) = str2double(bitString(4));
  59. end
  60.  
  61. numberOfBitErrors = nnz( x - receivedBits );
  62. ber = numberOfBitErrors / numberOfBits; % bit error rate
  63. disp(['SNR: ' num2str(snr) ' dB']);
  64. disp(['Bit error rate (BER): ' num2str(ber)]);
  65.  
  66. figure;
  67. plot( real(receivedSignal), imag(receivedSignal), '.'); hold on;
  68. absLim = max( max(real(receivedSignal)), max(imag(receivedSignal)));
  69. xyLimits = [-absLim*1.1 absLim*1.1];
  70. xlim( xyLimits );
  71. ylim( xyLimits );
  72. plot( real(mappedSymbols), imag(mappedSymbols), '.r'); hold off;
  73. xlim( xyLimits );
  74. ylim( xyLimits );
  75. xlabel('real part');
  76. ylabel('imaginary part');
  77. legend('received', 'transmitted');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement