⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 convo.asv

📁 卷积编译码的matlab仿真
💻 ASV
字号:
 %  卷积编码  函数名convo
%输入参量:  编码速率rate2,信号 signal1,输出量:信号signal2
%速率可以为1/2(signal中卷积采用的是1/2卷积编码),3/4,2/3
%利用的是凿空原理,输入信号为k个,经过n/m编码后,数据应为k*m/n,可以变换为2k*m/(2*n)
function [signal2]=convo(signal1,rate2)
   %预分配寄存器reg存储空间  

  reg=zeros(1,7);
  tem=[zeros(1,6),signal1];
  %实现移位寄存(7位)
  n2=size(signal1);
  for i=1:n2(2)
     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);
     
     
     % signal_tem
  end

  switch rate2
  case 1/2        %输出为2k个数据
     signal2=signal_tem;
     
  case 3/4   %2k/(2*n)*m  2*3=6变成六行的矩阵,然后删除第四五行
     n3=size(signal_tem);
     k=floor(n3(2)/6);
    %当source data 不能被循环周期6整除时,剩余bit数
    m1=mod(n3(2),6);
    %变成6*k矩阵
    a=reshape(signal_tem(1:6*k),6,k);
    %对矩阵a凿孔 puncture
    b=a;
    %去除b矩阵的第四,五行
    b(4:5,:)=[];
    c=reshape(b,1,4*k);
    %判断剩余bit数是否包含stolen bit
     if m1>=4        
        d=signal_tem(end-m1+1:end-m1+4)   %只增加4个数据
     else
        d=signal_tem(end-m1+1:end)
     end
     %得到 编码速率3/4的卷积码
        signal2=[c,d];  
  case 2/3        %2*2=4 变成四行矩阵,然后删除第四行
     n3=size(signal_tem);
     k=floor(n3(2)/4);
    %当source data 不能被循环周期6整除时,剩余bit数
    m1=mod(n3(2),4);
    a=reshape(signal_tem(1:4*k),4,k);
    %对矩阵a凿孔 puncture
    b=a;
    b(4,:)=[];
    c=reshape(b,1,3*k);
    %判断剩余bit数是否包含stolen bit
     if m1>=3
      d=signal_tem(end-m1+1:end-m1+3);   %只增加3个数据
     else   
        d=signal_tem(end-m1+1:end);
     end
     
      %得到 编码速率2/3的卷积码
      signal2=[c,d];  

   end
     

      
     
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -