Giải: Chúng ta có một số lưu ý sau:
- Hàm beragwn() cung cấp tỷ lệ lỗi bit lý thuyết điều chế MPSK với mã hóa Gray. Do đó, để kết quả mô phỏng trùng khớp với kết quả lý thuyết, chúng ta phải sử dụng điều chế và giải điều chế có mã hóa Gray, cụ thể là pskmod(m,M,0,'gray') và pskdemod(Rx/sqrt(Ps),M,0,'gray').
- Khi M > 2 , chúng ta giả sử công suất nhiễu là 1 thì công suất phát theo symbol sẽ là log2(M)*SNR(idx) với M là mức điều chế và SNR(idx) là tỷ lệ tín hiệu trên nhiễu tại điểm mô phỏng thứ idx.
- Khi nhiễu trắng bao gồm cả phần thực và phần ảo, biên độ phần thực và phần ảo của nhiễu cần nhân với hệ số
- Chúng ta sử dụng hàm bitterr() để tính số lượng bit lỗi khi chuỗi dữ liệu nhận được có giá trị từ 0 đến M-1.
- Số lượng bit truyền và nhận sẽ là log2(M)*N(idx) với N là số lượng bit truyền tại điểm mô phỏng idx.
EbNo = 0:1:10;
SNR = 10.^(EbNo/10);
M = 8;
% Lý thuyết
BER_t = berawgn(EbNo,'psk',M,'nondiff');
% Tính toán số lượng bit cần mô phỏng
N = ceil(100./BER_t);
BER_s = zeros(size(EbNo));
for idx = 1:length(EbNo)
% Công suất tín hiệu
Ps = log2(M)*SNR(idx);
% Công suất nhiễu
Pn = 1;
% Tx: Máy phát
m = randi([0 M-1],1,N(idx));
Tx = pskmod(m,M,0,'gray');
% Rx: máy thu
n = sqrt(Pn/2).*(randn(1,N(idx)) + 1i*randn(1,N(idx)));
Rx = sqrt(Ps)*Tx + n;
m_ = pskdemod(Rx/sqrt(Ps),M,0,'gray');
BER_s(idx) = BER_s(idx) + biterr(m,m_)/(log2(M)*N(idx));
end
semilogy(EbNo,BER_t,'-',EbNo,BER_s,'o');
xlabel('Tỷ lệ tín hiệu trên nhiễu trung bình [dB]');
ylabel('Tỷ lệ lỗi bit');
legend('Lý thuyết','Mô phỏng');
Tỷ lệ lỗi bit lý thuyết và mô phỏng cho điều chế 8-PSK trên kênh truyền nhiễu trắng.