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

📄 cdma_transmitter.m

📁 构建CDMA通信系统
💻 M
字号:
%%%%%<matlab> CDMA业务信道发射机数字基带传输仿真实现
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                                                                                                            %
%  该函数仿真CDMA发射机的功能,包括随机序列的产生,信源编码尾比特添加,    %
%  信道编码(卷积编码),分组交织和扩频调制6个功能模块,生成用于数字基带      %
%  传输的信号序列,输出还包括用于解调所需要的信源编码尾比特值add_bits,     %
%  交织器的尾比特值i_add_bits                                                                    %
%                                                                                                            %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [sequence,source_amb,add_bits,i_add_bits] = cdma_transmitter(ran_len,sam_rate,frame_length,...
    crc_select,cov_select,in_info_len,in_supv_len,sf,inter_num)
% ran_len             信源随机序列的长度
% sam_rate          信源随机序列采样率
% frame_length     CRC编码的码字长度
% crc_select         CRC编码生成多项式的选项 1 - CRC_CCITT,2 - CRC_CIT,3 - CRC32
% cov_select        卷积码的编码其选择 1 - 约束长度为9,效率1/2,2 - 约束长度9,效率1/3
% in_info_len        交织器的信息位长度
% in_supv_len       交织器的监督位长度
% sf                     扩频因子
% inter_num         干扰用户数
[source_amb,source] = original_random_signal(ran_len,sam_rate);         % 信号源生成随机序列
%%
iterate_num = floor(length(source)/frame_length);                             % CRC编码部分
add_bits = [];
if rem(ran_len*sam_rate,frame_length) ~= 0
    add_bits = frame_length - rem(ran_len*sam_rate,frame_length);
    iterate_num = iterate_num + 1;
end
source = add_tail_bits(source,add_bits);
temp_sou = reshape(source,frame_length,iterate_num);                        
temp_sou = temp_sou';
if crc_select == 1 
    code_generator = 1;
    code_len = 16;
elseif crc_select == 2
    code_generator = 2;
    code_len = 16;
else
    code_generator = 3;
    code_len = 32;
end
crc_seq = zeros(iterate_num,(frame_length+code_len));
for k = 1:iterate_num
    crc_seq(k,:) = cyclic_redundancy_code(temp_sou(k,:),code_generator);
end
crc_seq = reshape(crc_seq',1,iterate_num*(frame_length+code_len));
%%
seq = add_tail_bits(crc_seq,45);                                               % 卷积编码部分
conv_seq = convolutional_code(seq,cov_select);
[inter_seq,i_add_bits] = block_interlacement(...
    conv_seq,in_info_len,in_supv_len);                                       % 分组交织部分
inter_seq = 2*inter_seq - 1;                                                    % 转双极性码
desired_seq = DS_modulation_demodulation(inter_seq,sf,1);        % 扩频调制部分
len = length(desired_seq);
sequence = zeros((1+inter_num),len);
sequence(1,:) = desired_seq;                                                  % 得到所需的数字基带传输序列
len = 2^sf - 1;
if inter_num ~= 0
    off_set = floor(len/inter_num);
end
for k = 1:inter_num
    [source_ambipolar,source] = original_random_signal(ran_len,sam_rate);% 信号源生成随机序列
    iterate_num = floor(length(source)/frame_length);                           % CRC编码部分
    add_bits = [];
    if rem(ran_len*sam_rate,frame_length) ~= 0
        add_bits = frame_length - rem(ran_len*sam_rate,frame_length);
        iterate_num = iterate_num + 1;
    end
    source = add_tail_bits(source,add_bits);
    temp_sou = reshape(source,frame_length,iterate_num);
    temp_sou = temp_sou';
    crc_seq = zeros(iterate_num,(frame_length+code_len));
    for n = 1:iterate_num
        crc_seq(n,:) = cyclic_redundancy_code(temp_sou(n,:),code_generator);
    end
    crc_seq = reshape(crc_seq',1,iterate_num*(frame_length+code_len));
    
    seq = add_tail_bits(crc_seq,45);                                                   % 卷积编码部分
    conv_seq = convolutional_code(seq,cov_select);
    inter_seq = block_interlacement(conv_seq,in_info_len,in_supv_len); % 分组交织部分
    inter_seq = 2*inter_seq - 1;                                                        % 转双极性码
    interfering_seq = DS_modulation_demodulation(inter_seq,sf,1,k*off_set);     
                                                                                                   % 扩频调制部分
    sequence(k+1,:) = interfering_seq;         % 得到所需的数字基带传输序列
end

⌨️ 快捷键说明

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