【polar】协作polar码和非协作polar码的误码率性能matlab仿真

1.软件版本

matlab2017b

2.本算法理论知识

《基于Polar码的协作编码和分集技术研究》

3.部分源码

clc;
clear all;
close all;
warning off;
addpath 'functions\'

%数据块大小
SNR        = [1,2,3,4,4.5];  
rate1      = 0.54;
rate2      = 0.45;

n          = 8;
N          = 2^n;  
[Vals,Inds]= func_rates(n,0.5);

for i=1:length(SNR)

    %设置误码率参数
    Bit_err(i)    = 0; 
    Num_err       = 0; 
    %误码率累加器
    Numbers       = 0; 
    K1            = round(rate1*N);
    K2            = round(rate2*N);    
    
    frozen_pos1   = Inds(1:N-K1);
    free_pos1     = sort(Inds(N-K1+1:N),'ascend');
    
    frozen_pos2   = Inds(1:N-K2);
    free_pos2     = sort(Inds(N-K2+1:N),'ascend');   
 
    
    z1             = ones(N,1);
    z1(frozen_pos1)= 0;
    z2             = ones(N,1);
    z2(frozen_pos2)= 0;    
    
    sigma         = 1/sqrt(10^(SNR(i)/10));
    
    while Num_err <= 50000  
          fprintf('SNR = %f\n', SNR(i));
          Num_err
          data_in1     = randsrc(K1,1,[0 1]);
          u            = zeros(N,1);
          u(free_pos1) = data_in1; 
          x            = func_encode(u);
          Trans_BPSK   = 2*x-1;
          %S->D 
          %S->D 
          Rec_sd_1               = Trans_BPSK + sigma*randn(N,1);
          Rec_sd                 = Rec_sd_1;
          
          %S->R
          %S->R
          Rec_sr_1               = Trans_BPSK + sigma*randn(N,1);
          Rec_sr                 = Rec_sr_1;
          %中继点的判决
          %先译码
          y1                     = Rec_sr;
          L1                     = exp(-2*y1); 
          v1                     = func_SCdecoder(L1,z1);
          data_out1              = v1(free_pos1);
          
          
          
          u2                     = zeros(N,1);
          u2(free_pos2)          = data_out1(1:K2)'; 
          
          
          x2                     = func_encode(u2);
          Trans_BPSK2            = 2*x2-1;   
          Rec_rd_1               = Trans_BPSK2 + sigma*randn(N,1);
          Rec_rd                 = Rec_rd_1;
          
          %接收端
          y2                     = Rec_sd;
          L2                     = exp(-2*y2); 
          v2                     = func_SCdecoder(L2,z2);
          data_out2              = v2(free_pos2);
          
          
          y3                     = Rec_rd;
          L3                     = exp(-2*y3);           
          v3                     = func_SCdecoder(L3,z2);
          data_out3              = v3(free_pos2);

          nberr1      = length(find(data_out2~=data_in1(1:K2)'));
          nberr2      = length(find(data_out3~=data_in1(1:K2)'));
          
          Num_err     = Num_err+min(nberr1,nberr2);
          Numbers     = Numbers+1;
    end
    Bit_err(i) = Num_err/(length(data_in1)*Numbers);
end


save R3.mat SNR Bit_err

4.仿真结论

 

5.参考文献

[1]陆婷婷. 极化码的编解码研究及仿真[D]. 南京理工大学, 2013.A14-27

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值