您现在的位置:首页 >> 技术文章 >> MATLAB技术 >> 内容

MATLAB代做|FPGA代做|python代做- 卷积编码

时间:2019-10-15 22:46:10 点击:

  核心提示:MATLAB代做|FPGA代做|python代做- 卷积编码...
function [ output ] = Encoder( input )
%对输入的数据做编码

%参数:Nes

global parameters;
Nbpsc=parameters.Nbpsc;
Ncol=parameters.Ncol;
Nrot=parameters.Nrot;
Nss=parameters.Nss;
Ncbpss=parameters.Ncbpss;
Nes=parameters.Nes;
R=parameters.R;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%将数据序列进行编码分流
Encoder_Sparser_out=Encoder_Sparser(input,Nes);
%将编码分流后的数据作卷积编码
%BCC_out=BCC(Encoder_Sparser_out,R,Nes);
%将卷及编码后的数据分流
Stream_Parser_out=Stream_Parser(Encoder_Sparser_out,Nss,Nbpsc,Nes);
%将数据流做比特交织
Interleaver_out=Interleaver(Stream_Parser_out,Nbpsc,Ncol,Nrot,Nss,Ncbpss);
%输出数据
output=Interleaver_out; 

end


%%%%%%%%

function [ output ] = Encoder_Sparser(input,Nes)
%对数据进行编码分流
switch Nes
    case 1
        %Nes为1,不进行编码分流
        output=input;
        
    case 2
        %Nes为2,将数据分为两个流
        %将输入数据分流
        output=reshape(input,2,length(input)/2);
end

end

%%%%%%%%

function [ output ] = BCC( input,R,Nes )
%BCC编码

%预分配寄存器reg存储空间
%reg=zeros(Nes,7);
%实现移位寄存
%tem=[zeros(Nes,6),input,zeros(Nes,6)];

%n2=size(input);
%for i=1:n2(2)+6
%    reg=tem(:,i:i+6);
%    signal_tem(:,2*(i-1)+1)= mod(reg(:,1)+reg(:,2)+reg(:,4)+reg(:,5)+reg(:,7),2);
%    signal_tem(:,2*(i-1)+2)= mod(reg(:,1)+reg(:,4)+reg(:,5)+reg(:,6)+reg(:,7),2);
%end
trel = poly2trellis(7,[133,171]); 
signal_tem1 = convenc(input(1,:),trel); 
signal_tem2 = convenc(input(2,:),trel); 
signal_tem=[signal_tem1;signal_tem2];


switch R
    case 1/2
        output=signal_tem;
        
    case 2/3
        n3=size(signal_tem);
        k=ceil(n3(2)/4);
        %当数据不能被4整除时填充0bit
        m=mod(n3(2),4);
        if(m>0)
           signal_tem=[signal_tem,zeros(Nes,4-m)];
       end
        a=signal_tem.';
        a=reshape(a,4,k*Nes);
        %对矩阵a凿孔
        b=a;
        b(4,:)=[];
        %得到编码速率2/3的卷积码
        output=reshape(b,3*k,Nes);
        output=output.';
        
    case 3/4
        n3=size(signal_tem);
        k=ceil(n3(2)/6);
        %当数据不能被6整除时填充0bit
        m=mod(n3(2),6);
        if(m>0)
           signal_tem=[signal_tem,zeros(Nes,6-m)];
       end
        a=signal_tem.';
        a=reshape(a,6,k*Nes);
        %对矩阵a凿孔
        b=a;
        b(5,:)=[];
        b(4,:)=[];
        %得到编码速率3/4的卷积码
        output=reshape(b,4*k,Nes);
        output=output.';
        
    case 5/6
        n3=size(signal_tem);
        k=ceil(n3(2)/10);
        %当数据不能被10整除时填充0bit
        m=mod(n3(2),10);
        if(m>0)
           signal_tem=[signal_tem,zeros(Nes,10-m)];
       end
        a=signal_tem.';
        a=reshape(a,10,k*Nes);
        %对矩阵a凿孔
        b=a;
        b(9,:)=[];
        b(8,:)=[];
        b(5,:)=[];
        b(4,:)=[];
        %得到编码速率5/6的卷积码
        output=reshape(b,6*k,Nes);
        output=output.';
        
end

end

%%%%%%%%%

function [ output ] = Stream_Parser( input,Nss,Nbpsc,Nes )
%将数据分流输出


