1.软件版本

MATLAB2013b

2.本算法理论知识

做非规则LDPC码的以编码协作形式的中继协议,比较以下三种情况下的误码率图和中断概率图:

源节点一个(配置一根天线),中继节点4个(每个节点配置一根天线),目的节点一个(节点配置一根天线)(1:4:1)

源节点2个,中继节点4个,目的节点1个(2:4:1)

源节点1个,中继节点4个,目的节点2个(1:4:2)

【协作MIMO+非规则LDPC】协作MIMO系统上,中继协作解码转发策略和编码协作策略,采用非规则LDPC编码_奇异值分解

 

       以非规则LDPC编码,在协作MIMO系统中,中继节点以放大转发协议处理信号,在中继接收源端信号与转发到目的节点时,这两过程中加上波束成形技术,与没有加上波束成形技术的系统比较,做出误码率曲线图(2个源节点,4个中继节点,2个目的节点)(波束成形算法使用SVD方法,即对信道矩阵进行奇异值分解)

未进行波束成形的系统结构:

【协作MIMO+非规则LDPC】协作MIMO系统上,中继协作解码转发策略和编码协作策略,采用非规则LDPC编码_协作MIMO_02

 

进行波束成形的系统结构:

【协作MIMO+非规则LDPC】协作MIMO系统上,中继协作解码转发策略和编码协作策略,采用非规则LDPC编码_非规则LDPC_03

即,在发送源的2天线和4中继节点以及4中继节点和2接收天线的两个位置加入波束成形技术。这里,并对原来的无波束成形的代码的中继做了改进。

 3.部分核心代码


clc;
clear all;
close all;
warning off;
tic
%注意:* 部分,当仿真时间过长,可以将值减少!
reset(RandStream.getDefaultStream,1);%非随机化
addpath(genpath('Function_Irregular_LDPC')); %加载函数路径,规则LDPC子函数模块均放在该文件夹下面

Times = 200000;%%统计无码数*
EbN0 = 0.5:0.5:2;%*
Ta_num = 2;%发送天线数目
Ra_num = 2;%接收天线数目

data_Numbers = 256;%仿真序列帧长度
Pt = 144;%信号发送功率
R = 0.5;%码率
k1 = [1 0.67 0.99 0.71];%发送端发送天线与协作天线之间的端距离衰减简化模型
k2 = [1 0.757 0.57 0.85];%信道衰减衰减简化模型
k3 = [1 0.54 0.45 0.75];%设定每个中继节点的损耗
Naf = 4;
%LDPC参数
N = 2*data_Numbers;%设置奇偶校验矩阵大小
M = N*R;
max_iter = 100; %最大迭代次数

load H;%H=getH(M,N)
load G;%G=getG(M,N);

figure;
imshow(H,[]);title('奇偶校验均值H直观图');


for i=1:length(EbN0)

% N0 = sqrt(1./(2*10^(EbN0(i)/10)*R));

N0 = 2*10^(-EbN0(i)/10);

Bit_err(i) = 0;
Num_err = 0;
Numbers = 0; %误码率累加器


Dsd=5; %db数
Dsr=4;
Drd=1;
Qsd=sqrt(10^(Dsd/10));
Qsr=sqrt(10^(Dsr/10));
Qrd=sqrt(10^(Drd/10));

while Num_err <= Times
Num_err
fprintf('Eb/N0 = %f\n', EbN0(i));
%产生需要发送的随机数
Trans_data = round(rand(1,N-M));

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%LDPC编码
u = mod(Trans_data*G,2); %LDPC编码
%LDPC编码
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%BPSK
Trans_BPSK = 2*u-1;
%---------------------协作MIMO----------------------------------
%作为发送信源
MIMO_Tx(1,:) = sqrt(Pt)*Trans_BPSK;
%将源信号发送其他几个协作天线上,
for send_loop = 2:Ta_num
MIMO_Tx(send_loop,:) = k1(send_loop)*MIMO_Tx(1,:);
end

%MIMO信道,期间考虑到路径损耗问题。
H_Ray = randn(Ra_num,Ta_num);
for r = 1:Ra_num
for s = 1:Ta_num
H_Ray(s,r) = k2(send_loop)*H_Ray(s,r);
end
end

%发送源到中继节点之间的波束成形,利用对信道矩阵的奇异值分解得到
%对矩阵进行奇异值分解
[S V D] = svd(H_Ray);
H_Ray = V;%通过奇异值分别后的信道矩阵
x = [];
HH = H_Ray;
r = N0;
w = inv(HH'*HH+(1/EbN0(i))*eye(Ta_num))*HH';
y = w*r;
xtemp = (y>=0)-(y<0)+0;
x = [x,xtemp];
a = (x+1)/2;


%进行AF中继
%信道增益
Hsd=Qsd*(randn);
Hsr=Qsr*(randn);
Hrd=Qrd*(randn);
%协作节点的放大增益
B=sqrt(1/(abs(Qsr)^2*1));
%===============================
%最大合并比加权因子计算(第i个支路的可变增益加权系数为该分集之路的信号幅度与噪声功率之比)
%计算增益
A0=conj(Hsd)/(1/EbN0(i));
A1=B*conj(Hsr)*conj(Hrd)/((B^2*(abs(Hsr))^2+1)*(1/EbN0(i)));
%接收
MIMO_Rx = MIMO_Tx/max(max(MIMO_Tx))+ sqrt(N0/2)*randn(size(MIMO_Tx));
Ysr = Hsr*MIMO_Rx;
Yrd = Hrd*Ysr*B;
Ysd = Hsd*MIMO_Rx;
Y = A0*Ysd+A1*Yrd;
Y = k3(1)*Y;
Ysum(1,:,:) = Y;

for ii = 2:Naf
%进行AF中继
%信道增益
Hsd=Qsd*(randn);
Hsr=Qsr*(randn);
Hrd=Qrd*(randn);
%协作节点的放大增益
B=sqrt(1/(abs(Qsr)^2*1));
%===============================
%最大合并比加权因子计算(第i个支路的可变增益加权系数为该分集之路的信号幅度与噪声功率之比)
%计算增益
A0=conj(Hsd)/(1/EbN0(i));
A1=B*conj(Hsr)*conj(Hrd)/((B^2*(abs(Hsr))^2+1)*(1/EbN0(i)));
%接收
MIMO_Rx = MIMO_Tx/max(max(MIMO_Tx))+ sqrt(N0/2)*randn(size(MIMO_Tx));
Ysr = Hsr*MIMO_Rx;
Yrd = Hrd*Ysr*B;
Ysd = Hsd*MIMO_Rx;
Y = A0*Ysd+A1*Yrd;
Y = k3(ii)*Y;
for ir = 1:size(Y,1)
for jr = 1:size(Y,2)
Ysum(ii,ir,jr) = Ysum(ii-1,ir,jr) + Y(ir,jr);
end
end
end
Y2(:,:) = Ysum(4,:,:);


%接收端的奇异值分解
if a(1,1) == a(2,2) & a(1,2) == a(2,1)%如果是非对称信道矩阵,则进行分解,否则不分解
a2 = a;
else
%通过奇异值分别后的信道矩阵
[Sa Va Da] = svd(a);%SVD
x = [];
HH = Va;
r = N0;
w = inv(HH'*HH+(1/EbN0(i))*eye(Ta_num))*HH'; %MMSE
y = w*r;
xtemp = (y>=0)-(y<0)+0;
x = [x,xtemp];
a2 = (x+1)/2;

end
MIMO_Rxs = a2*Y2;
MIMO_Rx2 = k3(1:Ta_num)*MIMO_Rxs(:,:);
Rec_data = sign(MIMO_Rx2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%LDPC译码
z_hat = func_Dec(Rec_data,N0,H,max_iter);

x_hat = z_hat(size(G,2)+1-size(G,1):size(G,2));
%LDPC译码
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if sum(Rec_data) == 0
nberr = 0;
disp('not count');
else
[nberr,rat] = biterr(Trans_data,x_hat')
end


Num_err = Num_err+nberr;
Numbers = Numbers+1;
end
Bit_err(i)=Num_err/(N*Numbers);
end

figure;
semilogy(EbN0,Bit_err,'o-r');
xlabel('Eb/N0(dB)');
ylabel('BER');
legend('r=1/2,L=512');
grid on;
save data1.mat EbN0 Bit_err
toc

4.操作步骤与仿真结论

【协作MIMO+非规则LDPC】协作MIMO系统上,中继协作解码转发策略和编码协作策略,采用非规则LDPC编码_非规则LDPC_04

【协作MIMO+非规则LDPC】协作MIMO系统上,中继协作解码转发策略和编码协作策略,采用非规则LDPC编码_中继协作_05

【协作MIMO+非规则LDPC】协作MIMO系统上,中继协作解码转发策略和编码协作策略,采用非规则LDPC编码_中继协作_06

【协作MIMO+非规则LDPC】协作MIMO系统上,中继协作解码转发策略和编码协作策略,采用非规则LDPC编码_误码率_07

【协作MIMO+非规则LDPC】协作MIMO系统上,中继协作解码转发策略和编码协作策略,采用非规则LDPC编码_误码率_08

【协作MIMO+非规则LDPC】协作MIMO系统上,中继协作解码转发策略和编码协作策略,采用非规则LDPC编码_协作MIMO_09

5.参考文献

【协作MIMO+非规则LDPC】协作MIMO系统上,中继协作解码转发策略和编码协作策略,采用非规则LDPC编码_协作MIMO_10

 A01-38