Added technical milestone report and changes to 1st presentation
[4yp.git] / discretePSK_BER_SNR.m
CommitLineData
1eeb62fb 1function discretePSK_BER_SNR(M, numSymbs)
4dd65313
AIL
2 %% Set defaults for inputs
3 if nargin < 2
1eeb62fb 4 numSymbs = 1000;
4dd65313
AIL
5 end
6 if nargin < 1
7 M = 2;
8 end
9
4dd65313
AIL
10 EbN0_db = 0:0.2:10;
11 EbN0 = 10 .^ (EbN0_db ./ 10);
12
13 Es = 1;
14 Eb = Es / log2(M);
15 N0 = Eb ./ EbN0;
16
17 EsN0 = EbN0 .* log2(M);
18 EsN0_db = 10 .* log10(EsN0);
19
20 plotlen = length(EbN0);
21
22 ber = zeros(1, plotlen);
23
1eeb62fb 24 data = randi([0, M - 1], 1, numSymbs);
4dd65313
AIL
25 txsig = pskmod(data, M, 0, 'gray');
26
27 for i = 1:plotlen
28 rxsig = awgn(txsig, EsN0_db(i));
29 demodData = pskdemod(rxsig, M, 0, 'gray');
30
31 [bitErrors, ber(i)] = biterr(data, demodData);
32 end
33
1eeb62fb 34 figure(1);
4dd65313
AIL
35 clf;
36
37 %% Plot simulated results
38 semilogy(EbN0_db, ber, 'r', 'LineWidth', 2);
39 hold on;
40
1eeb62fb
AIL
41 theoreticalPSK(EbN0_db, M, 'b', 'LineWidth', 1);
42
4dd65313 43 if M == 2 || M == 4
4dd65313
AIL
44 legend('Simulated', 'Theoretical');
45 else
1eeb62fb 46 legend('Simulated', 'Approximation');
4dd65313
AIL
47 end
48
49 title(strcat(num2str(M), '-PSK with Gray code'));
50 grid on;
51 xlabel('$E_b/N_0$ (dB)');
52 ylabel('BER');
53
54 formatFigure;
1eeb62fb
AIL
55 %saveas(gcf, strcat('BER_SNR_', num2str(M), 'PSK_', num2str(numSymbs), ...
56 % '.svg'));
4dd65313 57end