基于MATLAB的IS-95系统仿真
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CDMA 期末论文
基于MATLAB的IS-95系统仿真
课程名称CDMA蜂窝移动通信姓名
学号
专业
成绩
任课老师
上课学期
1 作业要求
● 分析给出的源程序,逐行给出中文注释,并分析仿真结果。 ● 按照如图1所示的框图设计一个CDMA 系统,并进行仿真。
图1 CDMA 系统框图
2 题目一
2.1 源程序注释
2.1.1 主程序部分
%main_CDMA_forward.m
%此函数用于IS-95前向链路系统的仿真,包括扩 %频调制,匹配滤波,RAKE 接收等相关通信模块。 %但没有在频带上进行调制仿真。 %仿真环境: 加性高斯白噪声信道. %数据速率 = 9600 KBps %
clear all close all clc
disp('--------------start-------------------'); % 定义通信仿真全局变量 global Zi Zq Zs show R Gi Gq
% Zi I 支路扩频PN 序列生成器状态 % ZQ Q 支路扩频PN 序列生成器状态 % Zs 扰码PN 序列生成器状态
% show 指示是否画出仿真过程各部分产生的输出
信源
卷积编
交织编扩频 加扰
调制
AWGN 信道
解调
解扰信宿
解卷积
解交织
解扩
% R 仿真时码元宽度
% Gi I支路扩频PN序列
% Gq Q支路扩频PN序列
clear j;
show = 0;
SD = 0; % 选择软/硬判决接收
%-------------------主要的仿真参数设置------------------
% 信道数据率为9600 bps
BitRate = 9600;
% 码片速率为1.2288 MHz
ChipRate = 1228800;
% 消息码元个数
N = 184;
% 匹配滤波器类型--升余弦
MFType = 1;
R = 5;
%+++++++++++++++++++Viterbi生成多项式++++++++++++++++++
% 维特比译码器(译卷积码)
G_Vit = [1 1 1 1 0 1 0 1 1; 1 0 1 1 1 0 0 0 1];
% 生成矩阵的长度
K = size(G_Vit, 2);
% 输出码片数
L = size(G_Vit, 1);
%++++++++++++++++++++++++++++++++++++++++++++++++++++++ %++++++++++++++++++++++Walsh矩阵++++++++++++++++++++++++ % 规定需要的Walsh序列长度
WLen = 64;
% 生成64 bit Walsh序列[1010.....]
Walsh = reshape([1;0]*ones(1, WLen/2), WLen , 1);
%Walsh = zeros(WLen ,1);
%++++++++++++++++++++++++++++++++++++++++++++++++++++++ %++++++++++++++++++扩频调制PN码的生成多项式++++++++++++++ %Gi = [ 1 0 1 0 0 0 1 1 1 0 1 0 0 0 0 1]';
%Gq = [ 1 0 0 1 1 1 0 0 0 1 1 1 1 0 0 1]';
% I信道扩频PN序列生成多项式
Gi_ind = [15, 13, 9, 8, 7, 5, 0]';
% I信道扩频PN序列生成多项式
Gq_ind = [15, 12, 11, 10, 6, 5, 4, 3, 0]';
% 初始化序列Gi(16 bit,全零)
Gi = zeros(16, 1);
% 根据生成多项式Gi_ind将对应位置1
Gi(16-Gi_ind) = ones(size(Gi_ind));
% 初始化I路信道PN码生成器的初始状态
Zi = [zeros(length(Gi)-1, 1); 1];
% 初始化序列Gi(16 bit,全零)
Gq = zeros(16, 1);
% 根据生成多项式Gq_ind将对应位置1,得到二进制生成多项式
Gq(16-Gq_ind) = ones(size(Gq_ind));
% Q路信道PN码生成器的初始状态
Zq = [zeros(length(Gq)-1, 1); 1];
%++++++++++++++++++++++++++++++++++++++++++++++++++++++
%+++++++++++++++++++扰码生成多项式++++++++++++++++++++++
% 扰码序列生成多项式
Gs_ind = [42, 35, 33, 31, 27, 26, 25, 22, 21, 19, 18, 17, 16, 10, 7, 6, 5, 3, 2, 1, 0]'; % 初始化序列Gs
Gs = zeros(43, 1);
% 根据生成多项式Gs_ind将对应位置1,得到二进制生成多项式
Gs(43-Gs_ind) = ones(size(Gs_ind));
% 长序列生成器的初始状态
Zs = [zeros(length(Gs)-1, 1); 1];
%++++++++++++++++++++++++++++++++++++++++++++++++++++++
%++++++++++++++++++++++AWGN信道++++++++++++++++++++++++ % 扩频增益
EbEc = 10*log10(ChipRate/BitRate);
%
EbEcVit = 10*log10(L);
% 仿真信噪比范围(dB)
% EbNo = [-2 : 0.5 : 6.5];
EbNo = [-2 : 0.5 : 4];
%++++++++++++++++++++++++++++++++++++++++++++++++++++++
%------------------------------------------------------
%-------------------------主程序-------------------------
% 初始化向量
ErrorsB = []; ErrorsC = []; NN = [];
% ErrorsB
% ErrorsC
% NN
% 输出信息说明采用的维特比译码判决类型
if (SD == 1)
fprintf('\n SOFT Decision Viterbi Decoder\n\n');
else
fprintf('\n HARD Decision Viterbi Decoder\n\n');
end
% 对信噪比范围内每个数字进行仿真
for i=1:length(EbNo)
% 输出当前仿真信噪比
fprintf('\nProcessing %1.1f (dB)', EbNo(i));
iter = 0; % 仿真计数器
ErrB = 0; % 出错的比特数(编码前)
ErrC = 0; % 出错的子码数(编码后)
while (ErrB <300) & (iter <150)
% 当误码数超过或者循环试验150次以上才可以统计误码率
% 激活命令窗口
drawnow;
%++++++++++++++++++++++发射机+++++++++++++++++++++++