
Kata Pengantar
Pada musim panas 2016, dari acara yang terkenal, hamba Anda yang rendah hati, di antara sekelompok siswa lain, dapat menghadiri kuliah oleh Profesor Martin Haardt tentang topik MIMO , yang diselenggarakan olehnya dalam kerangka program master internasional "Komunikasi dan Pemrosesan Sinyal" . Tetapi, sayangnya, satu setengah minggu dari dua, saya sakit keras - dan karena itu sejumlah topik baru saja keluar dari ruang lingkup pemahaman saya ... Namun, setelah beberapa waktu, menganalisis dasar-dasar MIMO menjadi hobi saya - tidak meninggalkan kasus yang belum selesai.
Sedikit demi sedikit, semua ini telah berkembang menjadi serangkaian seminar abstrak kecil, yang, mungkin, salah untuk tidak dibagikan. Dan hari ini, untuk menghormati Hari Komunikasi , saya ingin membahas dengan Anda topik bandwidth saluran MIMO - topik sederhana, tetapi masih menimbulkan kesulitan bagi siswa (dan bukan hanya siswa).
Tampaknya bagi orang-orang yang tidak terlibat bahwa peningkatan jumlah antena penerima dan pemancar dalam kerangka teknologi tersebut meningkatkan bandwidth sistem dengan jumlah yang sama: misalnya, jika Anda menempatkan 2 antena di sisi penerima dan 2 antena di sisi pengirim (MIMO 2x2), maka throughput pasti akan meningkat 2 kali. Tetapi apakah ini benar dalam teori? Mari kita coba mencari tahu!
Versi yang lebih formal dalam bahasa Inggris dapat ditemukan di tautan dan di repositori GitHub saya.
Pada artikel ini, kami tidak akan mempertimbangkan masalah korelasi antena dan masalah implementasi lainnya. Kami membatasi diri pada teori suling - sebagai permulaan.
Model Sinyal yang Diterima

Sebelum kita mulai berbicara tentang bandwidth, pertama-tama kita akan membahas deskripsi matematis dari sinyal yang diterima. Bagian ini harus diambil dengan hati-hati, karena banyak yang akan datang dari formula ini. Jadi sinyal yang diterima dapat direpresentasikan sebagai:
dimana
- daya pemancar,
- Jumlah antena pemancar,
- Karakter yang dikirimkan
- Aditif noise, dan
- Matriks koefisien transmisi saluran (pada kenyataannya, proses fading).
Sinyal yang ditransmisikan juga dapat dicat sedikit lebih detail:
dimana
- salah satu sinyal informasi (
), dan
- amplifikasi dari jalur propagasi tertentu dari gelombang EM (path gain).
Mari kita nyatakan apa penguatan jalur:
Penguatan jalur propagasi (atau berat antena) berarti distribusi daya keluaran sebanding dengan "kekuatan" jalur tertentu. Dengan kata lain, kami ingin mengalokasikan lebih banyak daya untuk saluran yang baik (jalur propagasi) dan lebih sedikit energi untuk saluran yang buruk.
Bobot antena dibatasi oleh jumlah antena pemancar:
dimana
Apakah pangkat matriks saluran.
Berbicara tentang yang terakhir.
Dimensi matriks
membuat
dimana
- Jumlah antena penerima.
Untuk beberapa pengukuran waktu, saluran akan terlihat seperti ini:

Untuk referensi:
Mungkin untuk perhitungan dan model yang lebih rumit, Anda ingin menggunakan salah satu alat paling populer untuk itu - MatLab . Dalam hal ini, perlu dipertimbangkan bahwa struktur data yang sedikit berbeda digunakan di sana: baris adalah pengukuran waktu (foto), jumlah kolom sesuai dengan jumlah antena pemancar
, dimensi lateral sesuai dengan
.
Formula (1) dapat dengan mudah diadaptasi untuk kasus-kasus khusus MIMO.
MISO ( M ultiple Input S ingle Output - beberapa antena pemancar dan satu penerima):
dimana
Apakah vektor
.
SIMO (P engaman Tunggal Tunggal O utput - beberapa antena penerima dan satu antena pemancar):
dimana
Apakah vektor 
SISO ( S ingle Single S ingle O utput - satu antena di sisi penerima dan pemancar):
Tampaknya sederhana.
Semua pertimbangan lebih lanjut dapat dibagi menjadi dua kasus besar: informasi status saluran (informasi status saluran CSI) tidak diketahui oleh pemancar ( CU - Saluran Tidak Dikenal) dan informasi status saluran diketahui oleh pemancar ( CK - Saluran Diketahui).
Di atas, kami memeriksa kasing ketika saluran tidak dikenal oleh pemancar (kasing terbuka , transmisi tanpa umpan balik). Dengan kata lain, karena kurangnya informasi yang diperlukan, kami tidak dapat memilih arah yang efektif, dan oleh karena itu kami mengikuti jalur yang paling sederhana: kami mentransmisikan kekuatan yang sama melalui semua antena (jalur, jalur propagasi). Oleh karena itu, gain setiap gain jalur adalah 1 :
Namun, kami ulangi: kami ingin mengalokasikan lebih banyak daya untuk saluran yang baik (jalur propagasi) dan lebih sedikit energi untuk saluran yang buruk .
Muncul pertanyaan: bagaimana cara mendistribusikan daya secara efektif?
Jika saluran diketahui ( kasing tertutup - dengan umpan balik), kami dapat menggunakan skenario transmisi tingkat lanjut dengan beberapa algoritma pemrosesan sinyal tambahan. Misalnya, dengan pendekatan linier seperti pre-coding dan post-processing .
Kita akan mengerti apa arti dua istilah terakhir.
Jika kami memiliki CSI di sisi pengiriman, mis. matriks
, kita secara matematis dapat memproses matriks ini. Misalnya, menerapkan algoritma SVD (Singular Value Decomposition).

Perhatikan bahwa matriks
Merupakan matriks diagonal, dan unsur-unsur diagonalnya (nilai singular) pada intinya adalah koefisien transmisi jalur propagasi unik. Dengan kata lain, jika kita mencapai penggandaan sinyal kita dengan matriks nilai singular
daripada saluran penuh
, maka saluran MIMO akan terurai menjadi array saluran SISO paralel.
Jadi matriks precoding linear (filter) seharusnya
, dan matriks linear post-processing (demodulator)
( H adalah singkatan dari konjugasi Hermitian).
Jelas, untuk kasus dengan saluran yang tidak dikenal
dan
matriks identitas yang sama.
Sekarang, mengetahui semua hal di atas, mari kita mendefinisikan kembali model sinyal yang diterima:
Perhatikan bahwa:
memiliki sifat statistik yang sama dengan
;- Nilai eigen
adalah kuadrat dari nilai singular dari matriks saluran
(
)
Secara skematis, ini dapat direpresentasikan sebagai:

Fig. 1. Skema pre-coding dan post-processing [1, hal.67].

Fig. 2. Skema penguraian modal
ketika saluran diketahui oleh pemancar dan penerima [1, hal.67].
Dasar-dasar dipisahkan - kita dapat melanjutkan langsung ke bandwidth !
Kapasitas
Saya pikir semua orang yang mempelajari teori informasi ingat bahwa istilah bandwidth datang kepada kita dari disiplin khusus ini. Biasanya (di usia mahasiswa saya), pertimbangan difokuskan pada kasus klasik saluran AWGN, tetapi rumusnya dapat relatif mudah diperoleh untuk kasus saluran MIMO dengan fading.
Agar tidak mengetik ulang perhitungan dari buku sekali lagi, saya mencoba mengatur semuanya lebih atau kurang penuh warna dan dengan tangan - untuk memberikan formula kehidupan, sehingga untuk berbicara. Saya harap format ini tidak terlalu membosankan.
Jadi, sekali lagi, kami menulis model sinyal:

Sekarang mari kita lanjutkan untuk menentukan throughput melalui informasi timbal balik .

Kami menulis matriks autocovariance dari sinyal yang diterima dan komponennya:

Dan kami menggunakannya dalam menentukan entropi diferensial :

Pengganti (4) dan (5) dalam (2):

Dan sekarang kita mengganti (6) dalam (1):

Kami terus beralasan. Ambil kasus pertama: salurannya tidak diketahui (Kanal tidak dikenal). Ini berarti bagi kami bahwa tidak mungkin untuk memilih arah transmisi yang optimal, dan oleh karena itu sinyal yang ditransmisikan akan independen dan akan memiliki kekuatan yang sama (bertenaga equi). Berdasarkan kondisi maksimum (
), kita dapat mengambil matriks autocovariance dari karakter yang ditransmisikan sama dengan matriks identitas. Maka kita memiliki:

Kami menggunakan properti faktor penentu berikut:
Ini adalah kasus kami, dan kami dapat menukar matriks sehingga
(dari properti EVD). Akan tetap:

Melewati dari matriks ke jumlah, kita memiliki:

Formula ini sekali lagi menggambarkan pendekatan untuk mempertimbangkan MIMO sebagai saluran SISO paralel.
Untuk kasus dengan saluran yang dikenal ( C hannel K nown), bobot antena akan ditambahkan ke rumus:

Kami juga menulis rumus untuk kasus khusus:

