基于MATLAB的IS-95系统仿真

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

%++++++++++++++++++++++发射机+++++++++++++++++++++++

相关文档
最新文档