1 function discretePSK_BER_SNR(M, numSymbs)
2 %% Set defaults for inputs
11 EbN0 = 10 .^ (EbN0_db ./ 10);
17 EsN0 = EbN0 .* log2(M);
18 EsN0_db = 10 .* log10(EsN0);
20 plotlen = length(EbN0);
22 ber = zeros(1, plotlen);
24 data = randi([0, M - 1], 1, numSymbs);
25 txsig = pskmod(data, M, 0, 'gray');
28 rxsig = awgn(txsig, EsN0_db(i));
29 demodData = pskdemod(rxsig, M, 0, 'gray');
31 [bitErrors, ber(i)] = biterr(data, demodData);
37 %% Plot simulated results
38 semilogy(EbN0_db, ber, 'r', 'LineWidth', 2);
41 theoreticalPSK(EbN0_db, M, 'b', 'LineWidth', 1);
44 legend('Simulated', 'Theoretical');
46 legend('Simulated', 'Approximation');
49 title(strcat(num2str(M), '-PSK with Gray code'));
51 xlabel('$E_b/N_0$ (dB)');
55 %saveas(gcf, strcat('BER_SNR_', num2str(M), 'PSK_', num2str(numSymbs), ...