Catatan :
Untuk kasus SIMO dan MISO, tidaklah sia-sia bahwa kuadrat dari norma Frobenius muncul dalam catatan.
- dari sudut pandang matematika, mereka setara dengan nilai eigen
. Karena itu, jika Anda perlu menghitung sesuatu dengan cepat - ini caranya.
Yah, saya harap tulisan tangan dan bahasa Inggris saya tidak terlalu mengganggu persepsi informasi, tetapi tetap saja, mari kita bicara tentang poin utama :
- Ya, bandwidth saluran MIMO dapat dianggap sebagai jumlah bandwidth saluran SISO .
- Namun, jumlah ini dibatasi oleh peringkat saluran!
Algoritma Penuangan Air
Seperti yang dapat dilihat dari rumus bandwidth yang dikenal di sisi transmisi saluran (CK - Saluran Diketahui), distribusi energi melalui antena dapat dioptimalkan. Untuk melakukan ini, kami menggunakan algoritma Penuangan Air ( pengisian dengan air ) [1, hlm. 68-69]:
import numpy as np from numpy import linalg as LA import matplotlib.pyplot as plt def waterpouring(Mt, SNR_dB, H_chan): SNR = 10**(SNR_dB/10) r = LA.matrix_rank(H_chan) H_sq = np.dot(H_chan,np.matrix(H_chan, dtype=complex).H) lambdas = LA.eigvals(H_sq) lambdas = np.sort(lambdas)[::-1] p = 1; gammas = np.zeros((r,1)) flag = True while flag == True: lambdas_r_p_1 = lambdas[0:(r-p+1)] inv_lambdas_sum = np.sum(1/lambdas_r_p_1) mu = ( Mt / (r - p + 1) ) * ( 1 + (1/SNR) * inv_lambdas_sum) for idx, item in enumerate(lambdas_r_p_1): gammas[idx] = mu - (Mt/(SNR*item)) if gammas[rp] < 0:
Pengujian:
Mt = 3 SNR_db = 10 H_chan = np.array([[1,0,2],[0,1,0], [0,1,0]], dtype = float) gammas = waterpouring(Mt, SNR_db, H_chan) print('Rank of the matrix: '+str(LA.matrix_rank(H_chan))) print('Gammas:\n'+str(gammas)) >>> Rank of the matrix: 2 >>> Gammas: >>> [1.545 1.455]
Yah, itu terlihat masuk akal:
1) jumlah antena pemancar yang terlibat sama dengan pangkat saluran;
2) jumlah bobot antena sama dengan jumlah antena pemancar.
Dua kasus pembatas
Dan sekarang mari kita sedikit terganggu dan menyelesaikan masalah untuk pemahaman.
Mari kita cari, misalnya, untuk apa koefisiennya
dengan SNR cenderung
dan
(pada skala logaritmik, tentu saja, karena tidak ada kekuatan negatif).
Kami mengingat rumus korespondensi antara desibel dan waktu:
dimana
- kekuatan sinyal yang ditransmisikan (untuk tugas kita, itu setara dengan energi simbol
), dan
- Kekuatan noise (dalam masalah kami sama dengan kepadatan spektral noise)
)
Jadi pada skala linier akan:
Kami melihat rumus dasar dari algoritma:
dimana
Apakah iterator dimulai dengan 1,
Apakah pangkat matriks saluran,
- nilai eigen ke-i dari "kuadrat" dari matriks saluran. Gammas dihitung berdasarkan rumus berikut:
Kami mulai beralasan:
Jika
lalu
. Oleh karena itu
. Untuk iterasi pertama, ia tetap:
Pengganti untuk gamma:
Kami merangkum:
Dengan energi transmisi yang sangat besar atau kebisingan yang sangat kecil, tidak ada yang perlu diciptakan, katakanlah begitu - kami mendistribusikan daya secara merata di antara antena pemancar (dengan mempertimbangkan peringkat matriks saluran).
Kami beralasan lebih lanjut:
Dan apa yang cenderung terjadi pada SNR
? Di sini kita bahkan tidak akan masuk ke matematika, kita akan beralasan secara logis: kasus ini sesuai dengan suara yang sangat besar atau nol daya pancar. Jadi, ini dan itu, sistem kami, anggap, tidak berfungsi. Karenanya, pertanyaan dengan gammas menghilang secara otomatis ...
Ini kadang-kadang pertanyaan yang muncul dalam ujian dengan seorang profesor.
Menghitung throughput (akhirnya!)
def siso_capacity(H_chan, SNR_dB): SNR = 10**(SNR_dB/10) c = np.log2(1 + SNR*(np.abs(H_chan)**2)) return c def openloop_capacity(H_chan, SNR_dB): SNR = 10**(SNR_dB/10) Mt = np.shape(H_chan)[1] H_sq = np.dot(H_chan,np.matrix(H_chan, dtype=complex).H) lambdas = LA.eigvals(H_sq) lambdas = np.sort(lambdas)[::-1] c = 0 for eig in lambdas: c = c + np.log2(1 + SNR*eig/Mt) return np.real(c) def closedloop_capacity(H_chan, SNR_dB): SNR = 10**(SNR_dB/10) Mt = np.shape(H_chan)[1] H_sq = np.dot(H_chan,np.matrix(H_chan, dtype=complex).H) lambdas = LA.eigvals(H_sq) lambdas = np.real(np.sort(lambdas))[::-1] c = 0 gammas = waterpouring(Mt, SNR_dB, H_chan) for idx, item in enumerate(lambdas): c = c + np.log2(1 + SNR*item*gammas[idx]/Mt) return np.real(c) Mr = 4 Mt = 4 H_chan = (np.random.randn(Mr,Mt) \ + 1j*np.random.randn(Mr, Mt))/np.sqrt(2)
Tampaknya bekerja. Kami lolos ke penilaian yang lebih substantif.
Kapasitas ergonomis
Seperti dapat dilihat dari contoh di atas, kami bekerja dengan proses acak. Dan, terus terang, itu adalah kesalahan untuk menarik kesimpulan tentang proses acak dalam satu implementasi. Bahkan jika saluran konstan dalam arti statistik, beberapa rata-rata lebih dari satu set yang cukup besar diperlukan.
Di sini konsep kapasitas ergodik bermanfaat bagi kita:
dimana
menunjukkan tikar. harapan (nilai yang diharapkan).
Kami adalah pemodelan.
Mr = 4 Mt = 4 counter = 1000 SNR_dBs = [i for i in range(1, 21)] C_MIMO_CU = np.empty((len(SNR_dBs), counter)) C_MIMO_CK = np.empty((len(SNR_dBs), counter)) C_SISO = np.empty((len(SNR_dBs), counter)) C_SIMO = np.empty((len(SNR_dBs), counter)) C_MISO_CU = np.empty((len(SNR_dBs), counter)) C_MISO_CK = np.empty((len(SNR_dBs), counter)) for c in range(counter): H_MIMO = (np.random.randn(Mr,Mt) + 1j*np.random.randn(Mr, Mt))/np.sqrt(2) H_SISO = H_MIMO[0,0] H_SIMO = H_MIMO[:,0].reshape(Mr,1) H_MISO = H_MIMO[0,:].reshape(1,Mt) for idx, SNR_dB in enumerate(SNR_dBs): C_MIMO_CU[idx, c] = openloop_capacity(H_MIMO, SNR_dB) C_MIMO_CK[idx, c] = closedloop_capacity(H_MIMO, SNR_dB) C_SISO[idx, c] = siso_capacity(H_SISO, SNR_dB) C_SIMO[idx, c] = openloop_capacity(H_SIMO, SNR_dB) C_MISO_CU[idx, c] = openloop_capacity(H_MISO, SNR_dB) C_MISO_CK[idx, c] = closedloop_capacity(H_MISO, SNR_dB) C_MIMO_CU_erg = np.mean(C_MIMO_CU, axis=1) C_MIMO_CK_erg = np.mean(C_MIMO_CK, axis=1) C_SISO_erg = np.mean(C_SISO, axis=1) C_SIMO_erg = np.mean(C_SIMO, axis=1) C_MISO_CU_erg = np.mean(C_MISO_CU, axis=1) C_MISO_CK_erg = np.mean(C_MISO_CK, axis=1) plt.figure(figsize=(7, 5), dpi=600) plt.plot(SNR_dBs, C_MIMO_CU_erg,'g-o', label='$M_R=4$, $M_T=4$ (CU)') plt.plot(SNR_dBs, C_MIMO_CK_erg,'g-v', label='$M_R=4$, $M_T=4$ (CK)') plt.plot(SNR_dBs, C_MISO_CU_erg, 'm-o', label='$M_R=1$, $M_T=4$ (CU)') plt.plot(SNR_dBs, C_MISO_CK_erg, 'm-v', label='$M_R=1$, $M_T=4$ (CK)') plt.plot(SNR_dBs, C_SISO_erg, 'k-', label='$M_R=1$, $M_T=1$') plt.plot(SNR_dBs, C_SIMO_erg, 'c-', label='$M_R=4$, $M_T=1$') plt.title("Ergodic Capacity") plt.xlabel('SNR (dB)') plt.ylabel('Capacity (bps/Hz)') plt.legend() plt.minorticks_on() plt.grid(which='major') plt.grid(which='minor', linestyle=':') plt.show()

Fig. 3. Kurva bandwidth untuk berbagai skema transmisi. Bandingkan dengan [1, hlm. 74].
Jadi kita lihat itu
- kasus MIMO diharapkan lebih unggul dari yang lain, dan dengan meningkatnya SNR, kebutuhan akan pengetahuan tentang matriks saluran berkurang (lihat contoh dengan infinitas).
- SIMO lebih unggul daripada MISO jika pemancar tidak tahu salurannya (daya di MISO dibagi di semua antena, tetapi tidak secara optimal) dan bertepatan dengan MISO dalam kasus saluran yang dikenal .
- SISO diperkirakan akan menyerang.
Dan Yang Mulia memerintah atas pangkat matriks saluran , yang tidak memungkinkan kita untuk secara jelas membandingkan peningkatan jumlah antena dengan peningkatan kecepatan transmisi.
Hal-hal seperti itu.
Sastra
(meskipun hanya ada satu buku, tetapi buku ini sangat bagus!)
- Paulraj, Arogyaswami, Rohit Nabar, dan Dhananjay Gore.
Pengantar komunikasi nirkabel ruang-waktu. Cambridge University Press, 2003.