Giải mã mã Turbo:

Một phần của tài liệu báo cáo mã hóa kênh (Trang 42)

Tại bộ gải mã, bộ tách kênh sẽ tách ra các bít hệ thống và kiểm tra tương ứng với các bộ giải mã SISO.

Do đầu phát sử dụng bộ xáo trộn, nên trong bộ giải mã có các bộ xáo trộn giống hệt ở đầu phát và các bộ giải xáo trộn tương ứng.

Bộ giải mã dùng thuật giải mã lặp nên thông tin dư được sử dụng làm thông tin tiền nghiệm cho bộ giải mã SISO (RSC1) khác. Để nâng cao chất lượng giải mã người ta tăng số lần lặp n, số lần lặp có thể được quy định trước hoặc tự động dừng theo nhiều biện pháp đánh giá.

4.3.1: Tổng quan về các thuật toán giải mã:

Mã PCCC có cấu trúc mã hoá kết nối song song tuy nhiên quá trình giải mã PCCC lại dựa trên sơ đồ giải mã kết nối nối tiếp. Mã Turbo sử dụng bộ giải mã kết nối nối tiếp vì sơ đồ kết nối nối tiếp có khả năng chia sẻ thông tin giữa các bộ giải mã kết nối, trong khi đó các bộ giải mã có sơ đồ kết nối song song chủ yếu giải mã độc lập nhau.

Hình 4.13 thể hiện 2 phương pháp giải mã chính là SOVA và MAP

Hình 4.13: hai phương pháp giải mã chính

Họ thứ nhất là họ các thuật toán MAP còn gọi là thuật toán BCJR (Bahl-Cocke- Jelinek-Raviv, tên bốn người đã tìm ra thuật toán này). Thuật toán này liên quan đến các thuật toán giải mã khả năng xảy ra lớn nhất (ML) nhằm làm giảm tối đa xác suất lỗi bit. Họ này bao gồm các thuật toán symbol-by-symbol MAP, là phương pháp tối ưu để tính các thông tin APP, đây là thuật toán dạng tích, độ phức tạp rất cao. Trong họ này còn có hai loại thuật toán làm gần đúng thuật toán MAP để trở thành thuật toán dạng tổng độ phức tạp ít hơn mà chất lượng giải mã gần như tương đương là Log-MAP và phiên bản gần đúng của Log-MAP là Max-log-MAP. Một họ thuật toán giải mã khác là một họ thuật toán dựa trên việc sửa đổi thuật toán Viterbi (VA) có sử dụng thêm metric bổ sung

và thuật toán ít được biết đến hơn là thuật toán Viterbi ngõ ra liệt kê nối tiếp (SLVA). Ngoài hai họ thuật toán giải mã này còn có một số kỹ thuật giải mã lặp khác.

Tuy cùng là các thuật toán ngõ ra mềm dựa trên sơ đồ trellis nhưng khác với VA là một thuật toán giải mã trellis ML và giảm thiểu xác suất lỗi từ mã, thuật toán MAP lại nhắm tới giảm tối đa xác suất lỗi bit. MAP là một phương pháp tối ưu để ước đoán các trạng thái và ngõ ra của các quá trình Markov trong điều kiện nhiễu trắng. Tuy nhiên MAP ít khả năng được ứng dụng thực tế bởi các khó khăn về số học liên quan đến việc biểu diễn xác suất, các hàm phi tuyến cùng một số các phép nhân và cộng khi tính toán các giá trị này.

Log-MAP là một biến thể của MAP, chất lượng gần như tương đương mà không gặp trở ngại trong việc ứng dụng trong thực tế. Log-MAP được thực hiện hoàn toàn trong miền logarit, nhờ đó phép nhân chuyển thành phép cộng và ta có được một hàm tương đối dễ thực hiện hơn.

Max-Log-MAP và SOVA là thuật toán gần tối ưu dùng để giảm bớt độ phức tạp tính toán nhưng trong kênh nhiễu Gauss thì chất lượng hai loại này cũng không cao, đặc biệ trong vùng SNR thấp. Max -Log-MAP hầu như giống với Log-MAP chỉ có duy nhất một điểm khác là sử dụng một hàm đơn giản hơn rất nhiều. Các nghiên cứu cho thấy Max-Log-MAP làm giảm chất lượng khoảng 0.5 dB so với MAP/Log-MAP trong kênh nhiễu Gauss.

Các khác biệt trong việc thực hiện giữa các thuật toán giải mã này có thể giúp giải thích được sự khác biệt về chất lượng. Tại mỗi bước thứ k trong một trellis, MAP/Log- MAP chia tất cả các đường ra thành hai tập ; một tập các đường khi bit thông tin ngõ vào bằng 1 và một tập các đường khi bit thông tin ngõ vào bằng 0. MAP/Log-MAP sẽ tính tỉ số xác suất log (LLR – Log Likehood Ratios) của hai tập này theo công thức. Ngược lại Max -Log-MAP sẽ tìm trong tất cả các đường để chọn các đường thích hợp, một đường có khả năng lớn nhất cho bit thông tin ngõ vào bằng 0. Ngõ ra mềm của Max-Log-MAP là LLR của hai đường này.

Còn SOVA thì bổ sung vào VA một số giá trị thực và lưu giữ . Thuật toán này chỉ tìm đường “tồn tại” và một đường cạch tranh với đường “tồn tại” đó. Về bản chất, SOVA sử dụng cùng một loại metric và có quyết định cứng như Max-log- MAP. Mặc dù, SOVA luôn tìm đường có khả năng lớn nhất nhưng đường cạnh tranh tốt nhất có thể bị loại ra trước khi kết hợp với đường ML. Kết quả là ngõ ra mềm của SOVA có thể bị sai đường so với ngõ ra mềm của Max-Log-MAP và chất lượng của bộ giải mã lặp SOVA kém hơn Max -Log-MAP.

Mặc dù thuật toán MAP tốt hơn thuật toán SOVA nhưng nó có cấu trúc phần cứng và quá trình tính toán giải mã lại phức tạp hơn nhiều.

4.3.2. Giải thuật MAP:

Bộ giải mã là sự kết hợp của nhiều bộ giải mã (thường là hai bộ giải mã) và giải mã lặp (interatively). Phần lớn tập trung ở giải thuật Viterbi cung cấp giá trị ra mềm (soft output or reliability information) cho một bộ so sánh giá trị ra mềm được dùng để quyết định bit ngõ ra. Một giải thuật khác cũng được quan tâm là symbolby- symbol Maximum A Posteriori (MAP) của Balh được công bố.

Hình 4.14: Bộ giải mã Turbo − − − − Hard decision Deinter. Deinter. Inter. Inter. DEC1 DEC2 (c(1);I) λ (c(2);I) λ (c(1);I) λ (c(2);I) λ ) O ; u ( A k 1 λ Λ1e(uk) Λ2e(uk) ) O ; u ( A k 2 λ ) ( 1a uk Λ Λ2e(uk) Σ Σ

Giải thuật giải mã được thực hiện như sau:

1. Tách tín hiệu nhận ra thành 2 chuỗi tương ứng cho bộ giải mã 1 và bộ giải mã 2 . 2. Ở vòng lặp đầu tiên ,thông tin a-priori của bộ giải mã 1 được đưa về 0. Sau khi bộ giải mã 1 đưa ra được thông tin extrinsic thì sẽ được chèn và đưa tới bộ giải mã 2 đóng vai trò là thông tin a- priori của bộ giải mã này. Bộ giải mã 2 sau khi đưa ra thông tin extrinsic thì vòng lặp kết thúc. Thông tin extrinsic của bộ giải mã thứ 2 sẽ được giải chèn và đưa về bộ giải mã 1 như là thông tin a priori .

3. Quá trình giải mã giải mã cứ lặp lại như vậy cho đến khi thực hiện đủ số lần lặp đã qui định .

4. Sau vòng lặp cuối cùng, giá trị ước đoán có được tính bằng cách giải chèn thông tin ở bộ giải mã thứ 2 và đưa ra quyết định cứng.

Giải mã Turbo dùng phương pháp gọi là Maximum Likehoo Detection (MLD). Bộ giải mã là sự kết hợp của nhiều bộ giải mã (thường là hai bộ giải mã) và giải mã lặp (interatively). Quyết định đưa ra dựa trên sự tính toán lặp đi lặp lại của hai bộ giải mã này. Một dạng của phương pháp MLD là Maximum a-posteriori Probability (MAP), hay còn gọi là BCJR (theo tên của 4 nhà khoa học tìm ra giải thuật này là Bahl, Cocke, Jelinek, Raviv).

MAP sử dụng công thức Beyes để tính toán xác xuất gần đúng nhất cho chuỗi bit nhận được, từ đó giảm lỗi ít nhất:

P(a.b) = P(a|b) . P(b)

P({a.b}|c) = P(a|{b.c}) . P(b|c) Ta đặt: x= (a.b) và y = (b.c), ta có:

Các xác suất P(a), P(b)… đã biết và gọi là xác suất tiền nghiệm, còn xác suất có điều kiện như P(x|c) xảy ra với điều kiện c xảy ra gọi là xác suất hậu nghiệm.

Gọi:

uklà bit đã được giải mã, nhận giá trị +1 hoặc -1

y là chuỗi nhận được, ta có:

Mặt khác: (adsbygoogle = window.adsbygoogle || []).push({});

P({ = +1} . y) = P(y) .P( = +1 | y)

Từ (2) và (3), ta có:

Từ (1) và (4) ta có:

có tới trạng thái tiếp theo. Rõ ràng rằng, nếu trạng thái phía trước Sk-1 và trạng thái Sk

được biết thì giá trị của bit đầu vào uk sẽ được biết.

Hình 4.15: Các trạng thái có thể có của chuyển dịch trạng thái trong bộ RSC có k=3

Từ đây, ta thấy xác suất để uk=+1 bằng với xác suất của sự chuyển dịch từ trạng thái Sk-1 tới trạng thái hiện tại Sk (là 1 trong tập hợp 4 trạng thái dịch chuyển xảy ra khi uk=+1). Bộ 4 sự dịch chuyển này loại trừ lẫn nhau, tức là chỉ một sự dịch chuyển có thể xảy ra tại bộ mã hóa), do đó, xác suất của chúng bằng tổng của các xác suất thành phần. Từ công thức 5.15, ta có:

Tại (s,s’) => uk=+1 là một tập hợp của dịch chuyển từ Sk-1 tới trạng thái hiện tại Sk=s có thể xảy ra nếu bit đầu vào uk=1, tương tự như vậy, đối với (s,s’) => uk=-1. Tức là chúng ta có thể viết P(Sk-1=s’ . Sk = s . y) = P(s’ . s . y).

Chuỗi bit nhận được y có thể được chia thành 3 đoạn:

- Chuỗi nhận được tại trạng thái chuyển dịch hiện tại yk. - Chuỗi nhận được trướng trạng thái chuyển dịch hiện tại yj<k. - Chuỗi nhận được sau trạng thái chuyển dịch hiện tại yj>k. Chúng ta có thể thấy rõ hơn phân đoạn này ở hình 4.16:

Hình 4.16: Giải mã MAP sử dụng sơ đồ lưới

Ta có:

P(s’ . s . y) = P(s’ . s . yj<k . yk . yj>k ) Theo công thức Beyes ta có:

P(a.b) = P(a|b).P(b)

Trong thực tế, vì kênh không nhớ nên chuỗi nhận được trong tương lai yj>k sẽ chỉ phụ thuộc vào trạng thái hiện tại s mà không phụ thuộc vào trạng thái s’ trước đó cũng như chuỗi yk và yj<k, do đó, ta có thể viết:

P(s’. s . y) = P(s’ . s . yj<k . yk . yj>k )

= P(yj>k | s’. s . yj<k . yk) . P(s’. s . yj<k . yk) = P(yj>k | s) . P(s’. s . yj<k . yk)

Mặt khác, cũng theo Beyes:

P(s’. s . y) = P(yj>k | s) . P(s’. s . yj<k . yk)

= P(yj>k | s) . P(yk.s | s’.yj<k |) . P(s’.uj-k) = P(yj>k | s) . P(yk.s | s’) . P(s’.yj<k)

= (6)

Với:

: là xác suất mà sơ đồ lưới ở trạng thái s’ tại thời gian k-1, chỉ số kênh nhận được là yj<k.

: là xác suất được đưa ra ở trạng thái s tại thời gian k. : là xác suất được đưa ra ở trạng thái s’ tại thời điểm k-1.

Công thức (6) cho thấy xác suất P(s’.s.y) dịch chuyển từ trạng thái Sk-1 = s’ tới trạng thái Sk = s và chuỗi nhận được là y, có thể chia thành ba đoạn: và

.

Ý nghĩa của ba xác suất này thể hiện ở 4.17, cho sự chuyển dịch từ trạng thái Sk-1 = s’ sang trạng thái Sk = s.

Hình 4.17: Chia các trạng thái thành 3 đoạn

Thuật toán MAP sẽ tìm và cho tất cả trạng thái s của giản đồ lưới và cho tất cả các chuyển dịch có thể có từ trạng thái Sk-1 = s’ tới trạng thái Sk (adsbygoogle = window.adsbygoogle || []).push({});

= s.

Các giá trị này được sử dụng để tìm ra xác suất P(Sk-1 = s’. Sk = s . y) của công thức (6), kết quả này sau đó được sử dụng cho công thức (5) để tính ra đường LLR L(uk | y) cho mỗi bit uk.

4.5: Kết luận:

Khác với giải mã Viterbi, giải mã MAP là giải mã tối ưu theo từng bit hoặc từng kí tự. Mặc dù độ phức tạp của mã là khá cao nhưng Turbo là mã có hiệu quả lớn nhất hiện nay, chất lượng tiến tới cận Shannon khoảng vài phần mười dB. Chính vì lí do đó mà mã Turbo đã được khuyến nghị sử dụng trong các hệ thống thông tin di động thế hệ 3, 4, thông tin vệ tinh, thông tin vũ trụ…

Chương 5: Mô Phỏng

* Chương trình được mô phỏng bằng Malab version 6.5 và công cụ Simulink.

5.1: Xây dựng hệ thống sử dụng mã Hamming:

* Sử dụng công cụ Simulink:

5.1.1: Xây dựng khối:

Đầu tiên, từ cửa sổ của chương trình Matlab, gõ lệnh simulink để sử dụng công cụ này

Sau đó, tạo ra một file mô phỏng mới bằng cách vào File > New > Model (hoặc sử dụng cụm phím tắt Ctrl + N)

Tiếp theo, từ cửa sổ Simulink Library Browser, lấy các khối sau: - Bernoulli Binary Generator: Khối này để tạo các bit ban đầu.

- Hamming Encoder: Khối mã hóa Hamming.

- Hamming Decoder: Khối giải mã Hamming.

- Error Rate Calculation: Khối dùng để so sánh lỗi giữa tín hiệu gốc và tín hiệu

sau khi qua kênh AWGN có sử dụng mã Hamming.

- Display: Khối dùng để hiển thị. Khối này sẽ hiển thị ra 3 đại lượng:

• Tỉ lệ lỗi / bit • Tổng số bit bị lỗi. • Tổng số bit nhận

Kéo và thả các khối trên sang vùng làm việc của file mô phỏng, sau đó thực hiện việc nỗi các khối như hình 5.1.

Hình 5.1: Sơ đồ khối mô phỏng hệ thống sử dụng mã Hamming

5.1.2: Thiết lập các thông số cho mỗi khối: - Khối Bernoulli Binary Generator:

Hình 5.2: Thiết lập thông số cho khối tạo bit ban đầu

- Khối BPSK Modulator Baseband và khối BPSK Demodulator Baseband cùng để Phase offset = 0 và Samples per symbol = 1.

- Khối Hamming Encoder và Hamming Decoder cùng để Codeword Length N=7 và Message Length K là gfprimfd(3,'min').

- Khối Display để mặc định, kéo to ra để hiển thị hết cả 3 thông số.

Khối AWGN Channel: Khối này để thêm lỗi vào tín hiệu truyền, mục đích là tạo ra môi trường gần đúng với thực tế. Đặt các thông số như sau (Tỉ lệ Es/N0

gọi là tỉ lệ tín hiệu trên nhiễu, tỉ số này càng lớn thì ảnh hưởng của nhiễu tới tín hiệu càng nhỏ):

- Khối Error Rate Calculation thiết lập thông số như hình vẽ (Ở đây, số lượng bit lỗi khi đạt đến 100 thì quá trình mô phỏng sẽ dừng lại):

Hình 5.4: Thông số của khối tính toán lỗi. 5.1.2: Mô phỏng:

Sau khi thiết lập các thông số như trên, ta tiến hành mô phỏng bằng cách vào Simulation > Start. Kết quả được hiển thị trên khối Display như hình 5.5. (adsbygoogle = window.adsbygoogle || []).push({});

Hình 5.5: Tỉ lệ lỗi bit = 0.1096 với SNR = Es/No = 0.1 db

Thay đổi giá trị Es/No = SNR của khối AWGN, ta thu được tỉ lệ lỗi bít khác nhau.

Sau khi thay số với các giá trị SNR trong khối AWGN, ta có bảng sau:

SNR 0.01 0.1 0.3 0.7 1 1.5 2 2.5 3 3.5

Ngoài ra, ta có bảng thể hiện tỉ lệ lỗi bit khi không sử dụng bất kỳ bộ mã hóa nào như sau:

SNR 0.01 0.1 0.3 0.7 1 1.5 2 2.5 3 3.5

BER 0.487 0.4805 0.478 0.476 0.473 0.467 0.392 0.383 0.357 0.33

Từ bảng trên, ta có đồ thị biểu diễn mối liên hệ giữa tỉ số tín hiệu/nhiễu SNR và tỉ lệ lỗi bit BER.

Một phần của tài liệu báo cáo mã hóa kênh (Trang 42)