Các bộ cân bằng
292
thực nghiệm sau khi các trọng số của bộ cân bằng đã hội tụ. Có thể sử dụng hàm xcorr để xác
định tương quan chéo giữa ngõ ra bộ điều chế và ngõ ra bộ cân bằng (đánh lệnh help xcorr ở
cửa sổ lệnh để xem chi tiết về hàm này).
Có hai cách để đưa độ trễ D vào quá trình khảo sát: chèn thêm dữ liệu hoặc cắt bớt dữ liệu.
o Thêm vào tập dữ liệu gốc D ký hiệu ở đoạn cuối. Trước khi so sánh dữ liệu gốc và dữ liệu
thu, bỏ đi D ký hiệu ở phần đầu của dữ liệu thu. Theo cách này, toàn bộ dữ liệu gốc (không
tính phần thêm vào) đều được so sánh với dữ liệu thu.
o Trước khi so sánh, bỏ đi D ký hiệu cuối của dữ liệu gốc và D ký hiệu đầu tiên của dữ liệu
thu. Theo cách này, một số ký hiệu gốc sẽ không được so sánh với dữ liệu thu.
Ví dụ 18-2. Sử dụng bộ cân bằng tuyến tính định khoảng ký hiệu, có 3 trọng số, cập nhật
theo giải thuật LMS chuẩn hoá để cân bằng một tín hiệu BPSK, có xét đến độ trễ của kênh
truyền, dùng phương pháp cắt bớt dữ liệu.
M = 2; % Sử dụng phương pháp điều chế BPSK.
msg = randint(1000,1,M); % Dữ liệu ngẫu nhiên
modmsg = pskmod(msg,M); % Điều chế.
trainlen = 100; % Chiều dài của chuỗi huấn luyện
trainsig = modmsg(1:trainlen); % Chuỗi huấn luyện
% Định nghĩa bộ cân bằng.
eqlin = lineareq(3,normlms(.0005,.0001),pskmod(0:M-1,M));
eqlin.RefTap = 2; % Thiết lập chỉ số tham chiếu là tap trung tâm.
[eqsig,detsym] = equalize(eqlin,modmsg,trainsig); % Cân bằng.
detmsg = pskdemod(detsym,M); % Giải điều chế tin hiệu đã phát hiện.
% Bù lại độ trễ do thiết lập chỉ số tham chiếu.
D = (eqlin.RefTap -1)/eqlin.nSampPerSym;
trunc_detmsg = detmsg(D+1:end); % Loại bỏ D ký hiệu đầu của dữ liệu đã cân
bằng.
trunc_msg = msg(1:end-D); % Bỏ đi D ký hiệu cuối của thông điệp.
% Tính tỷ lệ lỗi, không xét chuỗi huấn luyện.
[numerrs,ber] = biterr(trunc_msg(trainlen+1:end),...
trunc_detmsg(trainlen+1:end))
Kết quả xuất ra như sau:
numerrs =
0
ber =
0
Trong trường hợp dữ liệu vào được chia thành nhiều vector liên tiếp nhau (ví dụ như trong
các quá trình lặp vòng), ta phải sử dụng hàm equalize nhiều lần, lưu lại trạng thái nội của bộ
cân bằng để chuẩn bị cho lần thực hiện kế tiếp. Nói cách khác, các giá trị cuối của các thuộc
tính
WeightInputs
và
Weights
sau một vòng lặp cũng chính là giá trị khởi đầu trong vòng
lặp kế tiếp. Có hai khả năng có thể xảy ra: sử dụng cùng một bộ cân bằng trong các vòng lặp
khác nhau, hoặc thay đổi bộ cân bằng sau mỗi vòng lặp. Sau đây là quy trình sử dụng bộ cân
bằng trong các vòng lặp ứng với hai khả năng nêu trên: