Các bộ cân bằng
290
mà bộ cân bằng đã phát hiện được, còn
e
là vector sai số giữa
y
và tín hiệu tham chiếu (chuỗi
huấn luyện hoặc chuỗi dữ liệu mà bộ cân bằng phát hiện).
Ví dụ 18-1. Sử dụng bộ cân bằng tuyến tính định khoảng ký hiệu, có 8 trọng số, cập nhật
theo giải thuật LMS với kích cỡ bước 0.01 để cân bằng một tín hiệu QPSK.
Trong ví dụ này, ta chọn chuỗi dữ liệu huấn luyện chính là 500 mẫu đầu tiên của tín hiệu phát.
Kết quả cân bằng được minh hoạ bằng đồ thị phân bố của các tín hiệu bị nhiễu, tín hiệu sau
khi cân bằng và tín hiệu QPSK lý tưởng.
% Thiết lập các thông số và tín hiệu.
M = 4; % Kích thước tập ký hiệu điều chế
msg = randint(1500,1,M); % Thông điệp ngẫu nhiên
modmsg = pskmod(msg,M); % Điều chế QPSK
trainlen = 500; % Chiều dài chuỗi huấn luyện
chan = [.986; .845; .237; .123+.31i]; % Các hệ số của kênh truyền
filtmsg = filter(chan,1,modmsg); % Mô phỏng méo kênh truyền.
% Cân bằng tín hiệu thu.
eq1 = lineareq(8, lms(0.01)); % Khởi tạo đối tượng mô tả bộ cân bằng.
eq1.SigConst = pskmod([0:M-1],M); % Thiết lập vector mô tả dạng tín hiệu.
[symbolest,yd] = equalize(eq1,filtmsg,modmsg(1:trainlen)); % Cân bằng.
% Vẽ đồ thị phân bố.
h = scatterplot(filtmsg,1,trainlen,'bx'); hold on;
scatterplot(symbolest,1,trainlen,'g.',h);
scatterplot(eq1.SigConst,1,0,'k*',h);
legend('Tin hieu bi meo','Tin hieu sau khi can bang',...
'Phan bo tin hieu ly tuong');
hold off;
% Tính tỷ lệ lỗi khi có và không có bộ cân bằng.
demodmsg_noeq = pskdemod(filtmsg,M); % Giải điều chế tín hiệu chưa cân
bằng.
demodmsg = pskdemod(yd,M); % Giải điều chế tín hiệu phát hiện bởi bộ cân
bằng.
[nnoeq,rnoeq] = symerr(demodmsg_noeq(trainlen+1:end),...
msg(trainlen+1:end));
[neq,req] = symerr(demodmsg(trainlen+1:end),...
msg(trainlen+1:end));
disp('Ty le loi ky hieu khi co va khong co bo can bang:')
disp([req rnoeq])
Kết quả thực thi chương trình:
Ty le loi ky hieu khi co va khong co bo can bang:
0 0.3310
Đồ thị phân bố: