📄 cdma_transmitter.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 + -