使用matlab自带的卷积码编解码函数实现咬尾卷积码

卷积码的原理这里就不说了,这里只是一个小的演示程序。主要解决的问题是如何使用matlab自带的卷积码编译码函数实现咬尾卷积码的编码,打孔以及译码。

%编码器输入48比特
signal = randi([0 1],1,48);
fprintf('信号长度%d\n',length(signal));
%1/2咬尾卷积码:先输入尾部的码6比特,再输入正常码48
c = [signal(end-(constLen-2):end), signal];
fprintf('补充尾部后信号长度%d\n',length(c));


%打孔器设计
%信号的长度必须是打孔向量长度的整数倍
%打孔长度本来为24*4 = 96比特,但是由于信号多输入了6比特,会多产生12比特,所以打孔向量的长度为96+12=108
%这12比特需要被被完全打掉
p = [1 1 ;1 0];
p =reshape(p,1,4);
for i = 1:23
    p = [p,1 1 1 0];
end
%前面补0是为了打孔时,将前面的尾部生成的比特打掉(尾部本来是应该放在初始状态中的)
p = [zeros(1,12),p];
fprintf('打孔器的长度为 %d\n',length(p))


% 卷积编码
C = convenc(c, convCode,p);
fprintf('卷积编码输出长度为 %d\n',length(C))


%解码部分
tbLen = length(C)/rateInv;
%为了能在译码时获得咬尾卷积码的初始状态,把接收到的码子拷贝两份译码,第一份译码完毕以后,编码器的状态就与咬尾卷积码的起始状态相同了
C = [C,C];
fprintf('双份比特的长度为%d\n',length(C))%144

%相应的,解
  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要在MATLAB中进行卷积码编解码,你可以使用Communications Toolbox。该工具箱提供了一些函数实现卷积码编解码的功能。下面是一个简单的示例: 1. 卷积码编码 首先,您需要创建一个卷积编码器对象。您可以使用`comm.ConvolutionalEncoder`函数来创建编码器对象,并设置适当的参数。例如,使用`poly2trellis`函数来定义您想要使用卷积码多项式,并将其传递给`comm.ConvolutionalEncoder`函数来创建编码器对象。 ```matlab % 定义卷积码多项式 rate = 1/2; % 码率 constraintLength = 7; % 约束长度 codeGenerator = [171 133]; % 多项式系数 % 创建卷积编码器对象 encoder = comm.ConvolutionalEncoder('TerminationMethod', 'Terminated', 'TrellisStructure', poly2trellis(constraintLength, codeGenerator), 'PuncturePatternSource', 'Property', 'PuncturePattern', [1;1;0;1]); ``` 然后,您可以使用编码器对象的`step`方法对输入数据进行编码。 ```matlab % 编码输入数据 data = [0 1 0 1 1]; encodedData = step(encoder, data'); ``` 2. 卷积码解码 接下来,您需要创建一个卷积解码器对象。您可以使用`comm.ViterbiDecoder`函数来创建解码器对象,并设置适当的参数。例如,使用编码器相同的多项式,创建一个相应的trellis对象,并将其传递给`comm.ViterbiDecoder`函数。 ```matlab % 创建卷积解码器对象 trellis = poly2trellis(constraintLength, codeGenerator); decoder = comm.ViterbiDecoder('TerminationMethod', 'Terminated', 'TrellisStructure', trellis, 'PuncturePatternSource', 'Property', 'PuncturePattern', [1;1;0;1]); ``` 然后,您可以使用解码器对象的`step`方法对编码后的数据进行解码。 ```matlab % 解码编码后的数据 decodedData = step(decoder, encodedData); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值