کد بلوکی فضا-زمانی

**کدگذاری بلوکیِ فضا-زمانی**، تکنیکی در ارتباطات بی‌سیم است که با انتقال چندین نسخه از یک رشته از داده‌ها به‌کمک چندین آنتن در فرستنده، و سپس بهره‌گیری از نسخه‌های دریافت‌شده در گیرنده، قابلیت اطمینان انتقال داده‌ها را افزایش می‌دهد. این که سیگنال فرستاده‌شده باید از یک محیط انتقال پُرچالِش‌ که دارای پراکَنِش، بازتاب، شکست امواج الکترومغناطیسی، و ... بگذرد و سپس ممکن است در اثر نویز گرمایی گیرنده بیشتر هم خراب شود، به این معنی است که برخی از نسخه‌های دریافت‌شده داده‌ها ممکن است از نسخه‌های دیگر به سیگنال فرستاده‌شده شبیه‌تر (نزدیک‌تر) باشند. این *افزونگی* (به انگلیسی: redundancy)، شانس بهره‌گیری از یک یا چند نسخه دریافت‌شده برای کدگشایی صحیح سیگنال دریافت‌شده را بیشتر می‌کند. در واقع، کدگذاری فضا-زمانی، همه نسخه‌های سیگنال دریافت‌شده را به روشی بهینه ترکیب می‌کند تا بیشترین اطلاعات ممکن را از هر یک از آنها استخراج کند.

## مقدمه
تا نخستین سال‌های دهه نود میلادی، بیشتر تلاش‌ها در ارتباطات بی‌سیم بر بهره‌گیری از یک آرایۀ آنتن، تنها در یک سوی لینک بی‌سیم - معمولاً در گیرنده - متمرکز بود. تااینکه فُوشینی (یا به ایتالیایی: فوسکینی) و گانس، همچنین فوشینی و تِلاتار نشان دادند که اگر در محیط‌های انتقال دارای پراکنش بسیار، آرایه‌های آنتن در هر دو سوی لینک مخابراتی به کار گرفته شوند، ظرفیت انتقال داده‌ها افزایش قابل توجهی می‌یابد. 

یک روش بهره‌گیری از چندین آنتن، داشتن چندین آنتن در فرستنده، و تنها به دلخواه، چندین آنتن در گیرنده است. تارخ، سِشادری و کالدِربَنک نشان دادند که کدگذاری فضا-زمانی نسبت به سیستم‌های تک‌آنتنی، نرخ خطا را بهبود قابل توجه می‌بخشند. طرح آنها نخست بر پایۀ کدهای تِرِلیس (داربستی) بود. اما اَلَموتی و سپس تارخ، جعفرخانی و کالدِربَنک، از کدهای بلوکی ساده‌تر برای کدهای بلوکی فضا-زمانی بهره گرفتند. کدگذاری بلوکی فضا-زمانی، فرستادن چندین نسخه اضافی از داده‌ها برای مبارزه با محوشوندگی کانال مخابراتی و نویز حرارتی گیرنده است، به امید این که برخی از آنها بهتر به گیرنده برسند. در کدگذاری بلوکی فضا-زمانی، رشتۀ داده‌هایی که قرار است منتقل شود، در بلوک‌هایی کد می‌شود که از آنتن‌های فاصله‌دار و در طول زمان منتشر می‌شوند. درحالی‌که بودن چندین آنتن در فرستنده لازم است، بودن چندین آنتن در گیرنده لازم نیست، اگرچه بودن آنها عملکرد را بهبود می‌بخشد. به دریافت چندین نسخه از یک رشته داده‌ها، ''تنوع در دریافت'' گفته می‌شود، که تا پیش از مقاله فوشینی در ۱۹۹۸، بسیار به آن پرداخته شده‌بود.

یک کد بلوکی فضا-زمانی معمولاً با یک ماتریس نمایش داده می‌شود. هر سطر نشان‌دهنده یک بازه زمانی و هر ستون نشان‌دهنده ارسال‌های یک آنتن در طول زمان است.

: 
\text{time-slots}
\begin{matrix}
\text{transmit antennas}\\
\left \downarrow
\overrightarrow{
\begin{bmatrix}
s_{11} & s_{12} & \cdots & s_{1n_T} \\
s_{21} & s_{22} & \cdots & s_{2n_T} \\
\vdots & \vdots & & \vdots \\
s_{T1} & s_{T2} & \cdots & s_{Tn_T}
\end{bmatrix}
}\right.
\end{matrix}


که در آن، s_{ij} سمبول مدوله‌شده‌ای است که قرار است در بازه زمانی i از آنتن j فرستاده شود. T، شمار بازه‌های زمانی و n_T شمار آنتن‌های فرستنده و n_R شمار آنتن‌های گیرنده هستند. این بلوک معمولاً دارای طول Tدر نظر گرفته می‌شود. 

نرخ کد یک کد بلوکی فضا-زمانی، شمار سمبول‌هایی‌ست که به‌طور متوسط در هر بازه زمانی یک بلوک منتقل می‌شوند. اگر یک بلوک، k سمبول را کد کند، نرخ کد چنین می‌شود

:  r = \frac{k}{T}. 

تنها یک کد بلوکی فضا-زمانی استاندارد می‌تواند به نرخ کامل (نرخ ۱) دست یابد (کد الموتی).

### تعامد
کدهای بلوکی فضا-زمانی، معمولا متعامد هستند. یعنی هر دو ستون دلخواه ماتریس کدگذاری، متعامد هستند. در نتیجه، کدگشایی در گیرنده، ساده، خطی و بهینه است. اما مسئله این است که کدهایی که این معیار را برمی‌آورند، به جز یکی، باید بخشی از نرخ داده‌شان را فدا کنند (کد الموتی را ببینید).

افزون‌ بر این، کدهای بلوکی فضا-زمانی شبه‌متعامد هم هستند که به بهای افزایش تداخل میان‌سمبولی، به نرخ داده بیشتری دست می‌یابند. بنابراین، عملکرد نرخ خطای آنها محدود به کمترین حد عملکرد کدهای بلوکی فضا-زمانی متعامد با نرخ  ۱ است که به‌سبب متعامد بودن، انتقال‌ بی‌تداخل میان‌سمبولی را فراهم می‌کنند.

## طراحی کدهای بلوکی فضا-زمانی
طراحی کدهای بلوکی فضا-زمانی بر پایۀ معیار *[[روش دایورسیتی|تنوع]]* است، که تارخ و همکاران در مقاله پیشین‌شان دربارۀ کدهای ترلیس فضا-زمانی پیش نهاده بودند. می‌توان نشان داد که بر پایۀ این معیار، کدهای بلوکی فضا-زمانی متعامد به بیشترین تنوع  می‌رسند.

### معیار تنوع
کد زیر را در نظر بگیرید

: \mathbf{c} = c_1^1c_1^2\cdots c_1^{n_T}c_2^1c_2^2\cdots c_2^{n_T}\cdots c_T^1c_T^2\cdots c_T^{n_T}

فرض کنید که کد دریافت‌شده که اشتباه کدگشایی شده‌است نیز چنین باشد

: \mathbf{e} = e_1^1e_1^2\cdots e_1^{n_T}e_2^1e_2^2\cdots e_2^{n_T}\cdots e_T^1e_T^2\cdots e_T^{n_T}.

سپس ماتریس زیر را در نظر بگیرید

: \mathbf{B}(\mathbf{c},\mathbf{e}) =
\begin{bmatrix}
e_1^1 - c_1^1 & e_2^1 - c_2^1 & \cdots & e_T^1 - c_T^1\\
e_1^2 - c_1^2 & e_2^2 - c_2^2 & \cdots & e_T^2 - c_T^2\\
\vdots & \vdots & \ddots & \vdots\\
e_1^{n_T} - c_1^{n_T} & e_2^{n_T} - c_2^{n_T} & \cdots & e_T^{n_T} - c_T^{n_T}
\end{bmatrix}


برای دست یافتن به بیشترین مرتبۀ تنوع ممکن - یعنی n_Tn_R - باید این ماتریس برای هر جفت کلمۀ کد متمایز \mathbf{c} و \mathbf{e}، رتبه کامل داشته باشد. حال اگر \mathbf{B}(\mathbf{c},\mathbf{e}) دارای کمترین رتبه b روی مجموعه جفت‌های کلمات کد متمایز باشد، آنگاه مرتبه تنوع این کد فضا-زمانی، برابر با bn_R می‌شود.

در مقایسه با سیستم‌های تک‌آنتنی، کدهای بلوکی فضا-زمانی، تنها بهرۀ تنوع (به انگلیسی: diversity gain) دارند و بهرۀ کدگذاری (به انگلیسی: coding gain) ندارند. افزونگی (به انگلیسی: redundancy) کدهای بلوکی فضا-زمانی، تنها تنوع در فضا و زمان را فراهم می‌کند. این در حالی‌ست که کدهای ترلیس فضا-زمانی، هم تنوع و هم بهرۀ کدگذاری را فراهم می‌کنند، چرا که یک کد ترلیس را در فضا و زمان توزیع می‌کنند.

## کدگذاری

### کد اَلَموتی
بندانگشتی|400x400پیکسل| عملکرد نرخ خطای بیت (BER) در انتقال داده‌ها به روش الموتی روی کانال‌های MISO و MIMO نسبتاً نامتغیر با زمان (K = 0.6). توجه کنید که مورد Alamouti 2x1 کاملاً با تنوع مرتبه دوم نظری هم‌خوان است. اما Alamouti 2x2 به سبب بهرۀ آرایه (array gain) اضافی، عملکرد BER بهتری دارد.
الموتی ساده‌ترین کد بلوکی فضا-زمانی را ۱۹۹۸ پیش نهاد، گرچه خودش آن را «کد بلوکی فضا-زمانی» نام نگذاشت. او آن را برای یک سیستم با دو آنتن فرستنده طراحی کرد که ماتریس کدگذاری آن چنین بود

: C_2 = \begin{bmatrix}
        c_1 & c_2\\
        -c_2^* & c_1^*
       \end{bmatrix},


و * نشان‌دهنده مزدوج مختلط است.

روشن است که نرخ این کد برابر ۱ است، زیرا دو سمبول را در دو بازه زمانی منتقل می‌کند. با بهره‌گیری از کدگشایی بهینه، نرخ خطای بیتی (BER) این کد معادل است با نرخ خطای بیتی روش  ترکیب کردن با بیشترین نسبت‌ها (به انگلیسی: maximal ratio combining)که 2n_R شاخه دارد. در واقع، این نتیجۀ تعامد سمبول‌ها پس از پردازش در گیرنده است؛ دو نسخه از هر سمبول فرستاده‌ شده و n_R نسخه‌ هم دریافت شده.

کد الموتی، یک کد بلوکی فضا-زمانی ویژه است؛ این تنها کد بلوکی فضا-زمانی متعامد است که به نرخ ۱ دست می‌یابد. به بیان دیگر، این تنها کد بلوکی فضا-زمانی است که  بی‌نیاز از فدا کردن نرخ داده‌، به بهرۀ تنوع کامل دست یابد. البته این فقط برای سمبول‌های مدولاسیون مختلط صادق است. اما ازآنجاکه مدولاسیون QAM تقریباً در همه سیستمهای مخابراتی   به کار گرفته می‌شود، کد الموتی برتری قابل توجهی نسبت به کدهای بلوکی فضا-زمانی با مرتبۀ بیشتر پیدا می‌کند، حتی اگر آنها به عملکرد نرخ خطای بهتری دست یابند («محدودیت‌های نرخ» را ببینید).

اهمیت کد الموتی در این است که نخستین روش کدگذاری بود که امکان تنوع کامل را با پیچیدگی پردازش *خطی* در گیرنده فراهم می‌کند. نخستین طرح‌های تنوع ارسال، نیازمند پردازش‌هایی بودند که پیچیدگی‌شان به صورت *نمایی* با شمار آنتن‌های فرستنده افزایش می‌یافت. افزون بر این، کد الموتی نخستین طرح تنوع ارسال حلقه‌باز بود که چنین قابلیتی داشت. گسترش‌های بعدی کد الموتی، اثر شگرفی بر ارتباطات بی‌سیم گذاشتند.

### کدهای بلوکی فضا-زمانی با مرتبۀ بیشتر
تارخ و همکاران مجموعه‌ای از کدهای بلوکی فضا-زمانی را پیش نهادند که سرراست بودند و این کدها را چنین نام گذاشتند. آنها همچنین نشان دادند که برای بیش از دو آنتن در فرستنده، هیچ کدی نمی‌تواند به نرخ کامل دست یابد. از آن زمان به این سو، کدهای آنها بهبود یافته‌اند (از سوی خودشان و دیگران). با این حال، این کدها نمونه‌های روشنی هستند که چرا نرخ کد نمی‌تواند به ۱ برسد و چه مسائل دیگری باید در طراحی کدهای بلوکی فضا-زمانی خوب حل شوند. آنها همچنین کدگشایی خطی و ساده‌ای را با فرض در دست بودن اطلاعات کامل وضعیت کانال پیش نهادند.

#### سه آنتن در فرستنده
دو کد ساده برای حالت سه آنتن در فرستنده چنین هستند

: 
C_{3,1/2}=
\begin{bmatrix}
c_1 & c_2 & c_3\\
-c_2 &c_1& -c_4\\
-c_3&c_4&c_1\\
-c_4&-c_3&c_2\\
c_1^* & c_2^*&c_3^*\\
-c_2^* &c_1^*& -c_4^*\\
-c_3^*&c_4^*&c_1^*\\
-c_4^*&-c_3^*&c_2^*
\end{bmatrix}
\quad\text{and}\quad
C_{3,3/4}=
\begin{bmatrix}
c_1&c_2&\frac{c_3}{\sqrt 2}\\
-c_2^*&c_1^*&\frac{c_3}{\sqrt 2}\\
\frac{c_3^*}{\sqrt 2}&\frac{c_3^*}{\sqrt 2}&\frac{\left(-c_1-c_1^*+c_2-c_2*\right)}{2}\\
\frac{c_3^*}{\sqrt 2}&-\frac{c_3^*}{\sqrt 2}&\frac{\left(c_2+c_2^*+c_1-c_1^*\right)}{2}.
\end{bmatrix}


این کدها به ترتیب به نرخ ۱/۲ و ۳/۴ دست می‌یابند. این دو ماتریس نمونه‌هایی هستند از این که چرا کدهای مربوط به بیش از دو آنتن باید نرخ را فدا کنند &#x2014; این تنها راه برای دستیابی به تعامد است. یک مشکل خاص دربارۀ C_{3,3/4} این است که توان سمبول‌هایی که فرستاده می‌شوند، یکسان نیست؛ یعنی سیگنال فرستاده‌شده، پوش ثابتی ندارد و بنابراین توانی که هر آنتن می‌فرستد متغیر است، که هر دو نامطلوب هستند. از آن زمان، نسخه‌های اصلاح‌شده‌ای از این کد که بر این مشکل چیره می‌شوند، پیش نهاده شده‌اند.

#### چهار آنتن در فرستنده
دو کد ساده برای حالت چهار آنتن در فرستنده چنینند

: 
C_{4,1/2}=
\begin{bmatrix}
c_1 & c_2 & c_3&c_4\\
-c_2 &c_1&-c_4&c_3\\
-c_3&c_4&c_1&-c_2\\
-c_4&-c_3&c_2&c_1\\
c_1^* & c_2^*&c_3^*&c_4^*\\
-c_2^* &c_1^*&-c_4^*&c_3^*\\
-c_3^*&c_4^*&c_1^*&-c_2^*\\
-c_4^*&-c_3^*&c_2^*&c_1^*
\end{bmatrix}
\quad\text{and}\quad{}
C_{4,3/4}=
\begin{bmatrix}
c_1&c_2&\frac{c_3}{\sqrt 2}&\frac{c_3}{\sqrt 2}\\
-c_2^*&c_1^*&\frac{c_3}{\sqrt 2}&-\frac{c_3}{\sqrt 2}\\
\frac{c_3^*}{\sqrt 2}&\frac{c_3^*}{\sqrt 2}&\frac{\left(-c_1-c_1^*+c_2-c_2^*\right)}{2}&\frac{\left(-c_2-c_2^*+c_1-c_1^*\right)}{2}\\
\frac{c_3^*}{\sqrt 2}&-\frac{c_3^*}{\sqrt 2}&\frac{\left(c_2+c_2^*+c_1-c_1^*\right)}{2}&-\frac{\left(c_1+c_1^*+c_2-c_2^*\right)}{2}
\end{bmatrix}.


این کدها، همانند همتایان سه آنتنی‌شان، به ترتیب به نرخ ۱/۲ و ۳/۴ می‌رسند. کد C_{4,3/4} دارای همان مشکل توان نایکسان کد C_{3,3/4} است. نسخه بهبودیافتۀ کد C_{4,3/4} چنین‌ست

: 
C_{4,3/4}=
\begin{bmatrix}
c_1&c_2&c_3&0\\
-c_2^*&c_1^*&0&c_3\\
-c_3^*&0&c_1^*&-c_2\\
0&-c_3^*&c_2^*&c_1
\end{bmatrix},


که همه آنتن‌ها در همه بازه‌های زمانی، توان یکسانی می‌فرستند.

## کدگشایی
از ویژگی‌های جالب کدهای بلوکی فضا-زمانی متعامد این است که کدگشایی به روش درست‌نمایی بیشینه در گیرنده را می‌توان تنها با پردازش خطی انجام داد. برای بررسی کدگشایی، مدل سیستم ارتباطات بی‌سیم را چنین در نظر بگیریم.

در لحظۀ t، سیگنال دریافت‌شده از آنتن j را با r_t^j نشان میدهیم

: r_t^j = \sum_{i=1}^{n_T}\alpha_{ij}s_t^i + n_t^j,

که \alpha_{ij} بهره مسیر از آنتن فرستندۀ iام تا آنتن گیرندۀ jام است و s_t^i سیگنالی است که آنتن فرستنده iام می‌فرستد، و n_t^j نمونه‌ای از نویز سفید جمع‌شونده گاوسی (AWGN) است.

بر پایۀ معیار درست‌نمایی بیشینه، متغیرهای تصمیم‌گیری چنین می‌شوند

: R_i = \sum_{t=1}^{n_T}\sum_{j=1}^{n_R}r_t^j\alpha_{\epsilon_{t}(i)j}\delta_t(i)

که \delta_k(i) علامت s_i در ردیف kام ماتریس کدگذاری‌ست و \epsilon_k(p)=q نشان دهنده این است که s_p (تا یک اختلاف علامت) عنصر (k,q)ام ماتریس کدگذاری به ازای i=1,2,\ldots,n_T است. تصمیم‌گیری دربارۀ سمبول s_i چنین می‌شود

: s_i = \arg{}\min_{s\in\mathcal{A}}\left(\left|R_i - s\right|^2 + \left(-1 + \sum_{k,l}^{}\left|\alpha_{kl}\right|^2\right)\left|s\right|^2\right),

که \mathcal{A} الفبای صورت‌ فلکی است. این یک کدگشایی خطی و ساده است که بیشترین تنوع را فراهم می‌کند.

## محدودیت‌های نرخ کد
گذشته از اینکه برای بیش از دو آنتن در فرستنده، کد بلوکی فضا-زمانی متعامد، مختلط و با نرخ کامل نمی‌توان یافت، نشان داده شده‌است که برای بیش از دو آنتن، بیشترین نرخ کد ممکن، ¾ است. کدهایی طراحی شده‌اند که تا حد خوبی به این نرخ دست می‌یابند، اما طول بلوک آنها بسیار بزرگ است، که آنها را در عمل نامناسب می‌کند، زیرا کدگشایی نمی‌تواند تا وقتی که *همه* انتقال‌ها در یک بلوک دریافت نشده باشند، آغاز شود. بنابراین بلوک طولانی‌تر (T بزرگ‌تر)، به تأخیر کدگشایی بیشتر می‌انجامد. برای نمونه، کدی برای شانزده آنتن در فرستنده، دارای نرخ 9/16 و طول بلوک 22880 بازۀ زمانی است.

ثابت شده‌است که بیشترین نرخی که هر کد با n_T آنتن در فرستنده می‌تواند به آن برسد چنین است

: r_\max = \frac{n_0 + 1}{2n_0},

که n_T = 2n_0 یا n_T = 2n_0 - 1 اگر هیچ پردازش خطی در ماتریس کد مجاز نباشد. حدس زده می‌شود که این حد برای هر کد بلوکی فضا-زمانی متعامد مختلط، حتی وقتی که هرگونه پردازش خطی متغیرهای مختلط مجاز باشد، برقرار باشد.

## کدهای بلوکی فضا-زمانی شبه‌متعامد
این کدها متعامد کامل نیستند و تنها به مقداری از بهرۀ تنوع دست می‌یابند. نمونه‌ای از این کدها که جعفرخانی پیش نهاده است، چنین است

: C_{4,1} =
\begin{bmatrix}
c_1 & c_2 & c_3 & c_4\\
-c_2^* & c_1^* & -c_4^* & c_3^*\\
-c_3^* & -c_4^* & c_1^* & c_2^*\\
c_4 & -c_3 & -c_2 & c_1
\end{bmatrix}.


تنها ستون‌های (1 و 2)، (1 و 3)، (2 و 4) و (3 و 4) متعامد هستند. با این حال، این کد، کدی با نرخ کامل است و تنها به پردازش خطی در گیرنده نیاز دارد، اگرچه کدگشایی آن کمی پیچیده‌تر از کدهای بلوکی فضا-زمانی متعامد است. نتایج نشان می‌دهند که این کد، از نظر نرخ خطای بیتی در محدوده خوبی از نسبت‌ سیگنال به نویز، از کد بلوکی فضا-زمانی متعامد چهار آنتنی بهتر عمل می‌کند. با این حال، در SNRهای بیشتر (از حدود ۲۲ dB در این مورد خاص)، تنوع افزودۀ کدهای بلوکی فضا-زمانی متعامد به BER بهتری می‌انجامد.

## همچنین ببینید

* چندورودی و چندخروجی (MIMO)
* تنوع ارسال بر پایۀ کدگذاری بلوکی فضا-زمانی
* کد فضا-زمانی
* کد داربستی فضا-زمانی
* کد فضا-زمانی تفاضلی

## منابع

رده:بی‌سیم