function seridata1 = func_turbo_code(seridata0,N,M); L = floor(length(seridata0)/M)+1; L2 = L*M - length(seridata0); seridata0 = [seridata0',zeros(1,L2)]; seridata1 = []; for i = 1:length(seridata0)/M input = seridata0(M*(i-1)+1:M*i); %参数设置 g = [1 0 1 1; 1 1 0 1]; m = 3; len = length(input); output = zeros(3, len + m); %编码器1 state = [0 0 0]; for k = 1 : len + m % 计算rsc编码器输入 if k <= len rsc_in = input(k); else rsc_in = rem([0 state] * g(1, :).', 2); end % 计算rsc编码器输出 output(1, k) = rsc_in; rsc_out = rem([rsc_in state] * g(1, :).', 2); output(2, k) = rem([rsc_out state] * g(2, :).', 2); state = [rsc_out state(1 : end - 1)]; end interleave_data = input; %编码器2 state = [0 0 0]; for k = 1 : len + m % 计算rsc编码器输入 if k <= len rsc_in = interleave_data(k); else rsc_in = rem([0 state] * g(1, :).', 2); end % 计算rsc编码器输出 rsc_out = rem([rsc_in state] * g(1, :).', 2); output(3, k) = rem([rsc_out state] * g(2, :).', 2); state = [rsc_out state(1 : end - 1)]; end output = reshape(output, 1, []); seridata1 = [seridata1,output]; end
时间: 2024-03-27 14:42:09 浏览: 185
L1L0_TM-CVPR2018-master_layerdecomposition_l1l0_tonemapping_
5星 · 资源好评率100%
这个函数实现的是Turbo编码,将输入数据进行Turbo编码得到输出数据。其中,g矩阵为Turbo编码器的生成矩阵,m为Turbo编码器的约束长度。该函数采用了两个RSC编码器,其中第一个编码器的输出作为第二个编码器的输入进行编码。同时,在编码之前对输入数据进行了交织操作,可以提高Turbo编码的纠错性能。
阅读全文