目录
1. SVD(Singular Value Decomposition)非码本预编码
2. GMD(Generalized Maximal Ratio Combining)非码本预编码
3. DFT(Discrete Fourier Transform)码本预编码
4. TxAA(Transmit Antenna Array)码本预编码
一、理论基础
对比SVD和GMD非码本的预编码以及DFT和TxAA码本预编码的MIMO系统matlab误码率仿真。预编码(Precoding)是数字通信中的一种技术,用于在发送端对数据进行处理,以改善数据在信道中的传输性能。预编码技术通常用于多天线通信系统,如MIMO(多输入多输出)系统,以及一些特定的通信标准中。预编码的主要目标是通过调整信号的相位、幅度或时间来改善通信系统的性能,包括以下方面:
-
抗干扰性: 预编码可以减小信号在信道中的失真和干扰,从而提高抗干扰性。它可以减小多径干扰、多用户干扰以及噪声对接收信号的影响。
-
增强信号质量: 预编码可以增强信号的质量,包括信噪比(SNR)的提高,从而使接收端能够更容易地恢复原始数据。
-
频谱效率: 在一些系统中,预编码可以增加频谱效率,允许在有限的频带宽度内传输更多的数据。
-
降低误码率: 通过有效的预编码,可以降低误码率,提高通信系统的可靠性。
不同类型的预编码技术可以用于不同的通信场景和系统要求。
1. SVD(Singular Value Decomposition)非码本预编码
SVD预编码是一种基于奇异值分解的预编码技术。它将通信信道矩阵分解为三个矩阵的乘积,其中一个矩阵包含信道的奇异值,另外两个矩阵包含信道的左奇异向量和右奇异向量。SVD预编码可以最大程度地减小信道的干扰,从而提高通信性能。
2. GMD(Generalized Maximal Ratio Combining)非码本预编码
GMD预编码是一种通用的最大比例合并预编码技术。它利用了信道矩阵的广义逆,将数据符号乘以适当的权重,以实现最大化接收信号的信噪比。GMD预编码在多用户通信和多天线系统中都有应用。
3. DFT(Discrete Fourier Transform)码本预编码
DFT码本预编码是一种基于离散傅里叶变换的预编码技术。它利用了正交性质,在发送端将数据符号映射到傅里叶变换的频域上,然后乘以适当的权重进行预编码。DFT码本预编码在OFDM(正交频分复用)系统中得到广泛应用。
4. TxAA(Transmit Antenna Array)码本预编码
TxAA预编码是一种利用天线阵列进行的预编码技术。它通过调整天线阵列中各个天线的相位和振幅,以实现对信号的编码和增强,从而改善信道的性能。
这些预编码技术在多天线系统中起着关键作用,可以提高信号传输的可靠性和效率。不同的技术适用于不同的通信场景和系统要求。选择适当的预编码技术需要综合考虑信道特性、天线配置、系统复杂度和性能需求等因素。
二、核心程序
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
三、测试结果