Hiện nay, công nghệ MIMO_OFDM đã được ứng dụng vào chuẩn IEEE 802.11n trong hệ thống WIFI và IEEE 802.16 trong hệ thống WIMAX. Mặc dù bước đầu còn trong giai đoạn ứng dụng thử nghiệm với qui mô nhỏ nhưng nó đã mang lại những bước tiến vượt bậc trong lĩnh vực thông tin di động, như sự mở rộng băng thông, nâng cao chất lượng tín hiệu trao đổi. Mạng WIFI sử dụng 802.11n đã trao đổi được các dữ liệu dung lượng lớn như âm thanh, hình ảnh mà các mạng WIFI trước đó không thực hiện được.
95 trang |
Chia sẻ: lylyngoc | Lượt xem: 5042 | Lượt tải: 1
Bạn đang xem trước 20 trang tài liệu Đồ án Tổng quan hệ thống MIMO-OFDM, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
hợp kết hợp cả phân tập thu và phát như Hình (3.1):
Giới hạn dưới: , nTnR
Giới hạn trên : , nT nR
Với , P là công suất phát, W là băng thông, nR, nT lần lượt là số anten thu, phát, hi là hệ số của ma trận truyền H.
Ta thấy rằng, dung lượng hệ thống MIMO được cải thiện đáng kể so với trường hợp chỉ có một cặp anten thu phát truyền thống
(3.1)
3.3. Sơ lược phân tập.
Phân tập là kỹ thuật cải thiện độ tin cậy của tín hiệu bằng cách sử dụng hai hay nhiều kênh thông tin liên lạc với các tính chất khác nhau. Phân tập có vai trò quan trọng trong chống fading, nhiễu đồng kênh, lỗi chùm. Kỹ thuật phân tập có thể sử dụng tốt trong truyền đa đường, cho kết quả độ lợi phân tập. Độ lợi phân tập là sự tăng của tỉ số tín hiệu trên nhiễu khi có phân tập hoặc có thể tính là sự rút gọn của công suất phát khi có phân tập.
3.3.1. Phân tập thời gian.
Là sự truyền cùng một tín hiệu ở hai thời điểm khác nhau.
T: chu kì truyền tín hiệu.
nT là thời điểm truyền tín hiệu; n N.
Ta có:
Gọi x(nT), y(nT), h(nT), (nT) là tín hiệu truyền, nhận, tham số kênh truyền, tín hiệu ước lượng của tín hiệu truyền.
Tín hiệu truyền đi:
x(n1T) = x(n2T) (3.2)
Tín hiệu nhận được:
y(n1T) = h(n1T)*(n1T) + b(n1T) (3.3)
y(n2T) = h(n2T)*(n2T) + b(n2T) (3.4)
Tín hiệu ước lượng thu được:
(n1T) = y(n1T)h(n1T)* + y(n2T)h(n2T)*
= [h(n1T)(n1T) + b(n1T)] h(n1T)* + [h(n2T)(n2T) + b(n2T)]h(n2T)*]
(3.5)
Nhận xét:
Độ lợi phân tập tăng lên.
Tác động của kênh truyền lên tín hiệu được cải thiện.
Tuy nhiên, phân tập thời gian làm giảm tốc độ dữ liệu.
3.3.2. Phân tập tần số.
Đây là kỹ thuật sử dụng nhiều tần số khác nhau để cùng phát một tin. Các tần số cần dùng phải có khoảng cách đủ lớn để giữ sự độc lập ảnh hưởng của fading với các tần số còn lại. Khoảng tần số ở mức vài lần băng thông kết hợp kênh sẽ đảm bảo đặc tính thống kê fading của các tần số khác nhau sẽ độc lập nhau. Trong thông tin di động, các bản sao của tín hiệu phát được đưa tới máy thu ở dạng dư thừa trong miền tần số để tạo ra trải phổ giống như trải phổ chuỗi trực tiếp, điều chế đa sóng mang, nhảy tần. Kỹ thuật trải phổ có tác dụng khi băng thông kết hợp của kênh nhỏ. Tuy nhiên khi băng thông kết hợp của kênh lớn hơn băng thông trải phổ, thì trải trễ đa đường sẽ nhỏ hơn chu kỳ symbol. Trong trường hợp này, trải phổ sẽ không hiệu quả để tạo ra phân tập tần số. Tương tự như phân tập thời gian, phân tập tần số gây ra tổn thất hiệu quả băng tần do sự dư thừa trong miền tần số.
3.3.3. Phân tập không gian.
Phân tập không gian là kỹ thuật sử dụng nhiều anten hay các mảng anten được sắp xếp với các khoảng cách phù hợp để tín hiệu trên các anten độc lập. Khoảng cách yêu cầu thay đổi tùy theo độ cao anten, môi trường truyền và tần số. Khoảng cách điển hình khoảng vài bước sóng.
Phân tập không gian không gây tổn thất trong sử dụng hiệu quả băng tần như phân tập thời gian.
Tín hiệu vào
x(nT)
x(nT)
x’(nT)
combination
(nT)
Y1(nT)
Y2(nT)
H11
H12
Hình 3.2: Mô hình phân tập không gian.
Phân tập không gian còn được gọi là phân tập anten.
Phân tập không gian gồm có:
ØPhân tập phân cực
Trong phân tập phân cực, tín hiệu phân cực đứng và phân cực ngang được phát bằng hai anten phân cực khác nhau và cũng thu bằng 2 anten phân cực khác nhau. Điều đó đảm bảo tạo ra 2 tín hiệu không tương quan mà vẫn không cần đặt hai anten cách xa nhau.
ØPhân tập anten phát
Trong phân tập phát, nhiều anten đựơc triển khai ở vị trí máy phát. Tin được xử lí ở máy phát và sau đó được truyền chéo qua các anten.
ØPhân tập anten thu
Trong phân tập thu, nhiều anten được sử dụng ở máy thu để thu các bản sao độc lập của tín hiệu phát. Các bản sao của tín hiệu phát được kết hợp để tăng SNR và giảm fading nhiều đường.
3.3.4. Các phương pháp kết hợp phân tập.
3.3.4.1. Bộ tổ hợp theo kiểu quét và lựa chọn (SC).
a) Bộ tổ hợp lựa chọn.
Trong bộ tổ hợp lựa chọn, từ một tập hợp M phần tử anten, nhánh có tỉ số tín hiệu trên nhiễu SNR lớn nhất được chọn ra và kết nối trực tiếp với máy thu. Như vậy số anten càng lớn hoặc số phần tử càng lớn của anten mảng thì khả năng có được tỉ lệ tín hiệu trên nhiễu càng lớn. Trong thực tế, tín hiệu có năng lượng (tín hiệu + nhiễu) lớn nhất sẽ được chọn. Vì thế tại đầu ra, dữ liệu sẽ thu được có chất lượng tốt nhất.
Hình 3.3: Mô hình bộ tổ hợp kiểu lựa chọn.
b)Bộ tổ hợp kiểu quét
Trong bộ tổ hợp kiểu quét, một bộ quét sẽ quét tất cả các nhánh nhận được từ anten nhận và lựa chọn nhánh có tỉ số SNR lớn hơn một ngưỡng đã được cho trước. Đến khi nào nhánh ra này có SNR nhỏ hơn mức ngưỡng thì bộ quét sẽ quét lại tất cả các nhánh để chọn ra nhánh có SNR lớn hơn mức ngưỡng đã cho.
Hình 3.4: Bộ tổ hợp kiểu quét.
3.3.4.2. Bộ tổ hợp cùng độ lợi (EGC).
Là kỹ thuật chuyển đổi tất cả các giá trị độ lợi của các nhánh đều bằng nhau và không thay đổi trong quá trình hoạt động. Đầu ra là tổng của các tín hiệu đồng pha của tất cả các nhánh. Là một trường hợp của phương pháp tổ hợp với tỉ số tối đa.
3.3.4.3. Bộ tổ hợp với tỉ số tối đa (MRC).
Phương pháp tổ hợp tỉ số tối đa tận dụng tốt nhất khả năng của các nhánh phân tập trong hệ thống. Tất cả M nhánh được nhân trọng số với các tỉ số tín hiệu tức thời trên nhiễu tương ứng. Sau đó tín hiệu từ các nhánh được đồng pha trước khi lấy tổng tín hiệu sao cho tất cả các nhánh được gộp vào nhau theo pha sao cho tín hiệu đầu ra có tăng ích phân tập lớn nhất. Tín hiệu tổng chính là tín hiệu ra thu được.
Phương pháp tổ hợp tỉ số tối đa có nhiều ưu điểm so với phương pháp phân tập lựa chọn nhưng phức tạp hơn; do phải đảm bảo tín hiệu từ các nhánh là hoàn toàn đồng pha với nhau và các trọng số phải được cập nhật chính xác.
Hình 3.5: Phương pháp kết hợp tỉ số cực đại.
Gọi ri, r, là tín hiệu ngõ vào nhánh i, tín hiệu ngõ ra cuối cùng ở bộ nhận tín hiệu, hệ số đối trọng của tín hiệu vào nhánh i.
(3.2)
Gọi Ai và là pha của tín hiệu nhánh i (ri).
Lúc đó giá trị là:
(3.3)
Suy ra, giá trị của r là:
(3.3)
Trong kết hợp tỉ số cực đại (MRC), tín hiệu ở các nhánh được lấy trọng số và kết hợp sao cho đạt được CNR tức thời cao nhất có thể với các kỹ thuật kết hợp tuyến tính.
* Minh hoạ trường hợp đơn giản
“Qui tắc MRC cho 1 anten phát và 2 anten thu”
ước lượng kênh
ước lượng kênh
Bộ tách ML
Tx
Rx
h1
h2
n2
n1
h1
h2
r1
r2
c0
Hình 3.6: Phương pháp tỉ số cực đại với 1Tx và 2Rx.
Trong trường hợp tổ hợp tỉ số cực đại như hình trên, các tín hiệu tại máy thu sẽ là:
r1 = h1 . c0 + n1 (3.4)
r2 = h2 . c0 + n2 (3.5)
Tín hiệu thu tổ hợp sẽ là:
= h1*. r1 + h2* . r2 = (3.6)
Bộ tách hợp lệ tối ưu (ML) quyết định bằng thuật toán sau:
Giả sử:
h1 = (3.7)
h2 = (3.8)
Bộ ML sẽ cực tiểu ma trận quyết định:
(3.9)
Triển khai biểu thức trên và loại bỏ các thành phần độc lập với các từ mã, thì việc tối giản ở trên sẽ là:
(3.10)
Ta đặt: (3.11)
Qui tắc quyết định cho mỗi tín hiệu tổ hợp, ci được chọn là c0 khi và chỉ khi:
; (3.12)
Trong đó ci , ck là 2 kí tự thuộc chòm sao kí tự mã hoá cho trước, ví dụ: 16QAM.
Như vậy ta đã thu được kí tự ‘c0’ .
3.4. Mã hóa không gian_thời gian.
Tiếng Anh là Space time Coding, viết tắt STC. STC là phương pháp cải thiện độ tin cậy của tín hiệu truyền trong hệ thống liên lạc không dây bằng cách sử dụng đa anten. Mã hoá không gian-thời gian dùng nhiều đường truyền và nhiều phiên bản của tín hiệu truyền, gửi chúng đến bộ thu với mong muốn khi truyền qua kênh không gian vật lí thì ít nhất một trong các tín hiệu thu được sẽ ở trạng thái đủ tốt để thực hiện giải mã tại máy thu với độ tin cậy cao.
Mã hoá không gian thời gian có 2 loại chính:
Mã hoá khối không gian-thời gian.Tiếng Anh là Space Time Block Code (STBC).
Mã hoá lưới không gian-thời gian. Tiếng Anh là Space Time Trellis Code(STTC).
Trong đề tài này em chỉ trình bày về mã hoá khối không gian-thời gian.
3.4.1. Mã hóa khối không gian thời gian (Space time block Codes).
STBC là một kỹ thuật được sử dụng trong truyền thông không dây để truyền nhiều phiên bản của dòng dữ liệu qua nhiều anten và sử dụng các phiên bản của dữ liệu nhận khác nhau để nâng cao chất lượng tín hiệu nhận. Thực tế thì các tín hiệu truyền bị thay đổi trong môi trường truyền như tán xạ, nhiễu xạ, khúc xạ, và nhiễu nhiệt tại bộ thu, do vậy chất lượng của vài phiên bản dữ liệu sẽ tốt hơn số còn lại.
STBC thì dữ liệu sẽ được truyền trong các khối đã được mã hoá và chúng được phân phối qua các anten không gian theo thời gian.
STBC được biểu diễn dưới dạng ma trận. Mỗi hàng là một khe thời gian, mỗi cột là các tín hiệu truyền của một anten theo thời gian.
s11 s12….....s1nT
s21 s22…….s2nT
. . .
. . .
. . .
sT1 sT2……sTnT
Các anten truyền
Các khe thời gian
Sij là kí tự trên khe thời gian i, được truyền từ anten j.
T là số khe thời gian, nT là số anten truyền.
Tỉ lệ mã hoá (R) của STBC được tính bằng số kí tự được mã hoá trong một khối (k) trên số khe thời gian (T):
(3.13)
STBC sử dụng phương pháp sắp xếp trực giao lại thứ tự các tín hiệu tại các anten phát. Nghĩa là hai vectơ của hai cột bất kì trong ma trận là trực giao với nhau.
3.4.1.1. Mã hóa Alamouti.
Đây là mã hoá khối không gian-thời gian với 2 anten phát.
Thông tin nguồn
Điều chế
Mã hoá
à
[s1s2]
Tx2
Tx1
Hình 3.7: Sơ đồ mã hoá Alamouti.
Block Matrix tín hiệu có dạng (với s1 và s2 là 2 symbol tín hiệu liên tiếp nhau).
(3.14)
Tín hiệu tại anten thu:
(3.15)
Tín hiệu ước lượng của s1 và s2 sẽ được tổng hợp theo không gian-thời gian từ tín hiệu y1 và y2:
(3.17)
(3.16)
Kết luận:
- Sau khi tổng hợp trực giao không gian-thời gian, năng lượng nhiễu không thay đổi nhưng năng lượng tín hiệu tăng (Space Time diversity gain).
- Với Space-Time Block Code Alamouti, tốc độ dữ liệu không bị suy giảm (full rate) nhưng ta vẫn đạt được độ lợi phân cực tương đương với trường hợp 2 anten thu (phân cực 2 anten phát < phân cực 2 anten thu).
- Với số lượng anten thu > 1, tín hiệu ở từng anten thu sẽ được tổng hợp như trên, sau đó sẽ được tổng hợp lại với nhau (ta sẽ có thêm độ lợi phân cực thu).
3.4.1.2 Orthogonal STBC Tarokh cho số anten phát bất kỳ
a) Mã hoá
Tarokh tổng quát hóa matrix STBC cho số anten phát bất kỳ (Tx = 3,4,5,6,8 ...) cho tín hiệu thực (BPSK, PAM ...). Tuy nhiên đối với tín hiệu phức (modulation QPSK, M-PSK, M-QAM ...), để đảm bảo full-diversity, Tarokh chứng minh không tồn tại ma trận phát cho trường hợp số anten phát lớn hơn 4 và đối với số anten phát 3 và 4 thì không tồn tại full-rate matrix, maximun rate = 3/4. Ma trận tín hiệu trực giao cho 3, 4 anten phát cho tín hiệu thực và phức:
Full-rate matrix cho 3 anten phát (3 Tx)
Full-rate matrix cho 4 anten phát (4 Tx)
Rate 3/4 matrix for complex symbol:
3 anten Tx4 anten Tx
b) Giải mã STBC trong máy thu.
Bộ giải mã trực giao STBC là giải mã tối ưu (maximum likelihood decoding) được thực hiện tại bộ thu với quá trình xử lí tuyến tính.
Bộ kết hợp
Bộ tách tối ưu.
..
.
Anten thu
Hình 3.8: Sơ đồ giải mã của hệ thống STBC.
Nhằm làm rõ phương pháp mã hoá này, một hệ thống liên lạc không dây mẫu được xây dựng như sau:
Tại thời điểm t, tín hiệu , nhận tại anten j, được cho bởi:
(3.18)
Trong đó là độ lợi đường từ anten truyền đến anten nhận j, cti là tín hiệu được truyền tại anten i và ntj là nhiễu Gaussian trắng cộng (AWGN).
Giả sử rằng thông tin trạng thái kênh là hoàn hảo, bộ thu sẽ tính độ thông suốt quyết định:
Thông qua tất cả các từ mã :
Và quyết định chọn từ mã thích hợp sao cho tổng trên là nhỏ nhất.
Ví dụ: Giải mã với ma trận khối trong miền số thực.
Ma trận 4x4 Ma trận 8x8
Trong ma trận mã hoá, tín hiệu ở các hàng sau là sự hoán vị của hàng đầu tiên với sự thay đổi dấu. Vì các cột của ma trận trực giao với nhau từng đôi một nên tổng số các nhánh được rút gọn đến mức nhỏ nhất:
(3.19)
Trong đó:
(3.20)
là liên hợp phức của .
Giá trị Si chỉ phụ thuộc vào kí tự mã si, kí tự nhận {r}, hệ số đường {}, và cấu trúc trực giao của ma trận, n là số anten phát n= nT, m là số anten thu m= nR. Nó cho phép tổng trong công thức (3.19) đạt giá trị nhỏ nhất trong (3.20) với 1in.
Vì vậy định luật tách sóng tối ưu là để tạo một biến nhất định:
(3.21)
Trong đó là dấu của si ở hàng thứ k của ma trận mã hoá, là xác định sự hoán vị tương ứng giữa các hàng, εk(p) = q chỉ ra rằng sp là hoán vị có thể khác dấu của thành phần (k, q) của ma trận mã hoá, cho i=1, 2,…nT và sau đó quyết định chọn kí tự si trong “chòm sao” s [chòm sao là tập hợp các kí tự trong giản đồ số phức, tuỳ theo kiểu điều chế mà ta có các giản đồ khác nhau] sao cho thoả mãn:
(3.22)
với A là chòm sao Alphabet (Constellation Alphabet). Dù sự có mặt của nó, điều này thật đơn giản, mã hoá tuyến tính sẽ cung cấp phân tập tối ưu.
3.5. Kết luận chương.
Kỹ thuật MIMO trong thông tin di động có nhiều ưu điểm như hiệu suất phổ và độ tin cậy của kênh truyền. Chương 3 này đã trình bày các vài kỹ thuật MIMO thường gặp, mỗi kỹ thuật có những ưu điểm và khuyết điểm riêng nên các nhà khoa học thường kết hợp kỹ thuật MIMO với các kỹ thuật khác để tạo ra hệ thống MIMO hoàn chỉnh nhất, có nhiều ưu điểm nhất. Như sự kết hợp STBC với bộ mã ngoài (TCM hay Turbo) để có độ lợi mã hoá, hay sự kết hợp kỹ thuật MIMO với kỹ thuật ghép kênh phân chia theo tần số trực giao (OFDM). Chương sau sẽ trình bày chi tiết về kỹ thuật và hệ thống MIMO-OFDM này.
Chương 4
KỸ THUẬT MIMO-OFDM.
4.1. Giới thiệu.
Chương này trình bày tổng quan và phân tích hệ thống hệ thống MIMO. Có nhiều loại hệ thống MIMO-OFDM, tùy vào từng kỹ thuật MIMO mà chúng ta có các hệ thống khác nhau, như: hệ thống MIMO-OFDM mã hoá không gian_thời gian, hệ thống MIMO-OFDM ghép kênh không gian. Mỗi hệ thống có những ưu điểm và hạn chế riêng, tùy theo mục đích sử dụng và yêu cầu kinh tế mà ta sử dụng các hệ thống thích hợp.
Phần cuối của chương là trình bày về hệ thống STBC-MIMO-OFDM 2x2 như là một hệ thống tiêu biểu.
4.2. Mô tả tổng quan về hệ thống MIMO_OFDM.
Hình 4.1: Sơ đồ phát và thu của hệ thống MIMO-OFDM.
Chúng ta xét hệ thống STC-OFDM với K sóng mang con, nT anten phát và nR anten thu. Tổng băng thông của hệ thống là W Hz. Nó được chia thành K băng con trùng lên nhau.
4.2.1. MIMO-OFDM Tx.
Hình 4.2: Sơ đồ khối của bộ phát của hệ thống MIMO_OFDM.
ØLuồng dữ liệu được mã hoá bởi bộ mã hoá FEC.
ØLuồng dữ liệu mã hoá đó được ánh xạ qua bộ constellation bởi bộ điều chế và mã hoá MIMO.
ØMỗi luồng symbol đầu ra tương ứng với một anten phát Tx và chịu sự xử lí OFDM của anten đó:
ÄChèn thêm chuỗi pilot vào.
ÄĐiều chế bởi bộ IFFT.
ÄCuối cùng luồng dữ liệu được chuyển đến IF/RF cho anten phát.
4.2.2. MIMO_OFDM Rx.
Hình 4.3: Sơ đồ khối của bộ thu của hệ thống MIMO_OFDM.
ØĐầu tiên, các luồng dữ liệu nhận được từ anten thu Rx được đồng bộ.
ØSau đó Preambles và CP được tách ra từ luồng Rx nhận được. Phần tín hiệu còn lại sau khi tách ra là một kí tự OFDM được giải điều chế bằng bộ FFT.
ØPilot tần số được được tách ra từ symbol OFDM giải điều chế và được sử dụng cho việc ước lượng kênh. Ma trận ước lượng kênh được thêm vào trong bộ giải mã MIMO.
ØCác symbol được tổng hợp, giải điều chế và giải mã để tạo ra luồng dữ liệu phát ban đầu.
4.2.3. Cấu trúc của khung (frame) của hệ thống MIMO-OFDM.
Hình 4.4: Cấu trúc khung dữ liệu MIMO-OFDM.
Trong môi trường thời gian thực, frame là đơn vị vận chuyển nhỏ nhất bao gồm 10 khe. Mỗi khe bao gồm 1 khe preamble và 8 symbols OFDM. Preamble được sử dụng cho mục đích đồng bộ thời gian. Mỗi OFDM symbol được gắn thêm 1 CP. CP được sử dụng để giảm nhiễu symbol ISI và cân bằng kênh một cách đơn giản hơn. Mỗi frame được vận chuyển qua sóng mang phụ (định thời pha, định thời tần số và ước lượng tần số offset).
4.3. Phân tích hệ thống MIMO-OFDM.
4.3.1. Mô hình hệ thống MIMO-OFDM.
Đương lượng băng tần cơ sở phức của một đáp ứng xung kênh fadinh được viết dưới dạng:
(4.1)
Trong đó là qui trình Gaussian phức băng tần hẹp tĩnh wide_sense và được giả sử là độc lập giữa các kênh khác nhau. Hơn nữa chúng ta giả sử rằng hàm tương quan trong miền thời gian là giống nhau cho tất cả các đường truyền, đó là:
(4.2)
Không mất tính tổng quát, chúng ta giả sử rằng tổng công suất trung bình của đáp ứng xung kênh là một đơn vị:
(4.3)
Cho hệ thống MIMO-OFDM với Nt anten phát và Nr anten thu (NrNt), tín hiệu nhận tại anten thu thứ j trên sóng mang con k và khối thứ n có dạng như sau:
(4.4)
Cho j=1,…, Nr và k=0,…, K-1
Trong đó: bi[n,k] là kí tự được truyền từ anten phát thứ i trên sóng mang thứ k của khối thứ n.
Hij[n,k] là đáp ứng tần số của kênh truyền từ anten phát thứ i đến anten thu thứ j tại sóng mang thứ k của khối n.
K là tổng số sóng mang.
wj[n,k] là nhiễu Gaussian với sự thay đổi .
Bỏ qua sự tổn hao, đáp ứng tần số kênh có thể được viết như sau:
(4.5)
Trong đó hij[n,l] = hij(nTf,lts), K0=[td/ts], Wk= , Tf và là chiều dài kí tự cộng khoảng bảo vệ và khoảng cách giữa các sóng mang con, ts là chu kì lấy mẫu, nó bằng với, td là độ trải trễ tối đa.
Phương trình (4.4) có thể viết lại dưới dạng ma trận như sau:
(4.6)
Trong đó:
, ;
, .
4.3.2. Space-Time Block-Coded OFDM.
4.3.2.1. Hệ thống STBC-OFDM.
Chúng ta xét hệ thống STC-OFDM với K sóng mang con ,2 anten phát và 2 anten thu. Tổng băng thông của hệ thống là W Hz. Nó được chia thành K băng con trùng lên nhau. Giản đồ khối của hệ thống được cho như hình 4.5.
Hình 4.5: Mô hình hệ thống STBC-OFDM 2x2.
TC: Turbo convolutional code.
RS: Reed-Solomon code.
STT : Space Time Trellis.
STB : Space Time Block.
Tại mỗi thời điểm t, một khối bit thông tin được mã hoá để phát ra một từ mã không gian thời gian mà nó bao gồm 2*M kí tự được điều chế. Từ mã không gian-thời gian được cho bởi:
Trong đó hàng thứ i xti = xit,1, xit,2, …,xit,M, i= 1,2 là dãy dữ liệu cho anten phát thứ i. Để đơn gian chúng ta xét độ dài từ mã bằng số sóng mang con OFDM, M=K. Các tín hiệu xit,1, xit,2,…,xit,M là OFDM được điều chế trên K sóng mang con OFDM khác nhau và được truyền từ anten phát thứ i đồng thời trong một khung OFDM, trong đó xit,k được truyền trên sóng mang con OFDM thứ k.
Trong phân tích hoạt động, chúng ta giả sử khung và kí tự đồng bộ giữa truyền và nhận là lí tưởng. Một kênh con được lấy mẫu bởi fading Rayleigh. Tiến trình fading xem như không đổi trong khung OFDM. Giả sử rằng kênh giữa các anten khác nhau là không tương quan với nhau.
4.3.2.2. Bộ phát STBC-OFDM.
Sơ đồ khối STBC-OFDM được cho trong Hình 4.5. Dòng tín hiệu nhị phân được điều chế và ánh xạ thành chuỗi kí tự phức. Bộ chuyển đổi Inverse Discrete Fourier Transform (IDFT) M điểm thực hiện trên từng dòng dữ liệu nối tiếp. Ngõ ra của khối IDFT là M mẫu tín hiệu trong miền thời gian, tương ứng với một khung OFDM.
Để tránh tác động của nhiễu xuyên kí tự, một cyclic prefix (CP) với chiều dài v được thêm vào các mẫu ở ngõ ra, kết quả là tạo ra một khung có chiều dài M+v.
Các khung OFDM được truyền đồng thời từ anten thứ nhất và anten thứ hai, như sau:
+ Khung OFDM thứ n:
Anten 1:
Anten 2:
+ Khung OFDM thứ (n + 1) :
Anten 1:
Anten 2:
Trong đó (.)* là chỉ đại lượng liên hợp phức và n = 2u-1, u=1,2…
Trong mô hình, chúng ta cho từng kênh từ hai anten phát đến anten nhận bằng bộ lọc đáp ứng xung giới hạn với hệ số nhớ v.
4.3.2.3. Bộ thu STBC-OFDM.
Tại bộ thu, sau khi lọc, các tín hiệu tại mỗi anten thu được, tiền tố được loại bỏ trong mỗi khung. Sau đó các mẫu được đưa đến bộ giải điều chế OFDM. Tín hiệu ra của bộ giải điều chế cho sóng mang con thứ k, k=1,2,…,K, tại anten nhận được cho bởi:
(4.7)
Trong đó Hlà đáp ứng tần số kênh cho đường truyền từ anten phát thứ i đến anten thu j trên kênh con OFDM thứ k thuộc khung thứ n, và Nlà ngõ ra giải điều chế của nhiễu tại anten nhận của kênh con thứ k với năng lượng phổ cường độ N0; j=1,2.
Tín hiệu thu của từng cặp () sẽ được xử lí giống như trong hệ thống MIMO để thu được tín hiệu và . Đó là () sẽ được đưa qua bộ kết hợp để thu được tín hiệu ước lượng , , sau đó đưa qua bộ tách tối ưu để tách ra tín hiệu và .
Tín hiệu nhận được tại anten thu:
= X + X + (4.8)
(4.9)
Để thuận tiện tính toán, ta đặt:
= ; = ;
;
;
;
Biểu thức trên ta có thể viết lại như sau:
(4.10)
(4.11)
Tín hiệu trên qua bộ kết hợp ta được:
(4.12)
(4.13)
Bộ tách tối ưu sẽ cực tiểu độ thông suốt quyết định:
(4.14)
Thông qua tất cả các giá trị của X1, X2 trong chòm sao X.
Ta mở rộng biểu thức trên, bỏ các thành phần độc lập với các từ mã, sắp xếp lại thì cực tiểu biểu thức trên tương đương với cực tiểu biểu thức sau:
(4.15)
Sắp xếp biểu thức cực tiểu độ thông suốt trên thành hai phần:
(4.16)
(4.16) là biểu thức chỉ theo biến X1.
(4.17)
(4.17) là biểu thức theo biến X2.
Vì vậy cực tiểu biểu thức (4.14) là tương đương với cực tiểu riêng rẽ hai biểu thức trên. Ta lần lượt thực hiện cực tiểu “độ thông suốt quyết định” như sau:
(4.18)
để giải mã X1.
(4.19)
để giải mã X2.
Gọi , qui tắc quyết định cho mỗi tín hiệu tổ hợp , j=1,2 trở thành: Chọn Xi nếu và chỉ nếu:
; i (4.20)
Trong đó Xi và Xk là 2 kí tự thuộc chòm sao kí tự mà phần mã hoá đã thực hiện.
Như vậy là ta đã thu được tín hiệu X = X1; X = X2 .
Kết luận:
Trên đây là mô hình hệ thống STBC_OFDM với tác động là kênh fading lựa chọn tần số. Bộ thu thực hiện một số tiến trình xử lí được hỗ trợ bởi thuật toán Viterbi, mỗi phần được gán cho một tần số riêng trong mô hình OFDM.
4.4. Kết luận chương.
Trong chương này đã trình bày kỹ thuật MIMO-OFDM. Đây là kỹ thuật đang được ứng dụng trong nhiều hệ thống thông tin di động vì nó mở rộng băng thông và tăng tốc độ dữ liệu lên nhiều lần, nâng cao chất lượng tín hiệu. Hiện nay, MIMO-OFDM đang là cơ sở cho chuẩn IEEE 802.11n, đây là chuẩn mới cho hệ thống WIFI vừa hỗ trợ các chuẩn cũ vừa có tính năng ưu việt hơn hẳn, như hỗ trợ liên lạc giọng nói, trao đổi hình ảnh, video với chất lượng cao.
MIMO-OFDM còn được áp dụng trong hệ thống WIMAX, hiện nay và trong một tương lai không xa nữa công nghệ này sẽ được áp dụng rộng rãi và đem lại các tiến bộ vượt bậc trong thông tin liên lạc không dây của nhân loại.
Chương 5
MÔ PHỎNG HỆ THỐNG MIMO-OFDM VÀ ĐÁNH GIÁ CHẤT LƯỢNG HỆ THỐNG.
5.1. Giới thiệu nội dung mô phỏng.
Trong phần mô phỏng này, thực hiện đánh giá chất lượng của hệ thống MIMO-OFDM thông qua so sánh tỉ lệ lỗi bit (BER) theo tỉ số tín hiệu trên nhiễu (SNR). Ta đánh giá bằng cách so sánh với hệ thống OFDM, một trong những hệ thống có chất lượng tốt nhất trong hệ thống thông tin di động hiện nay.
Để thực hiện so sánh ta xây dựng 2 mô hình hệ thống MIMO-OFDM và hệ thống OFDM. Tín hiệu truyền được tạo ngẫu nhiên, được đưa vào khung và truyền đi với dung lượng lớn để đảm bảo sự đánh giá có độ chính xác cao.
Các bước mô phỏng được thực hiện giống với thực tế. Ở máy phát, các bước mã hoá, điều chế, IFFT, mã hoá không gian-thời gian đựơc mô phỏng đầy đủ và chi tiết. Ở máy phát thì các quá trình ngược lại như giải điều chế, giải mã, ước lượng gần cực đại, thuật toán kết hợp cũng được thực hiện một cách chi tiết. Kênh truyền thì ảnh hưởng của các trải trễ, fading Rayleigh, nhiễu giả ngẫu nhiên được tạo ra để giống với thực tế nhất.
Cuối cùng là kết quả BER theo SNR của hai hệ thống được vẽ trên cùng một giản đồ để dễ dàng so sánh và thấy rõ ưu điểm của hệ thống MIMO-OFDM.
5.2. Các thông số mô phỏng.
5.2.1. Hệ thống OFDM.
ØSố khung mô phỏng : 110
ØSố sóng mang con : 16
ØĐiều chế : 4QAM; tuỳ chọn
ØChiều dài FFT : 512
ØSố kí tự trên một khung : 6
ØKích thước CP : 128
ØBăng thông hệ thống : 5MHz
ØSNR : 0; 3; 6; 9; 12; 15
5.2.2. Hệ thống MIMO-OFDM.
ØMô hình mô phỏng: Space time block code OFDM; 2 anten phát và 2 anten nhận.
ØSố khung mô phỏng : 110
ØSố sóng mang con : 16
ØĐiều chế : 4QAM; tuỳ chọn
ØChiều dài FFT : 512
ØSố kí tự trên một khung : 6
Ø Kích thước CP : 128
ØBăng thông hệ thống : 5MHz
ØSNR : 0; 3; 6; 9; 12; 15
5.2.3. Thông số kênh truyền.
ØĐáp ứng tần số kênh (hij): được tạo ra ngẫu nhiên
ØNhiễu cộng ngẫu nhiên.
ØTần số Doppler fd (Hz) : 0; 10; 20; 30 ; tuỳ chọn
ØĐộ trải trễ trms (us) : 0; 1
5.3. Lưu đồ và sơ đồ thuật toán của chương trình mô phỏng.
5.3.1. Truyền tín hiệu.
Tín hiệu gốc
Mã hoá Trellis convolution
Ghép xen
Điều chế
Mã hoá khối không gian-thời gian.
Thực hiện IFFT, biến đồi tín hiệu từ miền tần số sang miền thời gian.
Tín hiệu đã điều chế được truyền đi.
5.3.2. Kênh truyền.
Tín hiệu từ anten phát
Tạo tác động của hiện tượng Doppler và trải trễ
Tạo tác động của nhiễu cộng ngẫu nhiên
Anten nhận
5.3.3. Nhận tín hiệu.
Anten nhận
Thực hiện FFT
Kết hợp tín hiệu
Giải điều chế
Giải ghép xen
Giải mã trellis convolution
Tính BER của hệ thống OFDM và STBC-MIMO-OFDM
Vẽ giản đồ BER theo SNR của cả hai hệ thống.
So sánh và đánh giá chất lượng các hệ thống
5.3.4. Thuật toán tính BER.
k<=SNR(end)
end
False
True
true
False
s’(i)= =s(i)
leng=length(s);berr=0;i=0;
i <= leng
Tín hiệu thu được sau khi đã xử lí s’(i)
Tín hiệu gốc ban đầu s(i)
i=i+1
berr=berr+1;
BER(k)=berr/leng;
False
k = SNR(begin)
k=k+step;
begin
5.4. Kết quả mô phỏng và đánh giá.
Giao diện chính của chương trình
a) Trường hợp kênh truyền chưa có tác động của trải trễ và rayleigh fading
Øfd=0 Øtrms = 0
b) Trường hợp có tác động của trải trễ và Fading Rayleigh
¯Trường hợp :
Øfd =10Hz Øtrms = 1us
¯Trường hợp:
Øfd=20Hz Øtrms = 1us
¯Trường hợp:
Øfd=30Hz Øtrms = 1us
Nhận xét:
Ø Truyền tín hiệu ở cùng BER thì kỹ thuật MIMO-OFDM sử dụng SNR thấp hơn OFDM. Từ đó có thể chứng minh cho nhận định, sử dụng kỹ thuật MIMO-OFDM chúng ta dùng công suất phát thấp hơn mà chất lượng lại cao hơn.
Ø Khi nhiễu môi trường tăng, thì yêu cầu SNR tăng, hay phải tăng công suất phát.
Ø SNR càng cao thì BER càng nhỏ. Như vậy khi phát với công suất lớn thì chất lưọng tín hiệu tốt nhưng yêu cầu tiêu thụ năng lượng tăng nên giá thành tăng. Vì vậy càng ngày, người ta càng hướng đến sử dụng các công nghệ trong thông tin di động mà có thể truyền tín hiệu đáng tin cậy với mức công suất phát nhỏ.
5.5. Kết luận chương.
Phần mô phỏng còn hạn chế là chưa thực hiện ước lượng kênh, mà xem như phần ước lượng là hoàn hảo. Tuy nhiên với mục đích đánh giá chất lượng hệ thống thì mô hình trên là chấp nhận được vì ta cũng xem phần ước lượng kênh của hệ thống OFDM là hoàn hảo. Hệ thống sử dụng kỹ thuật OFDM cũng là một trong những hệ thống chất lượng cao; đang và sẽ được áp dụng trong các thế hệ mạng di động mới như 3G và 4G.
Với kết quả nhận được, là trong hệ thống thông tin di động, kỹ thuật này cho BER nhỏ với SNR thấp. Nó còn tốt hơn cả kỹ thuật OFDM. Điều này chứng tỏ kỹ thuật này còn được nghiên cứu và áp dụng trong tương lai cho các thế hệ mạng di động sau này. Mà bước đầu, MIMO-OFDM đã được ứng dụng vào tiêu chuẩn 802.11n trong WIFI, nó đã tạo ra sự mở rộng băng thông và cải thiện chất lượng tín hiệu một cách đáng kể so với các tiêu chuẩn khác trước đây.
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI.
Đề tài “ Kỹ thuật MIMO_OFDM” đã trình bày một cách tổng quan về công nghệ MIMO_OFDM. Thông qua hệ thống STBC_OFDM 2x2, cũng đã giới thiệu một cách chi tiết về công nghệ MIMO_OFDM đơn giản. Trong đề tài còn trình bày về kỹ thuật OFDM, MIMO, ước lượng kênh.
Hiện nay, công nghệ MIMO_OFDM đã được ứng dụng vào chuẩn IEEE 802.11n trong hệ thống WIFI và IEEE 802.16 trong hệ thống WIMAX. Mặc dù bước đầu còn trong giai đoạn ứng dụng thử nghiệm với qui mô nhỏ nhưng nó đã mang lại những bước tiến vượt bậc trong lĩnh vực thông tin di động, như sự mở rộng băng thông, nâng cao chất lượng tín hiệu trao đổi. Mạng WIFI sử dụng 802.11n đã trao đổi được các dữ liệu dung lượng lớn như âm thanh, hình ảnh mà các mạng WIFI trước đó không thực hiện được.
Đề tài đã giới thiệu công nghệ STBC_OFDM, công nghệ này cho sự cải thiện đáng kể về chất lượng tín hiệu. Phát triển đề tài này, có thể nghiên cứu thêm các hệ thống MIMO_OFDM với số anten phát và thu lớn hơn; như hệ thống 3x4, 4x4, 8x8,…Nhưng số anten tăng cũng nảy sinh vấn đề cần giải quyết đó là: sự phức tạp trong bộ thu tín hiệu, làm cho các phép tính có độ khó cao, thiết bị thì cồng kềnh, giá thành cao. Tuy nhiên gần đây, với các phát minh bộ xử lí tín hiệu số giá rẻ, các bộ xử lí đa năng, các thuật toán xử lí tín hiệu mới, điều này sẽ giúp thiết bị MIMO_OFDM gọn gàng hơn và sẽ được đưa vào áp dụng rộng rãi trong thực tế. Với những ưu điểm về mặt kỹ thuật và sự hỗ trợ của các phát minh mới, công nghệ MIMO_OFDM sẽ là một trong những công nghệ hàng đầu sẽ được áp dụng trong hệ thống thông tin di động thế hệ mới như NGN, 4G.
TÀI LIỆU THAM KHẢO.
[1] TS.Phan Hồng Phương, KS.Lâm Chi Thương, “Kỹ thuật phân tập anten trong cải thiện dung lượng hệ thống MIMO”.
[2] Phạm Hồng Liên, Đăng Ngọc Khoa, Trần Thanh Phương, “Matlab và ứng dụng trong Viễn Thông”, Nhà xuất bản Đại Học quốc gia thành phố Hồ Chí Minh-2006.
[3] Ths Nguyễn Anh Tuấn, “Phương pháp mã hóa không gian thời gian trong các hệ thống MIMO và một số hướng nghiên cứu”, bài báo trình tại hội nghị khoa học lần thứ VI.
[4] ThS.Lê Văn Ninh, TS.Nguyễn Viết Kính, “Đồng bộ tần số trong miền tần số cho OFDM”, bài báo khoa học.
[5] Ths.Nguyễn Ngọc Tiến, “Một số vấn đề kỹ thuật trong hệ thống OFDM”, Tạp chí bưu chính Viễn Thông và Công nghệ thông tin, 29/09/2003.
[6] Brank Vucetic, Jinhong Yuan, John Wily& Son, “Space Time Coding”, 2003.
[7] Lisa Meilhac, Alian Chiodini, Clement Boudesocque, Crislin Lele, Anil Gercekei, “MIMO-OFDM modem for WLAN”- Newlogic Technology S.A.R.L, 07-2004 .
[8] John R.Barry, “Broadband MIMO OFDM wireless communications”, 2004
[9] Vahid Tarokh, Hamid Jafarkhani, and A. R. Calderbank. "Space–time block codes from orthogonal designs". IEEE Transactions on Information Theory : 744–765, July 1999.
[10] Vahid Tarokh, A.Robert Calderbank, “Space-Time Block Coding for Wireless Communications”. IEEE journal on selected areas in communication, March 1999
PHỤ LỤC.
CHƯƠNG TRÌNH MATLAB THỰC HIỆN MÔ PHỎNG.
1) Chương trình chính
function varargout = MIMO_OFDM(varargin)
% MIMO_OFDM M-file for MIMO_OFDM.fig
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @MIMO_OFDM_OpeningFcn, ...
'gui_OutputFcn', @MIMO_OFDM_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin == 0 % LAUNCH GUI
fig = openfig(mfilename,'reuse');
% Use system color scheme for figure:
set(fig,'Color',get(0,'defaultUicontrolBackgroundColor'));
% Generate a structure of handles to pass to callbacks, and store it.
handles = guihandles(fig);
guidata(fig, handles);
if nargout > 0
varargout{1} = fig;
end
elseif ischar(varargin{1})
try
if (nargout)
[varargout{1:nargout}] = feval(varargin{:});
else
feval(varargin{:}); % FEVAL switchyard
end
catch
disp(lasterr);
end
end
% End initialization code - DO NOT EDIT
% --- Executes just before MIMO_OFDM is made visible.
% --- Executes on button press in start.
function varargout = start_Callback(hObject, eventdata, handles)
Nfram1=str2double(get(handles.frames,'String')) fft1=str2double(get(handles.fft_size,'String'))
Nsub1=str2double(get(handles.Nsubcarriers,'String'))
Dopler_freq1=str2double(get(handles.fd,'String'))
SNR1=eval(get(handles.snr,'String'))
M_qam1=str2double(get(handles.M,'String'));
M1 = M_qam1(get(handles.M,'Value'),1)
Delay1=str2double(get(handles.t_rms,'String'));
t_rms1=Delay1(get(handles.t_rms,'Value'),1);
%*******************************************************************
%state=1:OFDM ; state=2:STBC_OFDM 2x2
state1=1;
state2=2;
fd = Dopler_freq1;%fd1;%20; % Doppler frequency in Hz
t_rms = 1;%t_rms1;%1; % Delay spread in mu s
subN = Nsub1;%16; % No. of sub-carriers in each sub-channel
F_LA = 1; % Link Adaptation Resolusion, useless here.
Nframe = Nfram1;%110; % Total No. of frames to be simulated
cdrt = 1/2; % Coding rate
M = M1; % M-QAM
misnr = SNR1(1); % minimum simulated SNR in dB
stp = SNR1(2); % SNR simulation step
mxsnr = SNR1(end); % maximum simulated SNR in dB
chnums = 1000; % No. of channel realizations, should be larger than the total simulated symbols (frames * 6)
sampling_rate = 1.08; % over-sampling rate, 1.08 for wimax?, and 1.536 for 3gpp
flg_offset = 0; % no Carrier-frequency offset
flg_csi_err = 0; % no Channel state information error
N = fft1%512; % FFT size & total No. of sub-carriers
cp_l = 128; % CP length
BW = 5e6; % system bandwidth, 5MHz
Nsymbol = 6; % 6 symbols within each frame
dirname1 = 'yynew1'; % where the result is stored
dirname2 = 'yynew2'; % where the result is stored
allow_load_oldres = 1; % allow to load previous result
Root_path = '.'; % where the path starts
addpath('../comm_funcs');
DELAY=0; % no feedback delay
stbc = 1; % useful only for alamouti (MISO)
T_Symbol = (N+cp_l)/(BW*sampling_rate); % OFDM symbol duration
sys = {'SISO','MRC1x2','Alt2x1','EGC1x2','AS2x1','ALT2x2','AS2x2'}; % supported MIMO schemes
T_n=[1,2]; %Transmitter diversity branches [SIMO,MRC,MISO,EGC,MISO-AS]
R_n=[1,2]; %Receiver diversity branches [SIMO,MRC,MISO,EGC,MISO-AS]
T_div1=T_n(state1); %Specify transmitter diversity branches
R_div1=R_n(state1); %specify receiver diversity branches
T_div2=T_n(state2);
R_div2=R_n(state2);
[ch1,ch2] = channelgenerator2(t_rms,fd,sampling_rate,N,cp_l,BW,chnums + F_LA * Nsymbol + DELAY,T_div1*R_div1,T_div2*R_div2); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
filename = ['f',num2str(fd),'_t',num2str(t_rms),'_N',num2str(subN),'_L',num2str(F_LA),...
'_M',num2str(M),'F',num2str(round(10*cdrt)),'_E',num2str(flg_csi_err),...
'c',num2str(flg_offset),'D',num2str(DELAY),'.mat'];
dirname1 = [Root_path,'/',dirname1];
filepath1 = [dirname1,'/',filename];
dirname2 = [Root_path,'/',dirname2];
filepath2 = [dirname2,'/',filename];
if allow_load_oldres && exist(filepath1,'file') && exist(filepath2,'file'),
load(filepath1);
load(filepath2);
else
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rdstate = 4831;
snr_ix = 0;
Num_grp=floor(N/subN);
blk_err_c=nan(length(misnr:stp:mxsnr),floor(Nframe/F_LA),Num_grp);
bit_err_u=nan(length(misnr:stp:mxsnr),floor(Nframe/F_LA),Num_grp);
bit_tot_u=nan(length(misnr:stp:mxsnr),floor(Nframe/F_LA),Num_grp);
bit_err_c=nan(length(misnr:stp:mxsnr),floor(Nframe/F_LA),Num_grp);
bit_tot_c=nan(length(misnr:stp:mxsnr),floor(Nframe/F_LA),Num_grp);
for snr=misnr:stp:mxsnr
%%%%%%%%%%%%%%%%%%%
snr_ix=snr_ix+1; frame_ix = 0;
noisePowPerSubC = 1/10^(snr/10)/N;
for la_ix=1:floor(Nframe/F_LA)
rnd = randint(1,1,chnums) + 1; % randmize channel index for different LA intervals, avoid high time-correlation
index = (rnd: rnd + F_LA * Nsymbol-1 ) + DELAY;
h1 = ch1(:,index,:);
h2 = ch2(:,index,:);
H1 = func_add_csi_err(h1,N,flg_csi_err); % add CSI error
H2 = func_add_csi_err(h2,N,flg_csi_err); % add CSI error
[H1_comb,H1_LA,ps1]=selectAntenna2(H1,N,subN,state1,T_div1);
% tx antenna selection
[H2_comb,H2_LA,ps2]=selectAntenna2(H2,N,subN,state2,T_div2);
% tx antenna selection
B=log2(M)*ones(floor(N/subN),1); % loaded bits per sub-carrier
P1 = 1/N/T_div1*ones(floor(N/subN),1); % power per subCarrier
P2 = 1/N/T_div2*ones(floor(N/subN),1); % power per subCarrier
code_rate = cdrt*ones(floor(N/subN),1);
[T_mod1,T_mod2,T_sent,coded,intleav,fact1,fact2,real_len,raw_len,t] = ...
T_mod_cod_intlv(N,subN,B,P1,P2,Nsymbol,code_rate,rdstate,T_div1,T_div2,ps1,ps2,state1,state2); % modulator & encoder & interleaver
tf(snr_ix,la_ix) = sum(B~=0)*F_LA;%length(find(B~=0))*F_LA; % should be N/subN * F_LA
tb_u(snr_ix,la_ix) = sum(B)*subN*Nsymbol*F_LA;
tb_c(snr_ix,la_ix) = sum(raw_len)*F_LA;
if stbc == 1,
T_trans1=BT_alamouti(T_mod1,Nsymbol,state1);
%doan chuong trinh thuc hien MIMO
T_trans2=BT_alamouti(T_mod2,Nsymbol,state2);
end
for nf = 1:F_LA%F_PA % frame index within each PA window
frame_ix = frame_ix + 1;
index3 = ((nf-1)*Nsymbol+1:nf*Nsymbol);
h2_1=h1(:,index3+DELAY,:); % only in the channel part, and combining part, no delay
h2_2=h2(:,index3+DELAY,:);
R_dfs1=BTR_ofdm(h2_1,N,cp_l,T_trans1,snr,T_div1,R_div1,Nsymbol,flg_offset,fd,BW,sampling_rate,noisePowPerSubC); % ofdm transiver
R_dfs2=BTR_ofdm(h2_2,N,cp_l,T_trans2,snr,T_div2,R_div2,Nsymbol,flg_offset,fd,BW,sampling_rate,noisePowPerSubC); % ofdm transiver
H2_1 = H1_comb(:,index3+DELAY,:); % here, use H at the receiver, no delay
H2_2 = H2_comb(:,index3+DELAY,:);
if stbc == 1,
R_comb1=BR_combiner(R_dfs1,H2_1,state1);
R_comb2=BR_combiner(R_dfs2,H2_2,state2);
end
[blk_err_c(snr_ix,frame_ix,1:Num_grp),blk_tot_c(snr_ix,frame_ix,1:Num_grp),bit_err_u(snr_ix,frame_ix,1:Num_grp),bit_tot_u(snr_ix,frame_ix,1:Num_grp),bit_err_c(snr_ix,frame_ix,1:Num_grp),bit_tot_c(snr_ix,frame_ix,1:Num_grp),wb_u1(snr_ix,frame_ix),wb_c1(snr_ix,frame_ix),tp_uu1(snr_ix,frame_ix),tp_cc1(snr_ix,frame_ix),wf_u1(snr_ix,frame_ix),wf_c1(snr_ix,frame_ix)]...
= R_mod_cod_intlv(N,subN,R_comb1,fact1,B,rdstate,code_rate,real_len,t,coded,T_sent,intleav); % de-interleaver & de-coder & de-modulator
[blk_err_c(snr_ix,frame_ix,1:Num_grp),blk_tot_c(snr_ix,frame_ix,1:Num_grp),bit_err_u(snr_ix,frame_ix,1:Num_grp),bit_tot_u(snr_ix,frame_ix,1:Num_grp),bit_err_c(snr_ix,frame_ix,1:Num_grp),bit_tot_c(snr_ix,frame_ix,1:Num_grp),wb_u2(snr_ix,frame_ix),wb_c2(snr_ix,frame_ix),tp_uu2(snr_ix,frame_ix),tp_cc2(snr_ix,frame_ix),wf_u2(snr_ix,frame_ix),wf_c2(snr_ix,frame_ix)]...
= R_mod_cod_intlv(N,subN,R_comb2,fact2,B,rdstate,code_rate,real_len,t,coded,T_sent,intleav); % de-interleaver & de-coder & de-modulator
end
end
disp(['SNR= ',num2str(snr),'dB finished']);
end
%% calculate results
% truong hop state1=1
ber_c1 = sum(wb_c1,2)./sum(tb_c,2)% avaible store ‘ber’ of OFDM
% save results
if ~exist(dirname1,'dir'),
mkdir(dirname1);
end;
desp1 = [sys{state1},filename];
save(filepath1,'desp1','ber_c1','misnr','stp','mxsnr','t_rms','fd','state1','M','cdrt','subN');
%truong hop state2=2
ber_c2 = sum(wb_c2,2)./sum(tb_c,2)%avaible store ‘ber’ of MIMO_OFDM
% save results
if ~exist(dirname2,'dir'),
mkdir(dirname2);
end;
desp2 = [sys{state2},filename];
save(filepath2,'desp2','ber_c2','misnr','stp','mxsnr','t_rms','fd','state2','M','cdrt','subN');
end
% plot results
%**************figure;
%********************************************************************
axes(handles.axes1)
semilogy(misnr:stp:mxsnr,ber_c1,'-.r*',misnr:stp:mxsnr,ber_c2,':bs','linewidth',2);
legend('OFDM 1x1','STBCOFDM 2x2');
xlabel('SNR [dB]');
ylabel('BER');
set(handles.axes1,'XminorTick','on')
grid on
clear all;clc;
function MIMO_OFDM_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
function varargout = MIMO_OFDM_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
function varargout = frames_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all properties.
function frames_CreateFcn(hObject, eventdata, handles)
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function varargout = fft_size_Callback(hObject, eventdata, handles)
% hObject handle to fft_size (see GCBO)
% --- Executes during object creation, after setting all properties.
function fft_size_CreateFcn(hObject, eventdata, handles)
% hObject handle to fft_size (see GCBO)
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function varargout = Nsubcarriers_Callback(hObject, eventdata, handles)
% hObject handle to Nsubcarriers (see GCBO)
% Hints: get(hObject,'String') returns contents of Nsubcarriers as text
% str2double(get(hObject,'String')) returns contents of Nsubcarriers as a double
% --- Executes during object creation, after setting all properties.
function Nsubcarriers_CreateFcn(hObject, eventdata, handles)
% hObject handle to Nsubcarriers (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function M_Callback(hObject, eventdata, handles)
% --- Executes during object creation, after setting all properties.
function M_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function varargout = fd_Callback(hObject, eventdata, handles)
function fd_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function varargout = t_rms_Callback(hObject, eventdata, handles)
function t_rms_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function varargout = snr_Callback(hObject, eventdata, handles)
function snr_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
% --- Executes on selection change in M.
function popupmenu2_Callback(hObject, eventdata, handles)
function popupmenu2_CreateFcn(hObject, eventdata, handles)
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
2) Interleaving,Coding and Mod received signal
function [T_mod1,T_mod2,T_sent,coded,intleav,fact1,fact2,real_len,raw_len,t] = ...
T_mod_cod_intlv(N,subN,B,P1,P2,Nsymbol,code_rate,rdstate,T_div1,T_div2,ps1,ps2,state1,state2)
T_sent = cell(1,floor(N/subN)); coded = cell(1,floor(N/subN));
intleav = cell(1,floor(N/subN));T_mod1 = []; T_mod2 = [];
t = cell(1,floor(N/subN));
for k = 1:floor(N/subN)
lens = subN*B(k)*Nsymbol;
if code_rate(k) == 2/3&&mod(floor(lens*code_rate(k)),2)~=0
raw_len(k) = floor(lens*code_rate(k))-1;%lenh nay se rut gon chieu dai lens theo ti le k
else
raw_len(k) = floor(lens*code_rate(k));
end
raw_bits = randint(1,raw_len(k));
T_sent{k} = raw_bits;%dua mang "raw_bits" vao 1 vi tri "T_sent{k}"
[coded{k},t{k},real_len(k)] = N_encoder(code_rate(k),raw_bits,lens);%ma hoa raw_bit theo trellis k=1/2
if length(coded{k})==0
intleav{k} = [];
mod1 = zeros(1,subN*Nsymbol);
fact1(k) = 0;
fact2(k) = 0;
else
intleav{k}=randintrlv(coded{k},rdstate);
mod1 = qmodulator2(intleav{k},2^B(k));
fact1(k) = sqrt(P1(k)/pv(mod1));%P1 la nang luong tren mot song mang con; pv la tinh gia tri trung binh
fact2(k) = sqrt(P2(k)/pv(mod1));
end
tp = reshape(mod1,[],subN);
%sap xep lai ma tran mod1 thanh ma tran co subN cot
mod2 = tp.';
mod3 = tp.';
mod2 = mod2 *fact1(k);
mod3 = mod3 *fact2(k);
T_mod1 = [T_mod1;mod2];
T_mod2 = [T_mod2;mod3];
End
3) Deinterleaving,decoding and demod received signal
function [blk_err_c,blk_tot_c,bit_err_u,bit_tot_u,bit_err_c,bit_tot_c,bnum2_u,bnum2_c,tpb_u,tpb_c,fnum_u,fnum_c] = ...
R_mod_cod_intlv(N,subN,R_comb,fact1,B,rdstate,code_rate,real_len,t,coded,T_sent,intleav)
fnum_u = zeros(1,floor(N/subN)); fnum_c = zeros(1,floor(N/subN));
blk_err_c=zeros(1,floor(N/subN));
% stores whether the particular block is in error or not
% if the block is in error, a '1' will be put in
% the place, if it is not in error '0' will used.
blk_tot_c=zeros(1,floor(N/subN));% whether the block is loaded or not
bit_err_u=zeros(1,floor(N/subN));
% stores the number of bits in error for uncoded
% configuration, for each block
bit_tot_u=zeros(1,floor(N/subN));
% total number of uncoded bits loaded in each block
bit_err_c=zeros(1,floor(N/subN)); % stores the number of bits in error for coded
% configuration, for each block
bit_tot_c=zeros(1,floor(N/subN)); % stores the total number of coded bits loaded in each block
for k = 1:floor(N/subN) % 1:512 % for each block
tp = R_comb((k-1)*subN+1:k*subN,:).';
tp2 = tp(:).';
if fact1(k)~=0
r_dmd = qdemodulator(tp2/fact1(k),2^B(k));
dintlv=randdeintrlv(r_dmd,rdstate);
%r_dcd = BR_decode2(code_rate(k),dintlv(1:real_len(k)),t(k));
r_dcd = BR_decode2(code_rate(k),dintlv(1:real_len(k)),t{k});
bnum2_u(k) = biterr(dintlv,coded{k}); % uncoded wrong bits
bnum2_c(k) = biterr(r_dcd,T_sent{k}); % coded wrong bits
blk_tot_c(k)=blk_tot_c(k)+1;
% increase the count for the loaded blocks
bit_tot_u(k)=bit_tot_u(k)+length(dintlv);%
bit_tot_c(k)=bit_tot_c(k)+length(r_dcd);%
else
r_dmd = []; dintlv = [];
bnum2_u(k) = 0; bnum2_c(k) = 0;
end
tpb_u(k) = length(intleav{k}); % throughput for uncoded, if no error
tpb_c(k) = length(T_sent{k}); % throughput for coded, if error
if bnum2_u(k)>0 % with error
fnum_u(k) = fnum_u(k) +1; % fer + 1
tpb_u(k) = 0; % throughput set to 0
end
if bnum2_c(k)>0 % with error
fnum_c(k) = fnum_c(k) +1; % fer + 1
tpb_c(k) = 0; % throughput set to 0
end
end
% store data for each block
blk_err_c=fnum_c; % whether the block is in error or not
bit_err_u=bnum2_u;% total number of bits in error in each block for uncoded system
bit_err_c=bnum2_c;% total number of bits in error in each block for coded system
%% yy's new part
bnum2_u = sum(bnum2_u);
bnum2_c = sum(bnum2_c);
tpb_u = sum(tpb_u);
tpb_c = sum(tpb_c);
fnum_u = sum(fnum_u);
fnum_c = sum(fnum_c);
4) The multipath channel matrix generator
%Using rayleighchan function in MATLAB
%chnums is the number of channel realizations
%fd is the Doppler frequency
%divn is the number of diversity branches
%t_rms is the delay spread in us
%The output is matrix ch, for channel impulse response
%clear all;close all;
%clc;
%bug fixed for AWGN
function[ch1,ch2]=channelgenerator2(t_rms,fd,sampling_rate,N,cp_l,BW,chnums,divn1,divn2)
if t_rms==0 && fd ==0,
ch1 = ones(1,chnums,divn1);
ch2 = ones(1,chnums,divn2);
else
Ch1=raych2(chnums*divn1,fd,t_rms,sampling_rate,N,cp_l,BW);
Ch2=raych2(chnums*divn2,fd,t_rms,sampling_rate,N,cp_l,BW);
for i=1:divn1
ch1(:,:,i)=Ch1(:,(i-1)*chnums+1:i*chnums);
%save (sprintf('ch%d',i),'ch');
end
for i=1:divn2
ch2(:,:,i)=Ch2(:,(i-1)*chnums+1:i*chnums);
%save (sprintf('ch%d',i),'ch');
end
end
5)SelectAnten2
function [H_comb,H_LA,ps]=selectAntenna2(H,N,subN,state,T_div)
%H_comb = H(:,DELAY+1:end,:); ps = [];
H_comb = H; ps = [];
H_LA = squeeze(H(:,1,:));
6)BT_alamouti
%Alamouti-STBC scheme for MISO-Alamouti
%return if not MISO system
%T_mod is the modulated signal
%Nsymbol is the No. of symbols within each frame
%state can be 1,2,3,4 or 5, indicates different systems (1=SISO,2=MRC,3=MISO,4=EGC,5=AS)
function T_trans=BT_alamouti(T_mod,Nsymbol,state)
% if state~=3
% T_trans=T_mod;
% return;
% end
if state == 2 || state == 6
for k=1:2:Nsymbol
Ant0(:,k:k+1) = [T_mod(:,k) -conj(T_mod(:,k+1))];
Ant1(:,k:k+1) = [T_mod(:,k+1) conj(T_mod(:,k))];
end
T_trans(:,:,1)=Ant0;T_trans(:,:,2)=Ant1;
else
T_trans = T_mod;
End
7) BTR_ofdm
%OFDM transiver plus channel
%B and P contains bits number and power for each subcarrier
%ch is the channel matrix, chnums is the No. of channel realizations
%N is the No. of subcarriers
%T_div and R_div are transmitter/receiver diversity branches
%pn is the normalized noise power
%T_trans is the modulated signal (After Alamouti for MISO-Alamouti)
%cp_l is the length of CP
%R_dfs is the received signal, without CP
%H is the freqneucy response of channel impulse response
function [R_dfs]=BTR_ofdm(h2,N,cp_l,T_trans,snr,T_div,R_div,Nsymbol,flg_offset,fd,BW,sampling_rate,noisePowPerSubC)
%% offset part
%BW = 5e6;
% F_Sampling = BW*sampling_rate;
% T_Sampling = 1/F_Sampling;
% T_Symbol = (N+cp_l)*T_Sampling;
global use_HPA_flg;
T_Sampling = 1/(BW*sampling_rate);
T_Symbol = (N+cp_l)/(BW*sampling_rate);
if flg_offset==1 % Simulation Including Carrier ofset
t=0:T_Sampling:T_Symbol-T_Sampling;
offset=exp(-j*2*pi*fd*t)';
else
offset=1;
end
pn=noisePowPerSubC;%1/10^(snr/10)/N; %Noise power in each subcarrier
fss = ifft(T_trans,N,1);
fs1=[fss(N-cp_l+1:end,:,:);fss];
fs1_before_PA=fs1;
% sdnr_lin_mean_beforHPA=(mean(sum(abs(fs1(1:N,:)).^2)))/( pn);
% if sdnr_lin_mean_beforHPA>0
% SNR_beforePowerAmp=10*log10(sdnr_lin_mean_beforHPA);
% Calculation of new SNR taking Backoff into account.
% else
% SNR_beforePowerAmp=nan;
% end
% % PASS THROUGH THE HIGH POWER AMPLIFIER
if use_HPA_flg
fs1_HPA =Rapps_model(fs1,'');%Amplifying the signal with Rapps model
else
fs1_HPA =fs1;
end
fst3 = zeros(N+cp_l,Nsymbol,T_div);
fs3 = zeros(N+cp_l,Nsymbol,R_div);
for rx = 1:R_div
for tx = 1:T_div
for k=1:Nsymbol
fst3(:,k,tx)=filter(h2(:,k,(rx-1)*T_div+tx),1,fs1_HPA(:,k,tx)).*offset;
end
end
fs3(:,:,rx) = sum(fst3,3);
end
% clear i;
noise=randn(size(fs3))+i*randn(size(fs3));
noise=noise/sqrt(pv(noise))*sqrt(pn)/sqrt(N);
splusn=fs3+noise;
rcp=splusn(cp_l+1:end,:,:);
R_dfs=fft(rcp,N,1);
8)BR_combiner
%Combine received signal
%R_dfs is the output signal of FFT, without CP
%H is the channel frequency response
%state can be 1,2,3 or 4, indicates different systems (1=SISO,2=MRC,3=MISO,4=EGC)
%R_comb will be demodulated later to recover the transmitted bits
function R_comb=BR_combiner(R_dfs,H,state)
[N,Nsymbol,R_div]=size(R_dfs);
if state==1
for k=1:Nsymbol
R_comb(:,k)=R_dfs(:,k)./H(:,k);
end
R_comb(:,k)=(conj(H1(:,1)).*R_dfs(:,k)+H1(:,2).*conj(R_dfs(:,k+1))).*scale4;
% R_comb(:,k+1)=(conj(H1(:,2)).*R_dfs(:,k)-H1(:,1).*conj(R_dfs(:,k+1))).*scale4;
elseif state == 6||state==2
for k = 1:2:Nsymbol
scale4=1./sum(abs(squeeze(H(:,k,:))).^2,2);
r0 = R_dfs(:,k,1); r1 = R_dfs(:,k+1,1);
r2 = R_dfs(:,k,2); r3 = R_dfs(:,k+1,2);
h0 = H(:,k,1); h1 = H(:,k,2);
h2 = H(:,k,3); h3 = H(:,k,4);
R_comb(:,k) = (conj(h0).*r0 + h1.*conj(r1) + conj(h2).*r2 + h3.*conj(r3)).*scale4;%lay du lieu thu giong alamouti 2x1
R_comb(:,k+1) = (conj(h1).*r0 - h0.*conj(r1) + conj(h3).*r2 - h2.*conj(r3)).*scale4;
end
end
Các file đính kèm theo tài liệu này:
- ky_thuat_mimo_ofdm_9833.doc