?? cdma_transmitter.m
字號:
%%%%%<matlab> CDMA業(yè)務(wù)信道發(fā)射機數(shù)字基帶傳輸仿真實現(xiàn)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %
% 該函數(shù)仿真CDMA發(fā)射機的功能,包括隨機序列的產(chǎn)生,信源編碼尾比特添加, %
% 信道編碼(卷積編碼),分組交織和擴頻調(diào)制6個功能模塊,生成用于數(shù)字基帶 %
% 傳輸?shù)男盘栃蛄校敵鲞€包括用于解調(diào)所需要的信源編碼尾比特值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 交織器的監(jiān)督位長度
% sf 擴頻因子
% inter_num 干擾用戶數(shù)
[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; % 轉(zhuǎn)雙極性碼
desired_seq = DS_modulation_demodulation(inter_seq,sf,1); % 擴頻調(diào)制部分
len = length(desired_seq);
sequence = zeros((1+inter_num),len);
sequence(1,:) = desired_seq; % 得到所需的數(shù)字基帶傳輸序列
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; % 轉(zhuǎn)雙極性碼
interfering_seq = DS_modulation_demodulation(inter_seq,sf,1,k*off_set);
% 擴頻調(diào)制部分
sequence(k+1,:) = interfering_seq; % 得到所需的數(shù)字基帶傳輸序列
end
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -