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

📄 convolutional_decode.m

📁 构建CDMA通信系统
💻 M
字号:
<matlab> CDMA业务信道卷积解码实现
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                                                    %
%  该函数根据上下行信道区分生成不同码率的卷积码序列          %
%  original_sequence是原始输入序列,channel_select              %
%  是信道选择参数,其中下行码率为1/2,上行信道为1/3          %
%                                                                                    %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [decode_sequence] = convolutional_decode(...
    convolutional_sequence,tail_bits_length,channel_select)
seq_len = length(convolutional_sequence);                       % 得到输入数据序列的长度
if length(seq_len) < 1                                                    % 输入数据序列必须不为空
    error('输入序列错误!');
end
if nargin < 3
    channel_select = 1;                                                   % 选择正向业务信道
end
if nargin < 2
    error('输入参数不足!');
end
if tail_bits_length < 1 | rem(tail_bits_length,1) ~= 0 
    error('参数tail_length必须是大于0的正整数!');
end
register_order = 8;                                                      % 初始化移位寄存器的阶数
if channel_select == 1  
    restricted_length = 9;                                              % 卷积码的约束长度为9
%     code_rate = [1 2];                                              % 正向业务信道的编码效率为1/2
%     xor_generator_0 = [1 0 1 1 1 0 0 0 1];                 % 初始化编码效率为1/2的连接向量器0
%     xor_generator_1 = [1 1 1 1 0 1 0 1 1];      
    xor_cal_generator = [561,753];                                % 初始化连接器
    trellis = poly2trellis(restricted_length,...
        xor_cal_generator);
    decode_sequence = vitdec(convolutional_sequence,trellis,tail_bits_length,'cont','hard');
    decode_sequence(1:tail_bits_length) = [];
elseif channel_select == 2    
    restricted_length = 9;                                    % 卷积码的约束长度为9
%     code_rate = [1 3];                                    % 默认正向业务信道的编码效率为1/2
%     xor_generator_0 = [1 0 1 1 0 1 1 1 1];        % 初始化编码效率为1/3的连接向量器0
%     xor_generator_1 = [1 1 0 1 1 0 0 1 1];      
%     xor_generator_2 = [1 1 1 0 0 1 0 0 1];      
    xor_cal_generator = [557,663,711];                % 初始化连接器
    trellis = poly2trellis(restricted_length,...
        xor_cal_generator);
    decode_sequence = vitdec(convolutional_sequence,trellis,tail_bits_length,'cont','hard');
    decode_sequence(1:tail_bits_length) = [];
else
    error('信道选择参数channel_select错误! 1 - 正向业务信道,2 - 反向业务信道');
end

⌨️ 快捷键说明

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