基于MATLAB的IS-95系统仿真说明书.doc

上传人:h**** 文档编号:140654 上传时间:2018-07-10 格式:DOC 页数:24 大小:245KB
下载 相关 举报
基于MATLAB的IS-95系统仿真说明书.doc_第1页
第1页 / 共24页
基于MATLAB的IS-95系统仿真说明书.doc_第2页
第2页 / 共24页
基于MATLAB的IS-95系统仿真说明书.doc_第3页
第3页 / 共24页
基于MATLAB的IS-95系统仿真说明书.doc_第4页
第4页 / 共24页
基于MATLAB的IS-95系统仿真说明书.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

1、 1 洗手 洗手 洗手 洗手 洗手 洗手 CDMA 期 末 论 文 洗手 洗手 洗手 洗手 洗手 基于 MATLAB 的 IS-95 系统仿真 洗手 洗手 洗手 洗手 课程名称 CDMA 蜂窝移动通信 洗手 姓 名 洗手 学 号 洗手 专 业 洗手 成 绩 洗手 任课老师 洗手 上课学期 洗手 洗手 洗手 洗手 洗手 洗手 作业要求 洗手 分析给出的源程序 , 吃饭 逐行给出中文注释 , 吃饭 并分析仿真结果 。 洗手 洗手 按照如图 1 所示的框图设计一个 CDMA 系统 , 吃饭 并进行仿真 。 洗手 洗手 2 洗手 图 1 CDMA 系统框图 洗手 2 题目一 洗手 2.1 源程序注释

2、洗手 2.1.1 主程序部分 洗手 %main_CDMA_forward.m 洗手 %此函数用于 IS-95 前向链路系统的仿真 , 吃饭 包括扩 洗手 %频调制 , 吃饭 匹配滤波 , 吃饭 RAKE 接收等相关通信模块 。 洗手 洗手 %但没有在频带上进行调制仿真 。 洗手 洗手 %仿真环境 : 加性高斯白噪声信道 .洗手 %数据速率 = 9600 KBps 洗手 %洗手 洗手 clear all 洗手 close all 洗手 clc 洗手 洗手 disp(-start-);bef洗手 % 定义通信仿真全局变量 洗手 global Zi Zq Zs show R Gi Gq 洗手 % Z

3、i I 支路扩频 PN 序列生成器状态 洗手 % ZQ Q 支路扩频 PN 序列生成器状态 洗手 % Zs 扰码 PN 序列生成器状态 洗手 % show 指示是否画出仿真过程各部分产生的输出 洗手 % R 仿真时码元宽度 洗手 % Gi I 支路扩频 PN 序列 洗手 % Gq Q 支路扩频 PN 序列 洗手 洗手 clear j;beef洗手 show = 0;beef洗手 SD = 0;beef % 选择软 /硬判决接收 洗手 洗手 信源 卷积编码 交织编码 扩频 加扰码 调制 AWGN 信道 解调 解扰码 信宿 解卷积 解交织 解扩 3 %-主要的仿真参数设置 -洗手 % 信道数据率为

4、 9600 bps 洗手 BitRate = 9600;beef洗手 % 码片速率为 1.2288 MHz 洗手 ChipRate = 1228800;beef洗手 % 消息码元个数 洗手 N = 184;beef洗手 % 匹配滤波器类型 -升余弦 洗手 MFType = 1;beef洗手 洗手 R = 5;beef洗手 洗手 %+Viterbi 生成多项式 +洗手 % 维特比译码器(译卷积码) 洗手 G_Vit = 1 1 1 1 0 1 0 1 1;beef 1 0 1 1 1 0 0 0 1;beef洗手 % 生成矩阵的长度 洗手 K = size(G_Vit, 2);beef洗手 %

