卷积码matlab仿真程序,卷积码编码译码程序仿真程序 卷积码应用详解

(2) 通常称K为约束长度(一般来说,约束长度越大,则码字纠错 性能越好)。

(3) 码的效率:k/n

(4) 编码前,k(K-1)个寄存器单元全部复位清零。

(5) 由于一段消息不仅影响当前段的编码输出,还影响其后m段的 编码输出,所以称参量K=m+1为卷积吗的约束比特长度为 K*n·==。

(6)注意进入卷积编码器的最后m段消息仍是要编码输出的消息,对这最后m段消息的编码处理,称作卷积编码的结尾处理。一种常见的结尾处理方法是额外输入m段无效的0数据比特,一方面将存储的m段消息编码全部推出,另一方面保证编码器回到全0的初态。

function [out_put,out_G,out_k0] = convolution(baseband_out)

G = [1,0,1,1;1,1,1,1]; % Generation Matrix G of CC(卷积编码器)

k0 = 1; % Number of bits was input into CC

input = baseband_out; % input data

%查看是否需要补0,输入input必须是k0的整数倍

if rem(length(input),k0) 》 0 % whether add 0

input=[input,zeros(size(1:k0 - rem(length(input),k0)))];

end

n=length(input) / k0; %% 把输入比特按k0分组,n为所得的组数。

%检查生成矩阵G的维数是否和k0一致

if rem(size(G,1),k0) 》 0 % check the row of G whether identical to k0 %size(A, dim)dim=1表示取矩阵的行数,dim=2表示取矩阵A的列数。

error(‘Error,G is not of the right size.’)

end

%得到约束长度K和输出比特数n0

K=size(G,2) / k0; % restrict length

n0=size(G,1); % ouput length

%在信息前后加0,使存贮器归0,加0个数为(K-1)*k0个

u=[zeros(size(1:(K - 1) * k0)),input,zeros(size(1:(K - 1) * k0))]; % add 0 2(K-1)*k0个以保证编码器是从全0开始,并回到全0状态。

u1=u(K * k0:-1:1); % UU matrix

%将加0后的输入序列按每组K*k0个分组,分组是按k0比特增加

%从1到K*k0比特为第一组,从1+k0到K*k0+k0为第二组,。。。。,

%并将分组按倒序排列。

for i=1:n + K - 2 % Grouping 加零以后总共组数

u1=[u1,u((i + K) * k0:-1:i * k0 + 1)]; % Grouping

end

uu=reshape(u1,K * k0,n + K - 1); % generate uu, a matrix whose columns are the contents of %生成一列是一组共n+K-1(列)组

% conv. encoder at various clock cycles.

out_put = reshape(rem(G * uu,2),1,n0 * (K + n - 1)); % % determine the output %rem(G * uu,2)相当与对矩阵的摩尔运算转化成二进制数%

out_G = G;

out_k0 = k0;

% % write the output to the encodetext

% result = fopen(encodetext, ‘w’);

% for i = 1:n0*(L+n -1)

% fwrite(result, output(i), ‘bit1’);

% end

% fclose(result)

MATLAB实现

function coded_bits = tx_conv_encoder(in_bits, ConvCodeGenPoly)

% 卷积编码

% in_bits: 输入未经编码的信息比特

% ConvCodeGenPoly: 卷积编码的生成多项式

% coded_bits: 编码后的比特

number_rows = size(ConvCodeGenPoly, 1); % 编码输出的路数n

number_bits = size(ConvCodeGenPoly, 2) + length(in_bits) - 1; %编码输出单路的比特数

coded_bits = zeros(number_rows, number_bits);

for row = 1:number_rows

coded_bits(row, :) = rem(conv(in_bits, ConvCodeGenPoly(row, :)), 2);

end

%多路输出并成一路(并转串)

coded_bits = coded_bits(:);

这里将卷积编码封装成了一个函数,可以在调用时才确定生成多项式,对于上面给的情况,matlab调用代码如下:

ConvCodeGenPoly = [1 0 1 1 0 1 1;1 1 1 1 0 0 1]; % 生成多项式:133和171

uncoded_bits = [1 0 1 0];

coded_bits = tx_conv_encoder(uncoded_bits, ConvCodeGenPoly);

结语

关于卷积码编码译码程序仿真程序的介绍就到这了,如有不足之处欢迎指正。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值