Đề tài Thực hiện bộ giải mã Viterbi trên Fpga

MỤC LỤC . vii

LIỆT KÊ HÌNH . x

LIỆT KÊ BẢNG . xii

PHẦN B: NỘI DUNG . 13

CHƯƠNG 1: TỔNG QUAN HỆ THỐNG THÔNG TIN SỐ . 14

1.1 Vị trí của mã hóa kênh trong hệ thống thông tin số . 14

1.2 Khái niệm mã hóa kênh và phân loại . 14

1.2.1 Khái niệm . 14

1.2.2 Phân loại mã hóa kênh . 15

1.3 Khái quát về mã khối và mã trellis . 16

1.3.1 Mã khối . 16

1.3.2 Mã trellis . 17

CHƯƠNG 2: THUẬT TOÁN GIẢI MÃ VITERBI . 19

2.1 Khái niệm mã chập . 19

2.2 Phân tích mã hóa dùng mã chập . 19

2.3 Cấu trúc mã chập . 23

2.4 Biểu diễn mã chập . 27

2.5 Ưu nhược điểm của mã chập . 30

2.5.1 Ưu điểm . 30

2.5.2 Nhược điểm. 30

2.6 Định nghĩa thuật toán Viterbi . 30

2.7 Phân tích thuật giải Viterbi . 31

2.8 Giải mã quyết định cứng và giải mã quyết định mềm . 43

Thực hiện bộ giải mã Viterbi trên FPGA Trang viii

Phần A: Giới thiệu

2.8.1 Thuật toán Viterbi quyết định cứng . 43

2.8.2 Thuật toán Viterbi quyết định mềm . 48

2.8.2.1 Thuật toán Viterbi quyết định mềm (phương pháp 1) . 48

2.8.2.2 Thuật toán Viterbi quyết định mềm (phương pháp 2) . 49

2.8.3 Ưu điểm của giải mã quyết định mềm so với giải mã quyết định cứng

2.9 Xác suất lỗi . 54

2.10 Ưu nhược điểm của thuật toán giải mã Viterbi . 54

2.10.1 Ưu điểm . 54

2.10.2 Nhược điểm . 55

CHƯƠNG 3: MÔ PHỎNG THUẬT TOÁN VITERBI TRÊN MATLAB . 56

3.1 Giới thiệu . 56

3.2 Sơ đồ khối hệ thống . 56

3.3 Lưu đồ mô phỏng . 57

3.3.1 Khối tạo bit ngõ vào . 57

3.3.2 Khối mã hóa . 58

3.3.3 Khối cộng nhiễu Gausse trắng . 58

3.3.4 Khối giải mã . 58

3.3.5 Tính toán và vẽ BER . 59

3.4 Hình ảnh về chương trình mô phỏng . 59

CHƯƠNG 4: XÂY DỰNG THUẬT TOÁN VITERBI TRÊN KIT DE2 . 65

4.1 Giới thiệu sơ lược KIT DE2 và phần mềm Quartus . 65

4.1.1 KIT DE2 của Altera . 65

4.1.1.1 Tổng quan kit DE2 . 65

4.1.1.2 Sử dụng nút nhấn và Switch . 67

4.1.1.3 Sử dụng LCD . 68

4.1.2 Phần mềm lập trình Quatus II . 68

4.2 Giải quyết vấn đề . 69

4.2.1 Giải mã viterbi quyết định cứng . 69

4.2.2 Giải mã viterbi quyết định mềm . 73

4.3 Lưu dồ thuật toán lập trình . 75

4.4 Kết quả . 82

Thực hiện bộ giải mã Viterbi trên FPGA Trang ix

Phần A: Giới thiệu

CHƯƠNG 5: KẾT LUẬN . 88

5.1 Tổng kết nhận xét . 88

5.2 Tồn tại và hướng phát triển của đề tài . 88

PHẦN C: PHỤ LỤC VÀ TÀI LIỆU THAM KHẢO . 90

I. Phụ lục . 91

1. Hướng dẫn sử dụng kit DE2 để mô phỏng . 91

2. Tài nguyên sử dụng trên Kit DE2 . 91

3. Mã nguồn Matlab . 93

4. Mã nguồn VHDL . 105

II. Tài liệu tham khảo . 123

pdf124 trang | Chia sẻ: lethao | Lượt xem: 4994 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Đề tài Thực hiện bộ giải mã Viterbi trên Fpga, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
)l m l mc c c c n c c c n c c n    (2.8.2) Trong đó L là chiều dài của chuỗi tin ngõ vào và m là chiều dài lớn nhất của các thanh ghi dịch. Yêu cầu phải thêm vào đuôi của chuỗi mã hóa với m bit zero để cho bộ mã hóa tích chập trở về trạng thái tất cả zero. Yêu cầu bộ mã hóa phải bắt đầu và kết thúc tại trạng thái tất cả zero. Các chỉ số bên dưới là chỉ số thời gian và các chỉ số bên trên là bit chỉ ra khối k bit ngõ vào hay n bit ngõ ra riêng lẻ. Các chuỗi được ước đoán y và chuỗi nhận được r có thể được mô tả tương tự. 1 1 (1) (2) ( ) (1) (2) ( ) (1) ( ) 1 1 1, ,..., , , ,..., , ,...,l m l m n n n o o or r r r r r r r r        (2.8.3) Và 1 1 (1) (2) ( ) (1) (2) ( ) (1) ( ) 1 1 1, ,..., , , ,..., , ,...,l m l m n n n o o oy y y y y y y y y        (2.8.4) Đối với giải mã ML, thuật toán Viterbi chọn y để P(r/y) lớn nhất. Giả thiết kênh là không nhớ, và vì vậy quá trình nhiễu ảnh hưởng lên bit nhận được độc lập với quá trình nhiễu ảnh hưởng lên tất cả các bit khác. Từ lý thuyết xác suất (xác suất liên kết), xác suất của tập hợp các sự kiện độc lập tương đương với tính xác suất của các sự kiện riêng lẻ. Vì vậy,         1 (1) (1) (2) (2) ( ) ( ) 0 | | | .... | L m n n i i i i i i i p r y p r y p r y p r y        (2.8.5)     1 ( ) ( ) 0 1 | | L m n j j i i i j p r y p r y              (2.8.6) Biểu thức này được gọi là hàm có khả năng xảy ra của y với r nhận được. Việc ước đoán P(r/y) lớn nhất cũng là logP(r/y) lớn nhất bởi vì các hàm logarit là các hàm tăng đều. Vì vậy, một hàm log của khả năng xảy ra có thể được định nghĩa log log(/),   1 ( ) ( ) 0 1 log ( | ) log | l m n j j i i i j p r y p r y              (2.8.7) Vì thao tác trên các tổng dễ dàng hơn thao tác trên các hàm log nên một metric bit được định nghĩa như sau:    ( ) ( ) ( ) ( )| log |j j j ji i i iM r y a p r y b    (2.8.8) Trong đó a và b được chọn trước để cho metric bit là một số nguyên dương nhỏ nhất. Các giá trị a và b được định nghĩa cho kênh hệ thống nhị phân (BSC) hay giải mã quyết định cứng. Hình 2.25 trình bày một BSC Thực hiện bộ giải mã Viterbi trên FPGA Trang 45 Chương 2: Thuật giải mã Viterbi Hình 2.25: Kiểu kênh hệ thống nhị phân, trong đó p là xác suất chéo Đối với BSC a và b có thể được chọn theo 2 cách phân biệt. Theo cách thông thường a và b được chọn như sau: (2.8.9) Và (2.8.10) Kết quả metric bit là [ ] (2.8.11) Từ kiểu BSC, rõ ràng chỉ lấy giá trị p và 1-p. Bảng 2.8 trình bày kết quả metric bit Bảng 2.8: Các giá trị metric bit thông thường Bit nhận Bit nhận Bit được giải mã 0 1 Bit được giải mã 1 0 Metric bit này biểu diễn ước lượng của các bit giải mã và các bit nhận. Ví dụ nếu bit được giải mã yi (j) = 0 và bit nhận được ri (j) = 0 thì ước lượng M(yi (j) | ri (j) ) = 0. Tuy nhiên, nếu bit được giải mã yi (j) = 0 và bit nhận được ri (j) = 1 thì ước lượng M(yi (j) | ri (j)) = 1. Như vậy điều này liên quan đến khoảng cách Hamming và được biết như là metric của khoảng cách Hamming. Vì vậy, thuật toán Viterbi chọn chuỗi mã y qua trellis có ước lượng/khoảng cách Hamming nhỏ nhất liên quan đến chuỗi nhận được r. Cách khác a và b có thể được chọn như sau: (2.8.12) Thực hiện bộ giải mã Viterbi trên FPGA Trang 46 Chương 2: Thuật giải mã Viterbi Và (2.8.13) Kết quả metric bit cách 2 là [ ] (2.8.14) Bảng 2.9: Các giá trị metric bit cách 2 Bit nhận Bit nhận Bit được giải mã 1 0 Bit được giải mã 0 1 Đối với trường hợp này thuật toán Viterbi chọn chuỗi mã hóa y qua trellis có ước lượng/khoảng cách Hamming lớn nhất đối với chuỗi nhận được r. Hơn nữa, đối với một kênh tùy ý(không nhất thiết là BSC), các giá trị a và b được tìm theo nguyên tắc thử- và – sai để lấy metric bit có thể chấp nhận được. Từ metric bit, metric đường được định nghĩa là: ∑ (∑ ) (2.8.15) Và chỉ ra tổng ước lượng của việc ước đoán chuỗi bit nhận được r với chuỗi bit được mã hóa y trong sơ dồ trellis. Hơn nữa metric nhánh thứ K được định nghĩa như sau: ∑ (2.8.16) Và metric đường thành phần được định nghĩa như sau: ∑ (2.8.17) Do đó: ∑ ∑ (2.8.18) Metric nhánh thứ k chỉ ra việc ước lượng chọn một nhánh từ biểu đồ trellis. Metric đường thứ k chỉ ra việc ước lượng chọn một chuỗi bit được mã hóa từng phần y tới chỉ số thời gian k. Thực hiện bộ giải mã Viterbi trên FPGA Trang 47 Chương 2: Thuật giải mã Viterbi Thuật toán Viterbi sử dụng biểu đồ trellis để tính các metric đường. Mỗi trạng thái (nút) trong biểu đồ trellis được gán một giá trị gọi là metric đường thành phần. Metric đường từng phần được xác định từ trạng thái s = 0 tại thời điểm t = 0 đến một trạng thái đặc biệt s = k tại thời điểm t >= 0. Tại mỗi trạng thái metric đường từng phần tốt nhất được chọn từ các đường kết thúc tại trạng thái đó. Metric đường từng phần tốt nhất, có thể là metric lớn nhất hay nhỏ nhất phụ thuộc vào a và b được chọn theo cách thông thường hay chọn lựa khác. Metric được chọn diễn tả bằng đường tồn tại (survivor) và các metric còn lại được diễn tả bằng đường không phù hợp (nonsurvivor). Các đường tồn tại được lưu lại trong khi các đường không phù hợp bị loại bỏ trong sơ đồ trellis. Thuật toán Viterbi chọn đường tồn tại đơn giản đi từ cuối của tiến trình giống như đường ML. Sau đó truy ngược theo đường ML trong biểu đồ trellis sẽ tìm được chuỗi giải mã ML. Thuật toán Viterbi quyết định cứng có thể được thực hiện như sau: Sk,t là trạng thái trong biểu đồ trellis tương ứng với trạng thái Sk tại thời điểm t. Mỗi trạng thái trong Trellis được gán một giá trị là V(Sk,t). 1. (a) khởi tạo t = 0 (b) khởi tạo V(S0,0) = 0 và tất cả các V khác V(Sk,t) = +oo 2. (a) lấy t = t+1 (b) Tính các metric đường từng phần cho tất cả đường đi đến trạng thái Sk tại thời điểm t. Đầu tiên, tìm metric nhánh thứ t ∑ (2.8.19) Metric này được tính từ khoảng cách Hamming ∑ | | (2.8.20) Thứ hai, tính metric đường thành phần thứ t ∑ (2.8.21) Metric này được tính từ 3. a) Lấy V(Sk,t) đến metric đường từng phần tốt nhất là trạng thái Sk tại thời điểm t. Thông thường, metric đường từng phần tốt nhất là metric đường từng phần có giá trị nhỏ nhất (b) Nếu có một nút TIE nằm trên metric đường từng phần tốt nhất, sau đó bất kì một metric đường từng phần có thể được chọn. 4. Lưu trữ metric đường từng phần và các và các đường trạng thái cùng với bit tồn tại liên kết của nó. 5. Nếu t < L+m-1, trở về bước 2. Kết quả của thuật toán Viterbi là một đường Trellis duy nhất tương ứng với từ mã ML. Thực hiện bộ giải mã Viterbi trên FPGA Trang 48 Chương 2: Thuật giải mã Viterbi Ví dụ: Biểu đồ chuyển tiếp trạng thái trình bày các bit tin và các bit mã hóa được ước đoán theo các nhánh (cần thiết cho quá trình giải mã ). Việc giải mã chọn đường ML thông qua trellis như được trình bày trong hình 2.26. Metric đường từng phần (được lưu trữ) được chọn cho ví dụ này là khoảng cách Hamming lớn nhất và được trình bày trong hình cho mỗi nút. Các metric đường từng phần đậm tương ứng với ML. Các đường tồn tại được biểu diễn bởi các đường liền nét đậm và các đường cạnh tranh được biểu diễn bởi các đường nét đứt. Hình 2.26: Biểu diễn Viterbi theo ví dụ 2.8.2 Thuật toán Viterbi quyết định mềm Có 2 phương pháp tổng quát thực hiện thuật toán Viterbi quyết định mềm. Phương pháp thứ nhất (phương pháp 1) sử dụng metric khoảng cách Euclidean thay cho metric khoảng cách Hamming. Các bit nhận sử dụng trong metric khoảng cách Euclidean được xử lí bằng lượng tử hóa nhiều mức. Phương pháp thứ hai (phương pháp 2) sử dụng một metric tương quan trong đó các bit nhận được của nó dùng trong metric này cũng được xử lí bằng lượng tử hóa nhiều mức. 2.8.2.1 Thuật toán Viterbi quyết định mềm (phương pháp 1) Trong giải mã quyết định mềm, bộ thu không gán 0 hay 1 (lượng tử hóa bit đơn) cho mỗi bit nhận được mà sử dụng các giá trị lượng tử hóa nhiều bit hay bit không xác định. Lý tưởng, chuỗi thu r được lượng tử hóa bit không xác định và được sử dụng trực tiếp trong bộ giải mã quyết định mềm. Thuật toán Viterbi quyết định mềm tương tự với thuật toán quyết định cứng ngoại trừ khoảng cách Euclidean bình phương được sử dụng trong metric thay cho khoảng cách Hamming. Thuật toán Viterbi quyết định mềm có thể được thực hiện như sau Sk, t là trạng thái trong biểu đồ trellis tương ứng với trạng thái Sk tại thời điểm t. Mỗi trạng thái trong trellis được gán một giá trị là V(Sk, t). 1. (a) khởi tạo t = 0 Thực hiện bộ giải mã Viterbi trên FPGA Trang 49 Chương 2: Thuật giải mã Viterbi (b) Khởi tạo V(S0, 0) = 0 và tất cả các V khác V(Sk, t) = +00 2. (a) Lấy t = t + 1 (b) Tính các metric đường thành phần cho tất cả các đường đi đến trạng thái Sk tại thơi điểm t. Đầu tiên tìm metric nhánh thứ t ∑ (2.8.22) Metric này được tính từ khoảng cách Euclidean ∑ (| |) (2.8.23) Thứ 2, tính metric đường từng phần thứ t ∑ (2.8.24) Metric này được tính từ (2.8.25) 3. (a) Gán V(Sk, t ) cho metric đường từng phần tốt nhất là trạng thái Sk, tại thời điểm t. Thông thường metric đường từng phần tốt nhất là metric đường từng phần có giá trị nhỏ nhất. (b) Nếu có một TIE cho một metric đường từng phần tốt nhất, thì sau đó bất kỳ một trong những metric đường từng phần có thể được chọn. 4. Lưu trữ metric đường từng phần và các đường trạng thái và các bit tồn tại liên kết của nó. 5. Nếu t <= L+m -1, trở về bước 2. 2.8.2.2 Thuật toán Viterbi quyết định mềm (phương pháp 2) Thuật toán viterbi quyết định mềm thứ 2 được trình bày bên dưới. Hàm khả năng xảy ra được biểu diễn bằng hàm mật độ xác suất Gaussian √ ( √ ) (2.8.26) Trong đó Eb là năng lượng nhận được /bit của từ mã và N0 là mật độ phổ nhiễu một phía. Bit nhận được là biến ngẫu nhiên Gaussian có trung bình là √ và phương sai là N/2. Hàm log của khả năng xảy ra có thể được định nghĩa là: ∑ (∑ ) Thực hiện bộ giải mã Viterbi trên FPGA Trang 50 Chương 2: Thuật giải mã Viterbi ∑ (∑* ( √ ) √ + ) ∑ (∑( √ ) ) Trong đó ∑ (∑ ) Trong đó C1 và C2 là hằng số, không phải là hàm của y (2.8.28) Từ đây metric bit được định nghĩa là (2.8.29) Thuật toán Viterbi quyết định mềm có thể được thực hiện như sau: Sk, t là trạng thái trong biểu đồ trellis tương ứng với trạng thái Sk tại thời điểm t. Mỗi trạng thái trong trellis được gán một giá trị là V(Sk, t ). 1. (a) Khởi tạo t = 0 (b) Khởi tạo V(S0, 0) = 0 và tất cả các V khác V(Sk, t) = +00 2. (a) Lấy t = t + 1 (b) Tính các metric đường thành phần cho tất cả các đường đi đến trạng thái Sk tại thơi điểm t. Đầu tiên tìm metric nhánh thứ t ∑ (2.8.30) Metric này được tính từ sự tương quan của và , ∑ . Thứ 2, tính metric đường từng phần thứ t ∑ (2.8.31) Metric này được tính từ (2.8.32) Thực hiện bộ giải mã Viterbi trên FPGA Trang 51 Chương 2: Thuật giải mã Viterbi 3. (a) Lấy V(Sk,t ) đến metric đường từng phần tốt nhất là trạng thái Sk tại thời điểm t. Metric đường từng phần tốt nhất là metric đường từng phần có giá trị lớn nhất. (b) Nếu có một thay đổi cho metric đường thành phần tốt nhất, thì sau đó bất kỳ một trong những metric đường từng phần có thể được chọn. 4. Lưu trữ metric đường từng phần và các đường trạng thái và các bit tồn tại liên kết của nó. 5. Nếu t < L + m – 1, trở về bước 2. Thông thường đối với giải mã quyết định mềm, trong kênh nhiễu Gaussian thì độ lợi mã hóa khoảng 2dB so với giải mã quyết định cứng. 2.8.3 Ưu điểm của giải mã quyết định mềm so với giải mã quyết định cứng Với việc thuật toán giải mã quyết định mềm chia ra nhiều mức để nhận dạng tín hiệu thu được thì độ tin cậy giải mã sẽ đảm bảo hơn so với giải mã quyết định cứng chỉ có 2 mức duy nhất cho tín hiệu nhận được. Để thấy rõ ưu điểm của thuật toán quyết định mềm so với quyết định cứng, chúng ta xét một ví dụ đơn giản sử dụng bộ mã parity sau: Bảng 2.10: Ví dụ với bộ mã parity Bit vào 1 Bit vào 2 Bit parity đƣợc tạo bởi bộ mã hóa Từ mã 0 0 0 0 0 1 1 011 1 0 1 101 1 1 0 110 Tất cả các trạng thái có thể được tạo bởi bộ mã hóa là 000, 011, 101, 110. Bây giờ chúng ta sẽ tiến hành truyền bản tin “01” xuyên qua kênh truyền. Đối với giải mã quyết định cứng: Giả sử hệ thống thông tin của chúng ta bao gồm một bộ mã hóa tạo kiểm parity, kênh truyền, và một bộ thu giải mã quyết định cứng Với bản tin “01” đưa đến bộ mã hóa parity, từ mã ngõ ra ta nhận được sẽ là “011”, Thực hiện bộ giải mã Viterbi trên FPGA Trang 52 Chương 2: Thuật giải mã Viterbi Hình 2.27 Mô tả giải mã quyết định cứng với bộ mã parity Từ mã này giả sử sẽ được truyền qua kênh truyền như sau: “0” được truyền dưới dạng điện áp “0 volt”, “1” được truyền với điện áp “1 volt”. Kênh truyền có nhiễu sẽ làm suy giảm tín hiệu và tín hiệu thu được tại bộ nhận sẽ bị suy giảm (dạng sóng màu đỏ). Bộ giải mã quyết định cứng thực hiện quyết định dựa trên một mức điện áp ngưỡng. Với trường hợp này, điện áp ngưỡng của chúng ta sẽ là 0,5 volt (nằm giữa các mức 0V và 1V). Ở mỗi thời điểm lấy mẫu của bộ thu (như hình trên), bộ tách sóng quyết định cứng sẽ quyết định trạng thái đó là mức “0” nếu mức áp thu được là nhỏ hơn 0,5V và sẽ chọn là mức “1” nếu áp thu được lớn hơn 0,5V. Do đó, ngõ ra của khối quyết định cứng trên sẽ là “001”. Có lẽ ngõ ra “001” này là vô lý khi so sánh với các từ mã có thể như bảng ở trên, do đó, các bit của từ mã trên có thể đã sai do tác động trên kênh truyền. Bộ giải mã quyết định cứng so sánh ngõ ra của khối giải mã quyết định cứng trên với tất cả các trạng thái có thể của từ mã và tính toán khoảng cách Hamming bé nhất cho mỗi trường hợp. Mô tả như bảng bên dưới: Bảng 2.11: Tính toán khoảng cách Hamming cho quyết định cứng Tất cả từ mã có thể Ngõ ra quyết định cứng Khoảng cách Hamming 000 001 1 011 001 1 101 001 1 110 001 3 Công việc của bộ giải mã là chọn ta từ mã đã phát đi dựa trên khoảng cách Hamming bé nhất. Tuy nhiên, ở đây có tới 3 trường hợp cho ra khoảng cách Thực hiện bộ giải mã Viterbi trên FPGA Trang 53 Chương 2: Thuật giải mã Viterbi Hamming đều là 1. Do đó, bộ giải mã có thể sẽ chọn ngẫu nhiên một trong 3 trường hợp trên làm quyết định cuối cùng. Vì vậy, xác xuất đúng chỉ là 1/3. Đối với bộ giải mã quyết định mềm: Sự khác biệt chủ yếu của thuật toán quyết định cứng và quyết định mềm như ta đã biết chính là thuật toán giải mã quyết định mềm sử dụng khoảng cách Euclidean thay vì khoảng cách Hamming. Với cùng một bộ mã hóa và kênh truyền, giờ ta sẽ xem hiệu quả của quyết định mềm so với quyết định cứng. Hình 2.28 Mô tả giải mã quyết định mềm với bộ mã parity Mức điện áp của tín hiệu nhận được tại mỗi thời điểm lấy mẫu như hình trên. Khối quyết định cứng tính toán khoảng cách Euclidean của tất cả các từ mã có thể với tín hiệu nhận được. Bảng 2.12: Tính toán khoảng cách Euclidean cho quyết định mềm Từ mã có thể Mức điện áp tại mỗi thời điểm lấy mẫu của dạng sóng nhận đƣợc Tính toán khoảng cách Euclidean Khoảng cách Euclidean 0 0 0 ( 0V 0V 0V ) 0.2V 0.4V 0.7V (0-0.2) 2 + (0-0.4) 2 + (0-0.7) 2 0.69 0 1 1 ( 0V 1V 1V ) 0.2V 0.4V 0.7V (0-0.2) 2 + (1-0.4) 2 + (1-0.7) 2 0.49 1 0 1 ( 1V 0V 1V ) 0.2V 0.4V 0.7V (1-0.2) 2 + (0-0.4) 2 + (1-0.7) 2 0.89 1 1 0 ( 1V 1V 0V ) 0.2V 0.4V 0.7V (1-0.2) 2 + (1-0.4) 2 + (0-0.7) 2 1.49 Thực hiện bộ giải mã Viterbi trên FPGA Trang 54 Chương 2: Thuật giải mã Viterbi Khoảng cách Euclidean bé nhất là 0,49 tương ứng với từ mã “011”, chính là từ mã mà chúng ta đã truyền đi. Bộ giải mã quyết định mềm sẽ chọn nó làm từ mã giải được ở ngõ ra, nếu bộ tạo kiểm parity không thể sửa lỗi thì lưu đồ giải mã quyết định mềm này sẽ giúp khôi phục tin tức trong trường hợp này. Qua ví dụ trên ta có thể thấy được ưu điểm của giải mã quyết định mềm so với giải mã quyết định cứng. Tuy nhiên, với trường hợp trên, người ta cũng có thể nhanh chóng tìm ra lỗi của phương pháp xử lí này nếu các mức điện áp tương ứng là 0,2V, 0,4V và 0,6V. Đó là bởi vì bộ tạo kiểm parity không có khả năng sửa lỗi mà chỉ có thể phát hiện lỗi 1 bit. Khi đó, sử dụng bộ giải mã quyết định mềm sẽ nâng cao hiệu quả của bộ nhận chừng 2 dB so với bộ giải mã quyết định cứng. 2.9 Xác suất lỗi Có 2 xác suất lỗi liên quan đến mã tích chập, là xác suất lỗi sự kiện đầu tiên và xác suất lỗi bit. Xác suất lỗi sự kiện đầu tiên, Pe, là xác suất lỗi mà một lỗi bắt đầu tại thời điểm đặc biệt. Xác suất lỗi bit, Pb, là số các lỗi bit ở chuỗi được mã hóa. Đối với giải mã quyết định cứng, xác suất lỗi bit và xác suất lỗi sự kiện đầu tiên được định nghĩa như sau: √ (2.9.1) Và √ (2.9.2) Trong đó, (√ ) (2.9.3) Và ∫ √ (2.9.4) Đối với giải mã quyết định mềm, xác suất lỗi sự kiện đầu tiên và xác suất lỗi bit được định nghĩa như sau: (2.9.5) Và (2.9.6) 2.10 Ưu nhược điểm của thuật toán giải mã Viterbi 2.10.1 Ưu điểm  Thuật toán Viterbi là thuật giải mã có nhớ nên việc giải mã có độ chính xác cao.  Tốc độ xử lí của mộ giải mã Viterbi cao hơn nhiều so với bộ giải mã tuần tự vì ở cùng một thời điểm, bộ giải mã Viterbi giải quyết hết tất cả các nhánh còn bộ giải mã tuần tự chỉ chọn ngẫu nhiên một nhánh nên nó sẽ mất thời gian nếu sự lựa chọn trước đó là không đúng. Thực hiện bộ giải mã Viterbi trên FPGA Trang 55 Chương 2: Thuật giải mã Viterbi 2.10.2 Nhược điểm  Thuật toán giải mã Viterbi dựa trên thuật giải mã giống nhau lớn nhất (ML- Maximum likelihood), thuật toán này lại phải dựa trên các nguyên lý sau để việc giải mã được chính xác:  Lỗi xảy ra phải không thường xuyên, xác suất lỗi phải nhỏ  Xác suất lỗi kép phải thấp hơn nhiều so với lỗi 1 bit, do đó lỗi phải được phân bố một cách ngẫu nhiên. Do vậy, với kênh truyền có xác suất lỗi lớn và thường xuyên, lỗi nhiều bit liên tiếp thì hiệu quả của việc giải mã sẽ không như mong muốn.  Một nhược điểm nữa là thuật toán giải mã Viterbi sử dụng bộ nhớ để ghi lại các trạng thái và thông số metric nên cần có bộ nhớ cho giải mã, bộ giải mã càng phức tạp thì dung lượng bộ nhớ càng lớn.  Không thích hợp với các mã có chiều dài ràng buộc dài và tỉ số S/N lớn (chỉ thích hợp với bộ giải mã tuần tự). Thực hiện bộ giải mã Viterbi trên FPGA Trang 56 Chương 3: Mô phỏng thuật toán Viterbi dùng Matlab CHƢƠNG 3 MÔ PHỎNG THUẬT GIẢI MÃ VITERBI BẰNG MATLAB 3.1 Giới thiệu Matlab là một phần mềm được ứng dụng rộng rãi trong nhiều lĩnh vực như viễn thông, cơ điện, hệ thống điều khiển tự động …, trong đó ứng dụng mô phỏng xử lý tín hiệu trong viễn thông là một ứng dụng mạnh nhất của Matlab. Matlab tích hợp khoảng hơn 400 hàm cho phép người lập trình sử dụng cho công việc một cách hiệu quả và nhanh chóng. Với đề tài này, để mô phỏng quá trình mã hóa dùng mã chập, truyền tín hiệu trên kênh truyền có nhiễu và sử dụng thuật toán Viterbi để giải mã hóa, người thực hiện đề tài đã sử dụng các hàm có sẵn trong Matlab để thực hiện. Để dễ dàng hơn cho việc quan sát và trình bày, tác giả đã sử dụng giao diện đồ họa GUI để mô phỏng thuật giải viterbi. Quá trình mô phỏng sẽ được trình bày rõ ràng trong phần sau. 3.2 Sơ đồ khối hệ thống Hình 3.1: Sơ đồ khối hệ thống Tín hiệu sau khi được số hóa thành các bit, các bit này được đưa đến bộ mã hóa mã chập. Sau khi được mã hóa, tín hiệu (các bit) được truyền trên kênh truyền có nhiễu, ở đây tác giả chỉ xét nhiễu Gauss trắng. Tín hiệu đã bị thay đổi bởi nhiễu được thu và giải mã nhờ bộ giải mã Viterbi. Nhờ thuật toán Viterbi, tín hiệu được giải mã sẽ gần giống nhất với tín hiệu ban đầu. Khối mã hóa mã chập Khối giải mã Viterbi Ngõ ra bit Ngõ vào bit Bit mã hóa Bit nhận được AWGN Kênh truyền Thực hiện bộ giải mã Viterbi trên FPGA Trang 57 Chương 3: Mô phỏng thuật toán Viterbi dùng Matlab 3.3 Lưu đồ mô phỏng Hình 3.2: Lưu đồ mô phỏng 3.3.1 Khối tạo bit ngõ vào Tác giả đưa ra hai lựa chọn cho việc tạo bit tín hiệu ngõ vào. Thứ nhất là tạo bit ngẫu nhiên theo số lượng bit nhập từ người dùng, và thứ hai là nhập trực tiếp chuỗi bit vào. Để tạo bit vào ngẫu nhiên, trong Matlab tác giả sử dụng hàm randint. inbits = randint(1, numbit ) ; với inbits là chuỗi bit ngõ vào, numbit là số lượng bit ngõ vào được nhập bởi người dùng trên giao diện GUI. Hàm randint với 2 thông số sẽ mặc định tạo một Mã hóa mã chập Cộng nhiễu Gauss trắng Lượng tử bit nhận được Giải mã Viterbi Tính và vẽ BER Xây dựng sơ đồ trellis Xác định đa thức sinh và chiều dài ràng buộc Tạo bit Khối tạo bit ngõ vào Khối mã hóa Khối giải mã Thực hiện bộ giải mã Viterbi trên FPGA Trang 58 Chương 3: Mô phỏng thuật toán Viterbi dùng Matlab ma trận số nhị phân với chiều của ma trận tương ứng với 2 thông số đó. Kích thước tối đa có thể tạo ra phụ thuộc vào bộ nhớ dành cho chương trình. Với câu lệnh như trên thì numbit tối đa chỉ là 106. 3.3.2 Khối mã hóa Đối với bộ mã hóa mã chập, như đã giới thiệu, có rất nhiều cách để người ta quy ước cho một bộ mã hóa mã chập dựa trên số thanh ghi, ngõ vào, ngõ ra, đa thức sinh, tốc độ bộ mã..v.v. và tương ướng với mỗi bộ mã có một phương pháp tính toán riêng. Ở đây tác giả mô tả việc tính toán mã chập dựa trên bộ mã được quy ước bởi các nhà sản xuất chip thực hiện mã chập bao gồm các thông số: chiều dài ràng buộc K và tốc độ của bộ mã R. Và G1 và G2 là các đa thức sinh, được nhập bởi người sử dụng. Để tạo sơ đồ trellis, trong Matlab tác giả sử dụng hàm poly2trellis: trellis = poly2trellis (len, [g1 g2]); Dùng hàm convenc để mã hóa mã chập tín hiệu: encbits = convenc(inpbits,trellis); 3.3.3 Khối cộng nhiễu Gausse trắng Khối này mô phỏng cho việc tín hiệu bị can nhiễu khi truyền trên kênh truyền. Tín hiệu bị cộng nhiễu Gauss với thông số SNR đã xác định trước. Sử dụng hàm awgn để cộng nhiễu vào tín hiệu: awgnbits = awgn(encbits,snr,measured); 3.3.4 Khối giải mã Tín hiệu sau khi được cộng nhiễu được đưa đến bộ thu, tại đây tín hiệu được lượng tử trước khi sử dụng thuật toán viterbi để giải mã. Tùy vào kiểu quyết định giải mã mà sử dụng các lượng tử khác nhau. Với quyết định cứng Tín hiệu thu được lượng tử về 2 mức 0 và 1 tương ứng với tín hiệu có mức điện áp nhỏ hơn và lớn hơn 0. Sử dụng hàm quantiz để lượng tử tín hiệu. partition = [0]; codebook = [0 1]; quanbits = quantiz(awgnbits,partition,codebook); Sử dụng hàm vitdec với quyết định cứng để giải mã Viterbi decbits = vitdec(quanbits,trellis,numbit-1,‟term‟,‟hard‟); Thực hiện bộ giải mã Viterbi trên FPGA Trang 59 Chương 3: Mô phỏng thuật toán Viterbi dùng Matlab Với quyết định mềm Tín hiệu thu được lượng tử về 8 mức và việc sử dụng hàm quantiz như sau partition = [-.8571 -.5714 -.2857 0 .2857 .5714 .8571]; codebook = [-.99 -.8571 -.5714 -.2857 0 .2857 .5714 .8571]; quanbits = quantiz(awgnbits,partition,codebook); Sử dụng hàm vitdec với quyết định mềm decbits = vitdec(quanbits,trellis,numbit -1,‟term‟,‟soft‟,3); 3.3.5 Tính toán và vẽ BER Tỉ số bit lỗi là số tỉ số bit lỗi sau khi giải mã so với tổng số bit ngõ vào. Trong matlab tác giả sử dụng hàm semilogy để vẽ BER semilogy(Eb_N0_dB,ratioerr_comp,‟mp-„,‟LineWidth‟,2); 3.4 Hình ảnh về chương trình mô phỏng Hình 3.3: Giao diện khởi đầu chương trình mô phỏng Thực hiện bộ giải mã Viterbi trên FPGA Trang 60 Chương 3: Mô phỏng thuật toán Viterbi dùng Matlab Hình 3.4: Giao diện chương trình mô phỏng 1 Hình 3.5: Giao diện chương trình mô phỏng 2 Thực hiện bộ giải mã Viterbi trên FPGA Trang 61 Chương 3: Mô phỏng thuật toán Viterbi dùng Matlab Hình 3.6: Nhập bit ngẫu nhiên – Quyết định mềm Hình 3.7: BER của quyết định mềm Thực hiện bộ giải mã Viterbi trên FPGA Trang 62 Chương 3: Mô phỏng thuật toán Viterbi dùng Matlab Hình 3.8: Nhập bit ngẫu nhiên – Quyết định cứng Hình 3.9: BER của quyết định cứng Thực hiện bộ giải mã Viterbi trên FPGA Trang 63 Chương 3: Mô phỏng thuật toán Viterbi dùng Matlab Hình 3.10: So sánh BER của cả quyết định cứng và mềm Hình 3.11: Tự nhập bit vào – Quyết định mềm Thực hiện bộ giải mã Viterbi trên FPGA Trang 64 Chương 3: Mô phỏng thuật toán Viterbi dùng Matlab Nhận xét : - Từ các hình 3.6 và 3.8 ta có thể thấy rằng, với cùng một số lượng bit vào như nhau thì giải mã quyết định cứng sẽ giải mã với số bit sai nhiều hơn so với giải mã quyết định mềm. Bởi vì như chúng ta đã đề cập trước đó, giải mã quyết định mềm sử dụng lượng tử hóa nhiều bit, do đó nó tạo độ tin cậy khi giải mã cao hơn so với giải mã quyết định mềm chỉ sử dụng lượng tử 1 bit. - Tỷ số tín hiệu/nhiễu SNR càng cao thì điều đó có nghĩa kênh truyền càng ít nhiễu, khi đó, giải mã quyết định cứng và mềm sẽ cho kết qu

Các file đính kèm theo tài liệu này:

  • pdfDO AN TN_DUY_KHA .pdf