分别对比SVD和GMD非码本的预编码以及DFT和TxAA码本预编码的MIMO系统matlab误码率仿真
Posted fpga和matlab
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分别对比SVD和GMD非码本的预编码以及DFT和TxAA码本预编码的MIMO系统matlab误码率仿真相关的知识,希望对你有一定的参考价值。
up目录
一、理论基础
对比SVD和GMD非码本的预编码以及DFT和TxAA码本预编码的MIMO系统matlab误码率仿真
二、核心程序
function VV = func_GMD(h);
%GMD分解,按论文27页开始
%第一步:进行奇异值分解
[u0 s0 v0] = svd(h);
[m,n] = size(s0);
R = zeros(m, n) ;
P = v0;
Q = u0;
d = diag(s0);
l = min(m, n);
VV = zeros(m, n);
for p = l : -1 : 1
if ( d (p) >= 0.01 )
break ;
end
end
if ( p < 1 )
return ;
end
if ( p < 2 )
R (1, 1) = d (1) ;
return ;
end
z = zeros (p-1, 1) ;
large = 2 ;
small = p ;
perm = [1 : p] ;
invperm = [ 1 : p ] ;
sigma_bar = (prod (d (1:p)))^(1/p) ;
%第二步
for k = 1 : p-1
flag = 0 ;
if ( d (k) >= sigma_bar )
i = perm (small) ;
small = small - 1 ;
if ( d (i) >= sigma_bar )
flag = 1 ;
end
else
i = perm (large) ;
large = large + 1 ;
if ( d (i) <= sigma_bar )
flag = 1 ;
end
end
k1 = k + 1 ;
if ( i ~= k1 )
t = d (k1) ;
d (k1) = d (i) ;
d (i) = t ;
j = invperm (k1) ;
perm (j) = i ;
invperm (i) = j ;
I = [ k1 i ] ;
J = [ i k1 ] ;
Q (:, I) = Q (:, J) ;
P (:, I) = P (:, J) ;
end
delta1 = d (k) ;
delta2 = d (k1) ;
t = delta1 + delta2 ;
if ( flag )
c = 1 ;
s = 0 ;
else
f = (delta1 - sigma_bar)/(delta1 - delta2) ;
s = sqrt (f*(delta1+sigma_bar)/t) ;
c = sqrt(1-s^2) ;
end
d (k1) = delta1*delta2/sigma_bar ;
z (k) = s*c*(delta2 - delta1)*t/sigma_bar ;
R (k, k) = sigma_bar ;
if ( k > 1 )
R (1:k-1, k) = z (1:k-1)*c ;
z (1:k-1) = -z (1:k-1)*s ;
end
%第三步
G1 = [ c -s
s c ] ;
J = [ k k1 ] ;
P (:, J) = P (:, J)*G1 ;
G2 = (1/sigma_bar)*[ c*delta1 -s*delta2
s*delta2 c*delta1 ] ;
Q (:, J) = Q (:, J)*G2 ;
end
%第四步
R (p, p) = sigma_bar ;
R (1:p-1, p) = z ;
VV = Q.*R.*P';
up55
三、测试结果
以上是关于分别对比SVD和GMD非码本的预编码以及DFT和TxAA码本预编码的MIMO系统matlab误码率仿真的主要内容,如果未能解决你的问题,请参考以下文章
svd,BD,ZF,SLNR,MMSE线性预编码性能对比MATLAB仿真