Giải mã bằng thuật toán Viterbi

Một phần của tài liệu Thực hiện hệ thống ofdm trên phần cứng (Trang 46 - 49)

Bộ giả mã được thiết kế bằng thuật toán Viterbi. Kiến trúc cơ bản của thuật toán Viterbi được trình bày ở hình 4.4. Thuật toán gồm bốn khối chính: khối tính khoảng cách nhánh (branch metric), khối cộng-so sánh-chọn (add compare and select), khối chọn đường tối ưu (survivor path metric), và khối qui hồi và giả mã (traceback and output decode block).

Khối tính khoảng cách nhánh (branch metric) dùng để tính khoảng cách Hamming của các bit (là 2 bit nếu sử dụng tốc độ mã là R=1/2) với các nhánh. Khối cộng-so sánh-chọn có nhiệm vụ tính tổng khoảng cách Hamming của nhánh với trạng thái hiện tại và giữ lại nhánh có khoảng cách ngắn nhất. Khối chọn đường tối ưu để tìm ra chuỗi trạng thái phù hợp nhất. Khối qui hồi và giả mã có nhiệm vụ chọn, dò lại chuỗi trạng thái tối ưu và quyết định chuỗi bit ở ngõ ra. Đây là chuỗi bit giải mã của thuật toán.

Hình 4.4: Mô hình thuật toán Viterbi

Add compare and select unit (ASCU)

Input data Branch metric unit

(BMU)

Add compare and select

(ACS)

Survivor path metric (SMU)

State metric storage

(SMS)

Traceback and output decode block

Hình 4.5 là ví dụ về giải mã dùng thuật toán Viterbi cho chuỗi dữ liệu thu là (11,00,01,11,10,10,11). Chuỗi trạng thái phù hợp nhất được xác định bằng cách tính khoảng cách Hamming với tất cả các đường. Khi hai đường cùng gặp nhau tại một điểm, ta chỉ giữ lại đường có khoảng cách Hamming ngắn hơn. Đường cuối cùng được chọn để quyết định trạng thái ngõ ra là đường có khoảng cách Hamming ngắn nhất. Vì vậy, chuỗi dữ liệu tối ưu nhất là (11, 01, 01, 11, 11, 10,11). Khi xác định được chuỗi dữ liệu tối ưu, ta có thể xác định chuỗi dữ liệu ở ngõ ra bộ giải mã. Trong ví dụ trên, chuỗi dữ liệu sau khi giải mã là (1100100).

Hình 4.5: Ví dụ giả mã dùng thuật toán Viterbi

Hình 4.6 trình bày phương pháp sử dụng MegaCore để thực hiện bộ giải mã dùng thuật toán Viteribi. Các đường tín hiệu cơ bản để điều khiển bộ giải mã được trình bày ở hình 4.7. Thuật toán Viterbi dựa vào chuỗi trạng thái phù hợp nhất. Vì vậy, việc xác định độ dài của chuỗi sẽảnh hưởng đến hiệu quả của bộ giải mã. Nếu chiều dài được chọn quá dài sẽ làm cho tăng các phép tính toán, sử dụng nhiều bộ nhớ, và tăng thời gian trễ. Ngược lại, nếu chọn chiều dài quá ngắn sẽ hạn chế khả năng sửa lỗi của thuật toán. Chiều dài qui hồi thường được chọn gấp 6 lần chiều dài bộ mã trong trường hợp không bỏ bớt. Trong trường hợp có bỏ bớt, chiều dài được chọn tối đa dài gấp 15 lần chiều dài bộ mã. Trong thiết kế này, chiều dài bộ mã là 7

và không sử dụng kỹ thuật bỏ bớt nên chiều dài qui hồi được chọn là 42. Chi tiết các đường tín hiệu được diễn tảở bảng 4.1. Bộ giải mã Viterbi được thiết kế với dữ liệu ra bị trễ khoảng 4 lần chiều dài qui hồi. Đồng thời, các dữ liệu đến bộ giả mã là không liên tục nên dữ liệu ngõ ra của bộ giả mã là không liên tục. Các dữ liệu này sẽ được ghi vào bộ nhớ FIFO. Sau đó, tín hiệu rd_data_out sẽ đọc liên tục 192 bit dữ liệu trong bộ nhớ và đây là dữ liệu liên tục trong một symbol OFDM.

Hình 4.6: Bộ giải mã dùng thuật toán Viterbi

Bảng 4.1: Ý nghĩa các đường tín hiệu của bộ giải mã Viterbi

Tên tín hiệu Hướng Mô tả

Tín hiệu vào

sink_val Input Tín hiệu cho phép truyền dữ liệu rr Input Ngõ vào của dữ liệu cần giải mã

eras_sym Input Ngõ này được sử dụng cho kỹ thuật bỏ bớt (puncturing)

source_rdy Input Tín hiệu cho phép truyền dữ liệu ngõ ra ber_clear Input Xoá bộđếm BER

Tín hiệu ra

source_val Output Báo dữ liệu ngõ ra

decbit Output Ngõ ra của dữ liệu sau bộ giải mã sink_rdy Output Cho phép truyền dữ liệu ngõ vào

nomalizations Output Chứa giá trị chuẩn hoá. Đây là thông tin được dùng để tránh hiện tượng tràn của bộđếm. numerr Output Số bit lỗi

Tín hiệu cấu hình

reset Input Reset bộ giải mã

state_node_sync Input Sử dụng trong các trường hợp đặc biệt dùng để thiết lập điểm bắt đầu của dữ liệu vào

Một phần của tài liệu Thực hiện hệ thống ofdm trên phần cứng (Trang 46 - 49)