⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sea_det.html

📁 sphere decoding for MIMO communication system
💻 HTML
📖 第 1 页 / 共 2 页
字号:
<html xmlns:mwsh="http://www.mathworks.com/namespace/mcode/v1/syntaxhighlight.dtd">
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
   
      <!--
This HTML is auto-generated from an M-file.
To make changes, update the M-file and republish this document.
      -->
      <title>SEA_det</title>
      <meta name="generator" content="MATLAB 7.0.1">
      <meta name="date" content="2006-08-30">
      <meta name="m-file" content="SEA_det_doc"><style>
body {
  background-color: white;
  margin:10px;
}
h1 {
  color: #990000; 
  font-size: x-large;
}
h2 {
  color: #990000;
  font-size: medium;
}
p.footer {
  text-align: right;
  font-size: xx-small;
  font-weight: lighter;
  font-style: italic;
  color: gray;
}

pre.codeinput {
  margin-left: 30px;
}

span.keyword {color: #0000FF}
span.comment {color: #228B22}
span.string {color: #A020F0}
span.untermstring {color: #B20000}
span.syscmd {color: #B28C00}

pre.showbuttons {
  margin-left: 30px;
  border: solid black 2px;
  padding: 4px;
  background: #EBEFF3;
}

pre.codeoutput {
  color: gray;
  font-style: italic;
}
pre.error {
  color: red;
}

/* Make the text shrink to fit narrow windows, but not stretch too far in 
wide windows.  On Gecko-based browsers, the shrink-to-fit doesn't work. */ 
p,h1,h2,div {
  /* for MATLAB's browser */
  width: 600px;
  /* for Mozilla, but the "width" tag overrides it anyway */
  max-width: 600px;
  /* for IE */
  width:expression(document.body.clientWidth > 620 ? "600px": "auto" );
}

    </style></head>
   <body>
      <h1>SEA_det</h1>
      <introduction>
         <p>A stack-based sequential depth-first decoder that returns Maximum-Likelihood solutions to M-QAM modulated MIMO system-type
            problems, i.e., a lattice decoder with optional justified rectangular boundary control.  In such problems, the depth of the
            search tree is known and the number of children per node is also fixed.
         </p>
         <p>Real or complex inputs are permitted.  The depth-first search is effected by applying the <b>Schnorr-Euchner (Adaptive radius)</b> enumeration to traverse the nodes of the tree.
         </p>
         <p>Please send comments and bug reports to <a href="mailto:karen.su@utoronto.ca">karen.su@utoronto.ca</a>.
         </p>
      </introduction>
      <h2>Contents</h2>
      <div>
         <ul>
            <li><a href="#1">Basic Operation</a></li>
            <li><a href="#2">Detailed Parameter Specification</a></li>
            <li><a href="#3">Usage Example</a></li>
            <li><a href="#4">References</a></li>
         </ul>
      </div>
      <h2>Basic Operation<a name="1"></a></h2>
      <p>The real-valued version of this stack-based sequential decoding algorithm is based on a decoding tree of <tt>m+1</tt> levels with each node having <tt>2*xMax</tt> children.  At each stage, the node under consideration is expanded if its weight is less than the squared distance to nearest
         currently known lattice point.  This distance threshold is initially set to infinity.
      </p>
      <p>Because it is a depth-first traversal, we expand a node by computing its first child.  If it is a leaf node, clearly it cannot
         be further expanded. In this case, we will have found a closer lattice point than that previously known. Therefore we can
         adaptively reduce the distance threshold to reflect this new discovery.
      </p>
      <p>If the weight of the node under consideration is larger than this distance threshold, then the current search path is terminated
         because it cannot possibly lead to a closest lattice point. Upon path termination, the next node to be considered is the next
         sibling of its parent.
      </p>
      <h2>Detailed Parameter Specification<a name="2"></a></h2>
      <p>If <tt>xMax == 0</tt>, we do not apply (rectangular, or any) boundary control. In other words, <tt>SEA_det</tt> behaves as a lattice decoder.
      </p>
      <p>For more sophisticated operation, <tt>xMax</tt> may also be a vector of length <tt>m</tt>. Then each node at the beginning of stage <tt>j</tt> in the tree, where the root node is at the beginning of stage <tt>m</tt> and the leaf nodes are found at the end of stage <tt>1</tt>, has <tt>2*xMax(j)</tt> children.  Equivalently, symbol <tt>xHat(j)</tt> is drawn from <tt>{-xMax(j)+1,..,-1,0,1,..,xMax(j)}</tt>.
      </p>
      <p>If <tt>cplx == 1</tt>, we consider a tree of <tt>2*m+1</tt> levels with each node still having <tt>2*xMax</tt> children. In addition, either <tt>xMax</tt> should be a complex-valued vector, or <tt>imag(xMax)</tt> will be taken to be equal to <tt>real(xMax)</tt>, i.e., a square QAM constellation will be assumed by default.
      </p>
      <p>If either lattice reduction assistance or MMSE pre-processing are desired, these operations should be applied in advance of
         calling <tt>SEA_det</tt>.
      </p>
      <p>Notes:</p>
      <p>- <tt>size(H,1)</tt> is expected to be equal to <tt>length(y)</tt>.
      </p>
      <p>- <tt>size(H,1)</tt> is expected to be greater than or equal to <tt>size(H,2)</tt>.
      </p>
      <p>- <tt>size(H,2)</tt> is expected to be equal to <tt>m</tt>.
      </p>
      <p>- <tt>length(xMax)</tt> is expected to be equal to either <tt>1</tt> or <tt>m</tt>.
      </p>
      <p>- The solution <tt>xHat</tt> is an integer vector; be sure to apply any necessary   scaling prior to calling <tt>SEA_det</tt> so that this solution is appropriate.
      </p>
      <h2>Usage Example<a name="3"></a></h2><pre class="codeinput">m    = 4;                            <span class="comment">% 4x4 MIMO system</span>
xMax = 2;                            <span class="comment">% 16-QAM modulation</span>
cplx = 1;
y    = 3*(randn(m,1)+i*randn(m,1));  <span class="comment">% generate random complex target vector</span>
H    = randn(m,m)+i*randn(m,m);      <span class="comment">% generate random complex channel</span>
[xHat,wHat,nv,nf,nl] = SEA_det(m,xMax,y,H,cplx);
xMaxV = [3 3 2 1];                   <span class="comment">% various square modulations</span>
[xHatV,wHatV,nvV,nfV,nlV] = SEA_det(m,xMaxV,y,H,cplx);

fprintf(<span class="string">'Solutions                    [xHat xHatV] = '</span>);
disp([xHat xHatV]);
fprintf(<span class="string">'Search distances             [wHat wHatV] = '</span>);
disp([wHat wHatV]);
fprintf(<span class="string">'# of expansions                  [nv nvV] = '</span>);
disp([nv nvV]);
fprintf(<span class="string">'# of flops (approx.)             [nf nfV] = '</span>);
disp([nf nfV]);
fprintf(<span class="string">'# of leafs visited               [nl nlV] = '</span>);
disp([nl nlV]);

wHatML  = Inf;
wHatMLV = Inf;
xMaxT   = max(xMax,xMaxV);
<span class="keyword">for</span> jj = -xMaxT(1)+1:xMaxT(1)
  <span class="keyword">for</span> kk = -xMaxT(2)+1:xMaxT(2)
    <span class="keyword">for</span> ll = -xMaxT(3)+1:xMaxT(3)
      <span class="keyword">for</span> mm = -xMaxT(4)+1:xMaxT(4)
        <span class="keyword">for</span> jjc = -xMaxT(1)+1:xMaxT(1)
          <span class="keyword">for</span> kkc = -xMaxT(2)+1:xMaxT(2)
            <span class="keyword">for</span> llc = -xMaxT(3)+1:xMaxT(3)
              <span class="keyword">for</span> mmc = -xMaxT(4)+1:xMaxT(4)
                xHatT = [jj+i*jjc;kk+i*kkc;ll+i*llc;mm+i*mmc];
                wHatT = norm(y-H*xHatT)^2;
                <span class="keyword">if</span> wHatT &lt; wHatMLV &amp; sum([real(xHatT);imag(xHatT)]&gt;=-repmat(xMaxV,1,2).'+1) == 8 &amp; sum([real(xHatT);imag(xHatT)]&lt;=repmat(xMaxV,1,2).') == 8
                  wHatMLV = wHatT;
                  xHatMLV = xHatT;
                <span class="keyword">end</span>
                <span class="keyword">if</span> wHatT &lt; wHatML &amp; sum([real(xHatT);imag(xHatT)]&gt;=-xMax+1) == 8 &amp; sum([real(xHatT);imag(xHatT)]&lt;=xMax) == 8
                  wHatML = wHatT;
                  xHatML = xHatT;
                <span class="keyword">end</span>
              <span class="keyword">end</span>
            <span class="keyword">end</span>
          <span class="keyword">end</span>
        <span class="keyword">end</span>
      <span class="keyword">end</span>
    <span class="keyword">end</span>
  <span class="keyword">end</span>
<span class="keyword">end</span>

fprintf(<span class="string">'Verify solutions         [xHatML xHatMLV] = '</span>);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -