BỘ NGẪU NHIÊN HOÁ DỮ LIỆU

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 44 - 104)

4.1.1. Nguyên tắc ngẫu nhiên hoá

Đây là khối thực hiện ngẫu nhiên hoá dữ liệu hay gọi chính xác là khối giả ngẫu nhiên dữ liệu. Nhiệm vụ của khối là hạn chế sự xuất hiện liên tục các bit giống nhau. Ngẫu nhiên hoá được thực hiện trên từng symbol. Từng byte data sẽ tuần tự đi qua bộ randomizer, MSB vào trước. Thanh ghi dịch của bộ randomizer sẽ được khởi tạo lại sau mỗi khối data. Nguyên tắc thực hiện ngẫu nhiên hoá dữ liệu được trình bày ở hình 4.1.

Hình 4.1: Nguyên tắc thực hiện bộ randomizer [9]

4.1.2. Thiết kế mạch ngẫu nhiên

Khi thế kế hệ thống trên DSP Builder, mạch thực hiện ngẫu nhiên hoá có thể được thiết kế như hình 4.2. Đa thức tạo chuỗi ngẫu nhiên PRBS (pseudo-random binary sequence) là “1 + X14 + X15”. Giá trị được khởi tạo cho bộ tạo ngẫu nhiên là ‘100101010000000’. Dữ liệu ngõ vào từ chân in_ran sẽ được XOR với khối tạo dữ

liệu ngõ ra của mạch tạo ngẫu nhiên. Ngõ ra của cổng XOR là out_ran. Đây là chuỗi bit đã được ngẫu nhiên hoá. Các tín hiệu ena và rst để cho phép và reset mạch tạo ngẫu nhiên. Việc derandomizer ở đầu thu được thực hiện bằng cách cho qua lại bộ randomizer. Ở đây, đề tài sử dụng dữ liệu ngõ vào là chuỗi bit nên không cần sử dụng các khối chuyển từ số nguyên sang bit ở phía phát.

Hình 4.2: Mạch thực hiện randomizer

4.2. BỘ MÃ HOÁ KÊNH 4.2.1. Bộ mã hoá 4.2.1. Bộ mã hoá

Bộ mã hoá kênh được sử dụng là bộ mã convolutional code, tốc độ mặc định là 1/2, chiều dài bộ mã hoá là 7 và dùng đa thức sinh là: G1 = 171OCT và G2 = 133OCT. Bộ mã hoá được thiết kế bằng cách kết hợp 6 bộ trễ (delay) và 2 cổng XOR 5 ngõ vào. Hình 4.3 trình bày bộ mã hoá convolutional code. In_CC là ngõ vào của bộ mã hoá và out_CC1 và out_CC2 là hai ngõ ra tương ứng của G1 và G2. Các tín hiệu ena và rst để cho phép và reset bộ mã hoá.

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

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

4.3. ÁNH XẠ CHÒM SAO 4.3.1. Bộ ánh xạ chòm sao 4.3.1. Bộ ánh xạ chòm sao

Ánh xạ chòm sao là phương pháp chuyển chuỗi dữ liệu có m bit thành một điểm a + jb. Trong đó, số bit m phụ thuộc vào phép ánh xạ. Ví dụ, QPSK có m bằng 2, 16_QAM có m=4. Trong hệ thống OFDM, ánh xạ chòm sao chỉ là việc chuyển chuỗi bit để cho phép truyền nhanh hơn. Khối mapper sử dụng các phương pháp của điều chế số nhưng nhiệm vụ điều chế được thực hiện ở phép biến đổi IFFT và bộ DAC ở ngõ ra. Có các phương pháp để thiết kế bộ mapper là sử dụng cấu trúc case, hoặc dùng bộ bảng tra, hoặc bộ nhớ ROM. Trong đề tài, khối mapper được thiết kế bằng bảng tra. Có hai bảng tra riêng được sử dụng để lưu giá trị trục đồng pha (I) và trục vuông pha (Q). Dữ liệu cần thực hiện ánh xạ sẽđặt vào đường địa chỉ của bảng

tra. Nội dung trong bảng tra lưu trữ giá trị tương ứng với chòm sao. Dữ liệu được ánh xạ sẽ có giá trị từ -1 đến 1. Ngõ ra của bộ DAC là 14 bit. Vì vậy, đề tài chuẩn hoá tín hiệu về dạng số có dấu chấm cốđịnh. Bảng 4.2 là các dữ liệu đặt trong bảng tra cho bộ mã hoá QPSK. Hình 4.8 trình bày nguyên tắc của phép QPSK và 16_QAM . Sơđồ mạch thực hiện phép điều chế QPSK được trình bày ở hình 4.9.

Hình 4.8: Phép điều chế QPSK và 16_QAM [9]

Bảng 4.2: Dữ liệu đặt trong bảng tra cho phép điều chế QPSK

Dữ liệu vào (địa chỉ) Ngõ ra (dữ liệu đã qua bộ Mapper)

Trục I Trục Q Hệ 10 Hệ nhị phân Giá trị (hệ 10) Số dấu chấm cốđịnh (hệ 10) Giá trị (hệ 10) Số dấu chấm cố định (hệ 10) 0 00 0.707 5792 0.707 5792 1 01 0.707 5792 -0.707 10592 2 10 -0.707 10592 0.707 5792 3 11 -0.707 10592 -0.707 10592 Hình 4.9: Mạch thực hiện phép điều chế QPSK

Bảng 4.3: Dữ liệu đặt trong bảng tra cho phép điều chế 16-QAM

Dữ liệu vào (địa chỉ) Ngõ ra (dữ liệu đã Mapper)

Trục I Trục Q Hệ 10 Hệ nhị phân Giá trị (hệ 10) Số dấu chấm cốđịnh (hệ 10) Giá trị (hệ 10) Số dấu chấm cốđịnh (hệ 10) 0 0000 0.316 2589 0.316 2589 1 0001 0.316 2589 0.949 7774 2 0010 0.316 2589 -0.316 13795 3 0011 0.316 2589 -0.949 8610 4 0100 0.949 7774 0.316 2589 5 0101 0.949 7774 0.949 7774 6 0110 0.949 7774 -0.316 13795 7 0111 0.949 7774 -0.949 8610 8 1000 -0.316 13795 0.316 2589 9 1001 -0.316 13795 0.949 7774 10 1010 -0.316 13795 -0.316 13795 11 1011 -0.316 13795 -0.949 8610 12 1100 -0.949 8610 0.316 2589 13 1101 -0.949 8610 0.949 7774 14 1110 -0.949 8610 -0.316 13795 15 1111 -0.949 8610 -0.949 8610 Hình 4.10: Mạch thực hiện phép điều chế 16-QAM

4.3.2. Bộ giải ánh xạ chòm sao

Ở đầu thu, các điểm chòm sao ở bộ truyền sẽ bị thay đổi do tác động của kênh truyền. Vì vậy, bộ giải ánh xạ chòm sao phải chọn ngưỡng để xác định điểm chòm sao ở phía thu. Khối giải ánh xạ chòm sao (demapper) được thiết kế bằng ngôn ngữ Verilog. Nguyên tắc của của bộ demapper là so sánh giá trị nhận được trên đường I và Q với các điểm lân cận trong chòm sao. Điểm được chọn ở ngõ ra là điểm có khoảng cách Euclid gần nhất với tín hiệu nhận được. Khi sử dụng phép QPSK, bộ demapper được thực hiện đơn giản bằng cách cho giá trị ngõ ra là bit có ý nghĩa lớn nhất (MSB) của chuỗi bit nhận được. Đây là bit dấu của chuỗi dữ liệu. Đối với phương pháp 16_QAM, bộ demapper được thiết kế theo qui luật IF – THEN. Dữ liệu ở ngõ ra sẽđược đặt vào bộ nhớ FIFO để chuẩn bịđi vào bộ giải mã kênh. Trong 256 giá trị của symbol OFDM có 192 giá trị là dữ liệu cần truyền. Vì vậy, bộ nhớ FIFO cần 192 từ nhớ. Mỗi từ có 2 bit nhớ tương ứng với phép điều chế QPSK và 4 bit nhớ đối với phép điều chế 16-QAM. Hình 4.11 là mạch thực hiện demapper.

Hình 4.11: Khối Demapper

4.4. SYMBOL OFDM

Trong symbol OFDM gồm dữ liệu, pilot, các giá trị 0. Vì vậy, trước khi tiến hành ghép symbol cần phải tạo các pilot. Các pilot này dùng để ước lượng kênh truyền phía bên thu.

4.4.1. Mạch tạo pilot

Để tạo pilot, ta cần bộ tạo ngẫu nhiên như hình 4.12. Đa thức sinh của PRBS này là: 1 + X9 + X11. Giá trị khởi tạo cho đa thức sinh là 10101010101B. Tín hiệu pilot ứng với OFDM symbol thứ k sẽ được suy ra từ các wk. Các vị trí dùng để chèn pilot và giá trị chèn được tính như sau:

c-88 = c-38 = c13 = c38 = c63 = c88 = 1-2wk và c-63 = c-13 = 1-2(!wk)

Hình 4.12: Bộ ngẫu nhiên hoá pilot [9]

Mạch tạo pilot được trình bày ở hình 4.13. Mạch gồm khối tạo các giá trị ngẫu nhiên LFSR, khối so sánh để chọn các vị trí cho !wk. Cuối cùng, là các mạch nhân và cộng để thực hiện tính biểu thức 1-2wk hoặc 1-2(!wk). Nếu đánh chỉ số của symbol là từ 0 đến 255 thì giá trị -63 và -13 sẽ trở thành 65 và 115. Tín hiệu index dùng để xác định vị trí bit trong symbol OFDM. Tín hiệu ena và rst dùng để cho phép và reset lại mạch. Tín hiệu pilot là ngõ ra của bộ cộng.

4.4.2. Mạch ghép và tách symbol

Đây là mạch sắp xếp và ghép chuỗi dữ liệu theo một trình tự hợp lý để truyền đi. Một symbol OFDM dùng trong chuẩn 802.16 được định nghĩa như sau: {28 số zero,100 data, zero, 100 data, 27 số zero}. Trong đó các vị trí chèn pilot là c-88, c-63, c-38, c-13, c13, c38, c63 và c88. Phần tạo symbol được thiết kế bằng ngôn ngữ Verilog. Ngõ vào của bộ ghép symbol gồm chỉ số của symbol, dữ liệu cần truyền, pilot và các số zero. Các dữ liệu cần truyền sau khi đã được ánh xạ là loại dữ liệu có hai đường I và Q. Do đó, bộ ghép symbol cũng có các đường tín hiệu riêng dành cho đường I và Q. Ngõ ra bộ bộ ghép symbol sẽđược đưa vào bộ biến đổi IFFT để tạo tín hiệu OFDM. Hình 4.14 trình bày mạch tạo symbol OFDM.

Hình 4.14: Mạch ghép symbol

Việc tách symbol OFDM ở phía thu có nhiệm vụ tách chuỗi dữ liệu nhận được thành luồng dữ liệu, pilot. Các dữ liệu sẽ được đưa vào bộ cân bằng. Trong khi đó, các pilot được sử dụng cho bộ ước lượng kênh truyền. Hình 4.15 trình bày mạch thực hiện chức năng tách symbol OFDM.

4.5. TẠO TÍN HIỆU OFDM BẰNG PHÉP BIẾN ĐỔI IFFT/FFT

Dữ liệu từ ngõ ra bộ tạo symbol OFDM sẽđược nối với ngõ vào bộ biến đổi IFFT. Hai đường dữ liệu I và Q sẽ được nối với hai ngõ vào dữ liệu thực (real) và ảo (image) tương ứng. Phép biến đổi IFFT có ý nghĩa sắp xếp các các symbol dữ liệu trên các sóng mang con khác nhau. Việc sử dụng phép IFFT giúp hệ thống luôn đảm bảo tính trực giao của các sóng mang con. Bộ FFT ở phía đầu thu có nhiệm vụ chuyển tín hiệu OFDM thành các symbol dữ liệu tương ứng.

4.5.1. Thiết kế bộ FFT/IFFT

Để giảm bớt số phép toán khi tính DFT/IDFT, nhiều thuật toán tính DFT/IDFT nhanh và được gọi là phép FFT/IFFT ra đời. Ý tưởng của FFT là dựa vào sự trùng lắp khi tính DFT để giảm các phép toán. Một trong những thuật toán tính FFT phổ biến là thuật toán của Cooley – Tukey. Thuật được sử dụng trong đề tài là thuật toán Cooley – Tukey FFT cơ số 4 tiêu huỷ theo tần số. Trong FFT cơ số 4, chuỗi dữ liệu được chia thành từng 4 điểm và việc thực hiện tính DFT chỉ thực hiện cho 4 điểm. Kết quả tính FFT cuối cùng có được bằng cách kết hợp với các bướm có thừa số xoay và bộ tính DFT 4 điểm. Bộ MegaCore sử dụng FFT cơ số 4 tiêu huỷ theo tần số được trình bày như hình 4.16. Các đường tín hiệu được giải thích trong bảng 4.4

Bảng 4.4: Các tín hiệu của bộ FFT/IFFT

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

Báo tín hiệu vào

reset_n Input Reset mạch tính FFT inverse Input 0: tính FFT

1: tính IFFT

sink_valid Input Tín hiệu cho phép truyền dữ liệu sink_sop Input Bắt đầu gói dữ liệu

sink_eop Input Kết thúc gói dữ liệu

sink_real Input Ngõ vào dữ liệu thực, các giá trị là số có dấu sink_imag Input Ngõ vào dữ liệu phức, các giá trị là số có dấu

sink_error Input Cho biết có lỗi xảy ra ở dữ liệu ngõ vào 00: không có lỗi 01: mất tín hiệu SOP 10: mất tín hiệu EOP 11: báo hiệu bị lỗi EOP Báo tín hiệu ra

sink_ready Output Cho phép chấp nhận dữ liệu ngõ vào source_val Output Báo dữ liệu ngõ ra

source_sop Output Bắt đầu gói dữ liệu source_eop Output Kết thúc gói dữ liệu source_real Output Dữ liệu ngõ ra phần thực source_imag Output Dữ liệu ngõ ra phần ảo source_error Output

Báo hiệu có lỗi ở dữ liệu ngõ ra. Tín hiệu này báo hiệu khi xuất hiện tín hiệu sink_error ở ngõ vào

Hình 4.17 trình bày các đường tín hiệu điều khiển và dữ liệu của bộ FFT. Tín hiệu sink_valid xác nhận có thể đặt dữ liệu vào bộ FFT. Một dữ liệu được truyền thành công khi cả hai tín hiệu sink_valid và sink_ready đều được xác nhận.

Hình 4.17: Các đường dữ liệu của bộ FFT [15]

Khi hoàn tất truyền một fame dữ liệu, tín hiệu sink_sop phải được xác nhận lại và dữ liệu được nạp theo một trình tự nhiên. Hình 1.16 trình bày các tín hiệu

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 44 - 104)