📄 convo.m
字号:
% 卷积编码 函数名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);
end
% signal_tem
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 + -