sii=max(1,Nbpsc/2);
S=Nss*sii;
if (Nes==2)
    %编码流为2个
    Es_length=length(input);
    Ss_length=2*ceil(Es_length/S);
    Es1=zeros(1,S*ceil(Es_length/S));
    Es2=zeros(1,S*ceil(Es_length/S));
    Es1(1:Es_length)=input(1,:);
    Es2(1:Es_length)=input(2,:);
    Ss_matrix=zeros(S,Ss_length);
    Ss_matrix(:,1:2:Ss_length)=reshape(Es1,S,Ss_length/2);
    Ss_matrix(:,2:2:Ss_length)=reshape(Es2,S,Ss_length/2);
else
    Es_length=length(input);
    Ss_length=ceil(Es_length/S);
    Es=zeros(1,S*ceil(Es_length/S));
    Es(1:Es_length)=input(:);
    Ss_matrix=zeros(S,Ss_length);
    Ss_matrix=reshape(Es,S,Ss_length);
end

Ss1=reshape(Ss_matrix(1:sii,:),1,sii*length(Ss_matrix));
Ss2=reshape(Ss_matrix(sii+1:2*sii,:),1,sii*length(Ss_matrix));
Ss3=reshape(Ss_matrix(2*sii+1:3*sii,:),1,sii*length(Ss_matrix));
Ss4=reshape(Ss_matrix(3*sii+1:4*sii,:),1,sii*length(Ss_matrix));
output=[Ss1;Ss2;Ss3;Ss4];

end

%%%%%%%%%

function [ output ] = Interleaver( input,Nbpsc,Ncol,Nrot,Nss,Ncbpss )
%将输入数据做bit交织


   s=max(Nbpsc/2,1);
   
   %计算每个输入向量长度
   number=size(input);
   %计算共有多少个ofdm符号
   symbolnumber=ceil(number(2)/Ncbpss);
   
   
   %定义数据矩阵
   inputdata=zeros( Nss,symbolnumber*Ncbpss);
   inputdata(:,1:number(2))=input;
   inputdata=reshape(inputdata.',Ncbpss,Nss*symbolnumber);
   %定义输出数据矩阵
   outdata=zeros( Ncbpss,Nss*symbolnumber);
   permutation1=zeros( Ncbpss,Nss*symbolnumber);
   permutation2=zeros( Ncbpss,Nss*symbolnumber);
   
   k=0:(Ncbpss-1);
   i=Nbpsc*6*mod(k,Ncol)+floor(k/Ncol); 
   permutation1(i+1,:)=inputdata(k+1,:) ;
   
   i=0:(Ncbpss-1);
   j=s*floor(i/s)+mod((i+Ncbpss-floor(Ncol*i/Ncbpss)),s);
   permutation2(j+1,:)=permutation1(i+1,:);
   
   if(Nss>1)
       for iss=2:Nss
           j=0:(Ncbpss-1);
           r=mod((j-(mod(((iss-1)*2),3)+3*floor((iss-1)/3))*Nrot*Nbpsc),Ncbpss);
           outdata(r+1,((iss-1)*symbolnumber+1):iss*symbolnumber)=permutation2(j+1,((iss-1)*symbolnumber+1):iss*symbolnumber);
       end
       outdata(:,1:symbolnumber)=permutation2(:,1:symbolnumber);
   else
       outdata=permutation2;
   end
   
    
       outdata=reshape(outdata,Ncbpss*symbolnumber,Nss);
       output=outdata.';
end     

联系:highspeedlogic

QQ :1224848052

微信:HuangL1121

邮箱:1224848052@qq.com

网站:http://www.mat7lab.com/

网站:http://www.hslogic.com/

微信扫一扫:

    

作者:卷积编码 来源:卷积编码
  • 您是如何找到本站的?
  • 百度搜索
  • Google搜索
  • 查阅资料过程中
  • 论坛发现
  • 百度贴吧发现
  • 朋友介绍
本站最新成功开发工程项目案例
相关评论
发表我的评论
  • 大名:
  • 内容:
  • matlab代做|matlab专业代做|matlab淘宝代做(www.hslogic.com) © 2019 版权所有 All Rights Reserved.
  • Email:highspeed_logic@163.com 站长QQ: 1224848052

    专业代做/代写/承接、MATLAB、SIMULINK、FPGA项目、博士/硕士/本科毕业设计、课题设计、论文,毕业论文,Coursework、Eassy、Assignment