m在VBLAST协作MIMO系统分部使用LDPC,Turbo,卷积三种信道编译码进行误码率matlab仿真

1.算法描述


从上面的结构可知,整个卷积编码的结构可由CRC校验,卷积编码,打孔组成,其中打孔的作用就是讲卷积编码后的码率变为所需要的码率进行发送。


这里,我们采用如下的数据帧方式进行:


首先,每次发送的数据长度为:221,进行CRC校验之后为253,然后通过卷积编码之后的长度为512,注意,这里对于213卷积编码,需要将编码前的数据自动加3个0进行补偿。


里,我们使用卷积编码的参数为213系统,编码码率为1/2,所以这里就不需要打孔了。


所以整个卷积编码的结构为校验,编码,译码,校验,四个部分构成。


参数指标:


2.仿真效果预览

matlab2013B仿真结果如下:


3.MATLAB部分代码预览

........................................................................

for kk = 1:length(EbNo)

disp('当前EbNo:');

EbNo(kk)


totalNumErr = 0;

count       = 0;

SNR         = 10^(EbNo(kk)/10);

N0          = 2*10^(-EbNo(kk)/10);

sigma       = 1/(sqrt(SNR)/2);   

ii          = 0;

Dsd         = 36;          %db数

Dsr         = 36;

Drd         = 36;

Qsd         = sqrt(10^(Dsd/10));

Qsr         = sqrt(10^(Dsr/10));

Qrd         = sqrt(10^(Drd/10));     

LL          = 2;


while (totalNumErr < Error_Num)

totalNumErr

%%

RandStream.setDefaultStream(RandStream('mt19937ar','seed',sum(count)));

%%

%发送端

%发送端

%产生数据

data       = round(rand(1,N-M));

%卷积213编码

u          = turbo_encode(data) ;

u          = [u 0 0];

%交织

u1         = interlace(u,16,16);

%BPSK

tx         = 2*u1 - 1;    


%%

%编码协作协议

%编码协作协议

%安论文中的卷积编码协作的结构框图进行设计

%首先对于 发送信息分为两路进行发送

Trans_N1    = tx;        

Trans_N2    = tx;

%ii=1的时候,发送自身的码字,而ii=2的时候发送协作的码字,从而达到时隙的效果

ii          = ii + 1;        


%将N1发送给目的地

%将N1发送给目的地

%作为发送信源

%进行AF中继

%信道增益

Hsd=Qsd*(randn);

Hsr=Qsr*(randn);

Hrd=Qrd*(randn);

%协作节点的放大增益

B=sqrt(1/(abs(Qsr)^2*1));

%===============================

%最大合并比加权因子计算(第i个支路的可变增益加权系数为该分集之路的信号幅度与噪声功率之比)

%计算增益

A0=conj(Hsd)/(1/(sqrt(LL)*EbNo(kk)));

A1=B*conj(Hsr)*conj(Hrd)/((B^2*(abs(Hsr))^2+1)*(1/(sqrt(LL)*EbNo(kk))));           

%接收

MIMO_Rx =  Trans_N1/max(abs(Trans_N1))+ 1/(sqrt(SNR))*randn(size(Trans_N1));

Ysr      = Hsr*MIMO_Rx;

Yrd      = Hrd*Ysr*B;

Ysd      = Hsd*MIMO_Rx;

Y        = A0*Ysd+A1*Yrd;

%接收到的二进制信号

MIMO_Rx1 = Y;    

Rec_data1= sign(MIMO_Rx1);


%将N1发送给用户2

%将N1发送给用户2              

%接收

MIMO_Rx2   = Trans_N1/max(max(Trans_N1))+ 1/(sqrt(SNR))*randn(size(Trans_N1));

Ysr        = Hsr*MIMO_Rx2;

Yrd        = Hrd*Ysr*B;

Ysd        = Hsd*MIMO_Rx2;

Y          = A0*Ysd+A1*Yrd;       

%接收到的二进制信号

MIMO_Rx12  = Y;   

Rec_data12 = sign(MIMO_Rx2);                     


%第二时隙,用户2向目的端发送用户1的第二帧信号,即用户2重新编码得到的关于U1分组的N2比特校验码字对应的调制信号

%在USER2中,将接收到的N1序列重新进行编码,然后将其中的序列N2发送给目的地

%译码+校验:

[Data_CRC2,LQs]         = turbo_decode(Rec_data12(1:end-2),zeros(N-M+3,1),Frame_Length);

%编码

Ldpc_trans_data_user2  = turbo_encode(Data_CRC2) ;

Ldpc_trans_data_user2  = [Ldpc_trans_data_user2 0 0];

Trans_N2_user2         = Ldpc_trans_data_user2;%N2序列

Trans_N2_user3         = 2*Trans_N2_user2-1;


%---------------------协作MIMO----------------------------------

Hsd=Qsd*(randn);

Hsr=Qsr*(randn);

Hrd=Qrd*(randn);

%协作节点的放大增益

B=sqrt(1/(abs(Qsr)^2*1));

%===============================

%最大合并比加权因子计算(第i个支路的可变增益加权系数为该分集之路的信号幅度与噪声功率之比)

%计算增益

A0=conj(Hsd)/(1/(sqrt(LL)*EbNo(kk)));

A1=B*conj(Hsr)*conj(Hrd)/((B^2*(abs(Hsr))^2+1)*(1/(sqrt(LL)*EbNo(kk))));           

%接收

MIMO_Rx =  Trans_N2/max(abs(Trans_N2))+ 1/(sqrt(SNR))*randn(size(Trans_N2));

Ysr      = Hsr*MIMO_Rx;

Yrd      = Hrd*Ysr*B;

Ysd      = Hsd*MIMO_Rx;

Y        = A0*Ysd+A1*Yrd;

%接收到的二进制信号

MIMO_Rx2 = Y;

Rec_data2= sign(MIMO_Rx2);   

YY1 = [MIMO_Rx12,MIMO_Rx2]';               

YY2 = [Rec_data12]';        

Tx  = reshape(YY2 - sqrt(-1)*YY2,Nt, Frame_Length/Nt);    

RayleighMat = (rand(Nr, Nt) + j*rand(Nr, Nt));   

rr          = size(RayleighMat*Tx,1);

cc          = size(RayleighMat*Tx,2);

r           = RayleighMat*Tx;  

Hs          = RayleighMat;                                    

HQ          = Hs*Q;         




%%

%下面开始联合迭代

%下面开始联合迭代

rr = r;     

%初始半径,这里将搜索的范围变大,就是将系数alpha定为12.

RR =(12*Nt)*(2/(10^(SNR/10)));                                   


%按英文论文所示转变为实信号

rev1=[real(rr);imag(rr)];  

H1  = RayleighMat;

%按英文论文所示信道转变为实矩阵

HH=[real(H1(:,:)) -imag(H1(:,:));

imag(H1(:,:))  real(H1(:,:))];              


LA  = zeros(1,Frame_Length/2);

LDs = 0;

LD  = zeros(1,Frame_Length/2);

LE  = zeros(1,Frame_Length/2);


for Nout = 1:OUT_Iter

if Nout == 1

LA = zeros(1,Frame_Length/2);

else

LA = LA2;

end

%球形map

for J=1:Frame_Length/2                                            

rev          = rev1(:,J);                

%先计算|r-g*Si|^2

[y_norm,LDs] = func_FP_MAP(rev,RR,HH,[-1,1],SNR);

for jj=1:Nt

y_2norm(Nt*J+jj-Nt)=y_norm(jj)+j*y_norm(jj+Nt);                  

end

%每一个比特的后验似然比信息为

LD(J) = LDs;

end   

%外部迭代主要计算

LE = LD - LA;

%解交织

LE_itrlac_code = de_interlace(LE,16,16); %用于LDPC译码节点更新

DM_msg  = reshape(real(y_2norm),log2(P),Nt*Frame_Length/2);

for ii2 = 1:length(DM_msg)

if DM_msg(ii2)~=0

DM_msg2(ii2) = abs(DM_msg(ii2)+1)/2;

else

DM_msg2(ii2) = 0;

end

end       

DM_msg3 = de_interlace(DM_msg,16,16); %用于LDPC译码节点更新

%内部迭代卷积里面

[z_hat,LQ] = turbo_decode(DM_msg3(1:end-2),LE_itrlac_code',Frame_Length);

x_hat      = z_hat;

%交织

tmp = LQ(1:length(LE_itrlac_code)) - LE_itrlac_code;

%交织

LA2 = interlace(tmp,16,16);             

end

%===========================================================================

count       = count + 1;

totalNumErr = totalNumErr + biterr(round(x_hat), data);

end

BERs(kk) = totalNumErr/(count*Frame_Length);

end

01_054_m

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容