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
124 trang |
Chia sẻ: lethao | Lượt xem: 4994 | Lượt tải: 1
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:
- DO AN TN_DUY_KHA .pdf