5、输出码片数 洗手 L = size(G_Vit, 1);beef洗手 %+洗手 洗 手 %+Walsh 矩阵 +洗手 % 规定需要的 Walsh 序列长度 洗手 WLen = 64;beef洗手 % 生成 64 bit Walsh 序列 1010.洗手 Walsh = reshape(1;beef0*ones(1, WLen/2), WLen , 1);beef洗手 %Walsh = zeros(WLen ,1);beef洗手 %+洗手 洗手 %+扩频调制 PN 码的生成多项式 +洗手 %Gi = 1 0 1 0 0 0 1 1 1 0 1 0 0 0 0 1;beef洗手 %Gq = 1 0

6、 0 1 1 1 0 0 0 1 1 1 1 0 0 1;beef洗手 洗手 % I 信道扩频 PN 序列生成多项式 洗手 Gi_ind = 15, 13, 9, 8, 7, 5, 0;beef洗手 % I 信道扩频 PN 序列生成多项式 洗手 Gq_ind = 15, 12, 11, 10, 6, 5, 4, 3, 0;beef洗手 % 初始化序列 Gi( 16 bit, 吃饭 全零) 洗手 Gi = zeros(16, 1);beef洗手 % 根据生成多项式 Gi_ind 将对应位置 1 洗手 Gi(16-Gi_ind) = ones(size(Gi_ind);beef洗手 % 初始化 I

7、 路信道 PN 码生成器的初始状态 洗手 Zi = zeros(length(Gi)-1, 1);beef 1;bef洗手 % 初始化序列 Gi( 16 bit, 吃饭 全零) 洗手 4 Gq = zeros(16, 1);beef洗手 % 根据生成多项式 Gq_ind 将对应位置 1,得到二进制生成多项式 洗手 Gq(16-Gq_ind) = ones(size(Gq_ind);beef洗手 % Q 路信道 PN 码生成器的初始状态 洗手 Zq = zeros(length(Gq)-1, 1);beef 1;bef洗手 %+洗手 洗手 %+扰码生成多项式 +洗手 % 扰码序列生成多项式 洗手

8、 Gs_ind = 42, 35, 33, 31, 27, 26, 25, 22, 21, 19, 18, 17, 16, 10, 7, 6, 5, 3, 2, 1, 0;beef洗手 % 初始化序列 Gs 洗手 Gs = zeros(43, 1);beef洗手 % 根据生成多项式 Gs_ind 将对应位置 1,得到二进制生成多项式 洗手 Gs(43-Gs_ind) = ones(size(Gs_ind);beef洗手 % 长序列生成器的 初始状态 洗手 Zs = zeros(length(Gs)-1, 1);beef 1;bef洗手 %+洗手 洗手 %+AWGN 信道 +洗手 % 扩频增益

9、洗手 EbEc = 10*log10(ChipRate/BitRate);beef洗手 %洗手 EbEcVit = 10*log10(L);beef洗手 % 仿真 信噪比范围 (dB)洗手 % EbNo = -2 : 0.5 : 6.5;beef洗手 EbNo = -2 : 0.5 : 4;beef洗手 %+洗手 洗手 %-洗手 洗手 %-主程序 -洗手 洗手 % 初始化向量 洗手 ErrorsB = ;beef ErrorsC = ;bef NN = ;beef洗手 % ErrorsB 洗手 % ErrorsC 洗手 % NN 洗手 % 输出信息说明采用的维特比译码判决类型 洗手 if (S

10、D = 1)洗手 fprintf(n SOFT Decision Viterbi Decodernn);beef洗手 else 洗手 fprintf(n HARD Decision Viterbi Decodernn);beef洗手 end 洗手 洗手 5 % 对信噪比范围内每个数字进行仿真 洗手 for i=1:length(EbNo)洗手 % 输出当前仿真信噪比 洗手 fprintf(nProcessing %1.1f (dB), EbNo(i);beef洗手 iter = 0;beef % 仿真计数器 洗手 ErrB = 0;beef % 出错的比特数(编码前) 洗手 ErrC = 0;

11、beef % 出错的子码数(编码后) 洗手 while (ErrB 0);beef洗手 % 输出已编码 、 beef交 织并加扰的消息比特与所用到的扰码 洗手 %(码率 : beef19.2 kbps) 洗手 TxChips, Scrambler = PacketBuilder(TxData, G_Vit, Gs);beef洗手 % 下面进行扩频调制 , 吃饭 调制后码率为 1.2288Mcps 洗手 x PN MF = Modulator(TxChips, MFType, Walsh);beef洗手 %+洗手 洗手 %+洗手 %信道产生高斯白噪声 洗手 noise = 1/sqrt(2)*s

12、qrt(R/2)*( randn(size(x) + j*randn(size(x)*10(-(EbNo(i) - EbEc)/20);beef洗手 %j*randn(size(x)*10(-(EbNo(i) - EbEc)/20);beef洗手 %向已调信号中混入加性高斯白噪声 洗手 r = x+noise;beef洗手 %+洗手 洗手 %+接收机 +洗手 % 软判决 , 吃饭 输出速率为 19.2 Kcps 经过卷积编码的序列 洗手 RxSD = Demodulator(r, PN, MF, Walsh);beef洗手 % 对 Rake 接收机解调后的信号进行过零比较 洗手 RxHD =

13、(RxSD0);beef洗手 洗手 if (SD)洗手 % 如果选择了软判决则会进行软判决 , 吃饭 洗手 % 并进行解扰 、 beef解交织维特比译码 洗手 RxData Metric= ReceiverSD(RxSD, G_Vit, Scrambler);beef洗手 else 洗手 % 进行硬判决 , 吃饭 并进行解扰 、 bef解交织维特比译码 洗手 6 RxData Metric= ReceiverHD(RxHD, G_Vit, Scrambler);beef洗手 end 洗手 %+洗手 洗手 if(show)洗手 % 画出软判决输出结果 洗手 subplot(311);beef洗手

14、 plot(RxSD, -o);beef洗手 title(Soft Decisions);beef洗手 % 将判决结果与发送序列异或 , 吃饭 显示出错码 (维特比译码前 )洗手 subplot(312);beef洗手 plot(xor(TxChips, RxHD), -o);beef洗手 title(Chip Errors);beef洗手 % 将收发数据进行异或 , 吃饭 显示出错码 洗手 subplot(313);beef洗手 plot(xor(TxData, RxData), -o);beef洗手 title(Data Bit Errors. Metric = , num2str(Met

15、ric);beef洗手 pause;beef洗手 end 洗手 洗手 if(mod(iter, 50)=0)洗手 % 如果已循环次数为 50 的倍数则打印 .将变量保存 洗手 fprintf(.);bef洗手 % 将变量保存到硬盘 洗手 save TempResults ErrB ErrC N iter 洗手 end 洗手 洗手 % 计算编码前 , 吃饭 解码后出错的消息比特 (9600 Bps)数量 洗手 ErrB = ErrB + sum(xor(RxData, TxData);beef洗手 % 计算经过编码出错的子码 (19.2 kBps)数 洗手 ErrC = ErrC + sum(x

16、or(RxHD, TxChips);beef洗手 % 循环次数加 1 洗手 iter = iter+ 1;beef洗手 end 洗手 % 生成误比特数向量 洗手 ErrorsB = ErrorsB;beef ErrB;beef洗手 % 生成误码数 向量 洗手 ErrorsC = ErrorsC;beef ErrC;bef洗手 % 计算本次共仿真的消息比特数 洗手 NN = NN;beef N*iter;beef洗手 % 保存所有产生的数据 洗手 save SimData *洗手 end 洗手 洗手 7 %+误码率计算 +洗手 % 计算误码率(卷积编码前的信号) 洗手 PerrB = Error

17、sB./NN;beef洗手 % PerrB1 = ErrorsB1./NN1;beef洗手 % 计算误码率(卷积编码后的信号) 洗手 PerrC = ErrorsC./NN;beef洗手 % BPSK 调制理论误码率(无卷积编码与扩频) 洗手 Pbpsk= 1/2*erfc(sqrt(10.(EbNo/10);bef洗手 % 有维特比译码但无扩频的理论误码率 洗手 PcVit= 1/2*erfc(sqrt(10.(EbNo-EbEcVit)/10);beef洗手 % 有扩频但无维特比译码的理论误码率 洗手 Pc = 1/2*erfc(sqrt(10.(EbNo-EbEc)/10);bef洗手

18、%+洗手 洗手 %+性能仿真显示 +洗手 figure;beef洗手 semilogy(EbNo(1:length(PerrB), PerrB, b-*);beef洗手 hold on;beef洗手 % %semilogy(EbNo(1:length(PerrB1), PerrB1, k-o);beef洗手 % hold on;beef洗手 semilogy(EbNo(1:length(PerrC), PerrC, b-o);beef洗手 grid on;beef洗手 semilogy(EbNo, Pbpsk, b-.);bef洗手 semilogy(EbNo, PcVit, k-.x);be

19、ef洗手 ylabel(BER);beef洗手 semilogy(EbNo, Pc, b-.x);beef洗手 xlabel(信噪比 /dB);beef洗手 ylabel(误码率 );beef洗手 %+洗手 disp(-end-);bef洗手 %-洗手 2.1.2 PacketBuilder 函数 洗手 用于信号传输之前的 卷积编码和交织编码和加扰码 洗手 % *beginning of file*洗手 %PacketBuilder.m 洗手 function ChipsOut, Scrambler = PacketBuilder(DataBits, G, Gs);beef 洗手 % 洗手 %

20、此函数用于产生 IS-95 前向链路系统的发送数据包 洗手 洗手 %+variables+洗手 % DataBits 发送数据(二进制形式) 洗手 % G Viterbi 编码生成多项式 洗手 % Gs 长序列生成多项式(扰码生成多项式) 洗手 % ChipsOut 输入到调制器的码序列(二进制形式) 洗手 8 % Scrambler 扰码 洗手 %+ 洗手 洗手 % 全局变量 洗手 global Zs 洗手 洗手 % 取得卷积码的约束长度 K = 9 洗手 K = size(G, 2);beef 洗手 % 取得对于每一位消息码编码器的输出位数 L = 2 洗手 L = size(G, 1);

21、beef 洗手 % 计算扩频后的子数 洗手 %(原始比特 : beef9.6 Kbps- 卷积编码后 : beef19.2 Kbps -扩频后 : beef1.2288 Mbps) 洗手 N = 64*L*(length(DataBits)+K-1);beef洗手 % 加入尾比特 , 吃饭 并进行卷积编码 洗手 chips = VitEnc(G, DataBits;beef zeros(K-1,1);bef 洗手 洗手 % 交织编码 洗手 % 先将编码器输出转为 24 行 16 列矩阵 洗手 INTERL = reshape(chips, 24, 16);beef 洗手 % 再将转置矩阵按串行

22、输出 洗手 % 速率 =19.2 KBps 洗手 chips = reshape(INTERL, length(chips), 1);beef 洗手 洗手 % 产生扰码 洗手 % PNGen 用于产生 1.2288 Mc/s 的扰码 洗手 LongSeq Zs = PNGen(Gs, Zs, N);beef 洗手 % 以下进行分频 , 吃饭 得到 19.2 kbps 的扰码 洗手 Scrambler = LongSeq(1:64:end);beef 洗手 % 对编码后的比特进行加扰(码率 ; beef 19.2 kbps) 洗手 ChipsOut = xor(chips, Scrambler)

23、;beef 洗手 %*end of file*洗手 洗手 2.1.3 Modulator 函数 洗手 将信号进行扩频和调制之后再发送 洗手 洗手 %*beginningoffile*洗手 %VitEnc.m 洗手 function y = VitEnc(G, x);beef 洗手 洗手 % 此函数根据生成多项式进行 Viterbi 编码 洗 手 % 洗手 %+variables+洗手 % G 生成多项式的矩阵 洗手 9 % x 输入数据(二进制形式) 洗手 % y Viterbi 编码输出序列 洗手 %+ 洗手 洗手 % 取得对于每一位消息码编码器的输出位数 洗手 K = size(G, 1)

24、;beef 洗手 % 取得 消息比特长度 洗手 L = length(x);beef 洗手 % 进行二维卷积运算 洗手 yy = conv2(G, x);beef 洗手 % 去除多余项 洗手 yy = yy(:, 1:L);beef 洗手 % 将输出矩阵变为一行 洗手 y = reshape(yy,K*L, 1);beef 洗手 % 模 2 运算 洗手 y = mod(y, 2);beef 洗手 %*endoffile*洗手 2.1.4 PNGen 函数 洗手 根据 PN 序列的生成多项式产生 PN 序列 洗手 洗手 2.1.5 VitEnc 函数 洗手 进行维比特编码的函数 洗手 %*beg

25、inningoffile*洗手 %PNGen.m 洗手 function y, Z = PNGen(G, Zin, N);beef洗手 %洗手 % 此函数是根据生成多项式和输入状态产生长度为 N 的伪随机序列 洗手 洗手 %+variables+洗手 % G 生成多项式 洗手 % Zin 移位寄存器初始化 洗手 % N PN 序列长度 洗手 % y 生成的 PN 码序列 洗手 % Z 移位寄存器的输出状态 洗手 %+洗手 洗手 % 取得生成矩阵的长度 洗手 L = length(G);beef洗手 % 移位寄存 器的初始化 洗手 Z = Zin;beef洗手 % 初始化输出序列为全零 洗手 y

26、 = zeros(N, 1);beef洗手 for i=1:N 洗手 % 输出最高位 洗手 10 y(i) = Z(L);beef洗手 % 异或 洗手 Z = xor(G*Z(L), Z);beef洗手 % 移位 洗手 Z = Z(L);beef Z(1:L-1);beef洗手 end 洗手 %yy = filter(1, flipud(G), 1;beef zeros(N-1, 1);beef洗手 %yy = mod(yy, 2);beef洗手 %*end of file*洗手 洗手 2.1.6 函数 Demodulator 洗手 对接收到的信号进行解调和解扩 洗手 %*beginningo

27、ffile*洗手 %Modulator.m 洗手 function TxOut, PN, MF = Modulator(chips, MFType, Walsh);beef洗手 %洗手 %此函数用于实现 IS-95 前向链路系统的数据调制 洗手 洗手 %+variables+洗手 % chips 发送的初始数据 洗手 % MFType 成型滤波器的类型选择 洗手 % Walsh walsh 码 洗手 % TxOut 调制输出信号序列 洗手 % PN 用于扩频调制的 PN 码序列 洗手 % MF 匹配滤波器参数 洗手 %+洗手 洗手 % 导入全局变量 洗手 global Zi Zq show R

28、 Gi Gq 洗手 洗手 % 计算输出字码数 洗手 N = length(chips)*length(Walsh);beef洗手 洗手 % 输入速率 = 19.2 KBps, 输出速率 = 1.2288 Mcps 洗手 % 先将单极性归二进制码变换为双极性码 洗手 % 再与 Walsh 序列相乘 , 吃饭 实现正交调制 洗手 tmp = sign(Walsh-1/2)*sign(chips-1/2);beef洗手 % 串并转换 洗手 chips = reshape(tmp, prod(size(tmp), 1);beef洗手 % 产生 I 支路 PN 扩频序列( 1.2288Mc/s) 洗手 PNi Zi = PNGen(Gi, Zi, N);beef洗手 % 产生 Q 支路 PN 扩频序列( 1.2288Mc/s) 洗手 PNq Zq = PNGen(Gq, Zq, N);beef洗手 % 将 I 支路与 Q 支路在复数域合并表示 洗手

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。