0% found this document useful (0 votes)
31 views2 pages

QAM

The document simulates transmission of binary data using QAM modulation and demodulation. It generates random binary data, maps the data to QAM symbols using both binary and Gray coding, adds noise, demodulates the noisy signal, and calculates the bit error rates for the two coding schemes. It also plots the symbol mappings for 16-QAM using binary and Gray coding to illustrate their differences.

Uploaded by

Victorr Miguel
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
31 views2 pages

QAM

The document simulates transmission of binary data using QAM modulation and demodulation. It generates random binary data, maps the data to QAM symbols using both binary and Gray coding, adds noise, demodulates the noisy signal, and calculates the bit error rates for the two coding schemes. It also plots the symbol mappings for 16-QAM using binary and Gray coding to illustrate their differences.

Uploaded by

Victorr Miguel
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 2

M = 32; % Modulation order (alphabet size or number of points in signal constellation)

k = log2(M); % Number of bits per symbol

n = 30000; % Number of bits to process

sps = 1; % Number of samples per symbol (oversampling factor)

rng default;

dataIn = randi([0 1],n,1); % Generate vector of binary data

stem(dataIn(1:40),'filled');

title('Random Bits');

xlabel('Bit Index');

ylabel('Binary Value');

dataInMatrix = reshape(dataIn,length(dataIn)/k,k);

dataSymbolsIn = bi2de(dataInMatrix);

figure; % Create new figure window.

stem(dataSymbolsIn(1:10));

title('Random Symbols');

xlabel('Symbol Index');

ylabel('Integer Value');

dataMod = qammod(dataSymbolsIn,M,'bin'); % Binary coding with phase offset of zero

dataModG = qammod(dataSymbolsIn,M); % Gray coding with phase offset of zero

EbNo = 10;

snr = EbNo+10*log10(k)-10*log10(sps);

receivedSignal = awgn(dataMod,snr,'measured');

receivedSignalG = awgn(dataModG,snr,'measured');

sPlotFig = scatterplot(receivedSignal,1,0,'g.');

hold on

scatterplot(dataMod,1,0,'k*',sPlotFig)

dataSymbolsOut = qamdemod(receivedSignal,M,'bin');

dataSymbolsOutG = qamdemod(receivedSignalG,M);

dataOutMatrix = de2bi(dataSymbolsOut,k);

dataOut = dataOutMatrix(:); % Return data in column vector

dataOutMatrixG = de2bi(dataSymbolsOutG,k);
dataOutG = dataOutMatrixG(:); % Return data in column vector

[numErrors,ber] = biterr(dataIn,dataOut);

fprintf('\nThe binary coding bit error rate is %5.2e, based on %d errors.\n', ...

ber,numErrors)

[numErrorsG,berG] = biterr(dataIn,dataOutG);

fprintf('\nThe Gray coding bit error rate is %5.2e, based on %d errors.\n', ...

berG,numErrorsG)

%==============

M = 32; % Modulation order

x = (0:15); % Integer input

symbin = qammod(x,M,'bin'); % 16-QAM output (natural-coded binary)

symgray = qammod(x,M,'gray'); % 16-QAM output (Gray-coded)

scatterplot(symgray,1,0,'b*');

for k = 1:M

text(real(symgray(k)) - 0.0,imag(symgray(k)) + 0.3,...

dec2base(x(k),2,4));

text(real(symgray(k)) - 0.5,imag(symgray(k)) + 0.3,...

num2str(x(k)));

text(real(symbin(k)) - 0.0,imag(symbin(k)) - 0.3,...

dec2base(x(k),2,4),'Color',[1 0 0]);

text(real(symbin(k)) - 0.5,imag(symbin(k)) - 0.3,...

num2str(x(k)),'Color',[1 0 0]);

end

title('16-QAM Symbol Mapping')

axis([-4 4 -4 4])

You might also like