Các bộ cân bằng
294
eq_current = eqrls; % Sử dụng bộ cân bằng RLS trong lần lặp đầu tiên.
% Vòng lặp chính
for jj = 1:4
msg = randint(500,1,M); % Thông điệp ngẫu nhiên
modmsg = qammod(msg,M); % Điều chế 16-QAM.
% Thiết lập chuỗi huấn luyện cho lần lặp đầu tiên.
if jj == 1
ltr = 200; trainsig = modmsg(1:ltr);
else
% Sử dụng chế độ quyết định sau lần lặp đầu tiên.
ltr = 0; trainsig = [];
end
% Mô phỏng méo kênh truyền
filtmsg = filter(chan,1,modmsg);
% Cân bằng tín hiệu thu.
s = equalize(eq_current,filtmsg,trainsig);
% Vẽ các tín hiệu.
h = scatterplot(filtmsg(ltr+1:end),1,0,'bx'); hold on;
scatterplot(s(ltr+1:end),1,0,'g.',h);
scatterplot(sigconst,1,0,'k*',h);
legend('Tin hieu thu','Tin hieu sau khi can bang','Dang phan bo tin hieu');
title(['Iteration #' num2str(jj) ' (' eq_current.AlgType ')']);
hold off;
% Chuyển từ RLS sang LMS sau lần lặp thứ hai.
if jj == 2
eqlms.WeightInputs = eq_current.WeightInputs; % Copy các ngõ vào cuối vòng
lặp.
eqlms.Weights = eq_current.Weights; % Copy các trọng số ở cuối vòng lặp.
eq_current = eqlms; % Sử dụng bộ cân bằng LMS.
end
end
Ở mỗi vòng lặp, chương trình sẽ thực hiện vẽ đồ thị phân bố của tín hiệu thu, tín hiệu sau khi
cân bằng và phân bố của tín hiệu 16QAM lý tưởng. Ví dụ, hình vẽ dưới mô tả kết quả sau khi
thực hiện vòng lặp thứ tư: