IS95仿真源程序.docx

上传人:b****1 文档编号:675812 上传时间:2023-04-29 格式:DOCX 页数:23 大小:23.29KB
下载 相关 举报
IS95仿真源程序.docx_第1页
第1页 / 共23页
IS95仿真源程序.docx_第2页
第2页 / 共23页
IS95仿真源程序.docx_第3页
第3页 / 共23页
IS95仿真源程序.docx_第4页
第4页 / 共23页
IS95仿真源程序.docx_第5页
第5页 / 共23页
IS95仿真源程序.docx_第6页
第6页 / 共23页
IS95仿真源程序.docx_第7页
第7页 / 共23页
IS95仿真源程序.docx_第8页
第8页 / 共23页
IS95仿真源程序.docx_第9页
第9页 / 共23页
IS95仿真源程序.docx_第10页
第10页 / 共23页
IS95仿真源程序.docx_第11页
第11页 / 共23页
IS95仿真源程序.docx_第12页
第12页 / 共23页
IS95仿真源程序.docx_第13页
第13页 / 共23页
IS95仿真源程序.docx_第14页
第14页 / 共23页
IS95仿真源程序.docx_第15页
第15页 / 共23页
IS95仿真源程序.docx_第16页
第16页 / 共23页
IS95仿真源程序.docx_第17页
第17页 / 共23页
IS95仿真源程序.docx_第18页
第18页 / 共23页
IS95仿真源程序.docx_第19页
第19页 / 共23页
IS95仿真源程序.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

IS95仿真源程序.docx

《IS95仿真源程序.docx》由会员分享,可在线阅读,更多相关《IS95仿真源程序.docx(23页珍藏版)》请在冰点文库上搜索。

IS95仿真源程序.docx

IS95仿真源程序

本科毕业设计

IS-95前向链路通信系统的设计与仿真

(附录)

 

姓名李家蓬

学院信息与电气工程学院

专业电子信息工程专业

年级2008级

学号***********

指导教师王丽丽

2012年5月21日

 

IS-95系统仿真源程序

%main_IS95_forward.m

%此函数用于IS-95前向链路系统的仿真,包括扩

%频调制,匹配滤波,RAKE接收等相关通信模块。

%仿真环境:

加性高斯白噪声信道.

%数据速率=9600KBps

%

clearall

closeall

clc

disp('--------------start-------------------');

globalZiZqZsshowRGiGq

clearj;

show=0;

SD=0;%选择软/硬判决接收

%-------------------主要的仿真参数设置------------------

BitRate=9600;

ChipRate=1228800;

N=184;

MFType=1;%匹配滤波器类型--升余弦

R=5;

%+++++++++++++++++++Viterbi生成多项式++++++++++++++++++

G_Vit=[111101011;101110001];

K=size(G_Vit,2);

L=size(G_Vit,1);

%++++++++++++++++++++++++++++++++++++++++++++++++++++++

%++++++++++++++++++++++Walsh矩阵++++++++++++++++++++++++

WLen=64;

Walsh=reshape([1;0]*ones(1,WLen/2),WLen,1);

%Walsh=zeros(WLen,1);

%++++++++++++++++++++++++++++++++++++++++++++++++++++++

%++++++++++++++++++扩频调制PN码的生成多项式++++++++++++++

%Gi=[1010001110100001]';

%Gq=[1001110001111001]';

Gi_ind=[15,13,9,8,7,5,0]';

Gq_ind=[15,12,11,10,6,5,4,3,0]';

Gi=zeros(16,1);

Gi(16-Gi_ind)=ones(size(Gi_ind));

Zi=[zeros(length(Gi)-1,1);1];

%I路信道PN码生成器的初始状态

Gq=zeros(16,1);

Gq(16-Gq_ind)=ones(size(Gq_ind));

Zq=[zeros(length(Gq)-1,1);1];

%Q路信道PN码生成器的初始状态

%++++++++++++++++++++++++++++++++++++++++++++++++++++++

%+++++++++++++++++++扰码生成多项式++++++++++++++++++++++

Gs_ind=[42,35,33,31,27,26,25,22,21,19,18,17,16,10,7,6,5,3,2,1,0]';

Gs=zeros(43,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);

EbNo=[-2:

0.5:

6.5];%仿真信噪比范围(dB)

%EbNo=[2:

0.5:

2.5];

%++++++++++++++++++++++++++++++++++++++++++++++++++++++

%------------------------------------------------------

%-------------------------主程序-------------------------

ErrorsB=[];ErrorsC=[];NN=[];

if(SD==1)

fprintf('\nSOFTDecisionViterbiDecoder\n\n');

else

fprintf('\nHARDDecisionViterbiDecoder\n\n');

end

fori=1:

length(EbNo)

fprintf('\nProcessing%1.1f(dB)',EbNo(i));

iter=0;ErrB=0;ErrC=0;

while(ErrB<300)&(iter<150)

drawnow;

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

TxData=(randn(N,1)>0);

%速率为19.2Kcps

[TxChips,Scrambler]=PacketBuilder(TxData,G_Vit,Gs);

%速率为1.2288Mcps

[xPNMF]=Modulator(TxChips,MFType,Walsh);

%++++++++++++++++++++++++++++++++++++++++++++++++++++++

%++++++++++++++++++++++++信道+++++++++++++++++++++++++++

noise=1/sqrt

(2)*sqrt(R/2)*(randn(size(x))+j*randn(size(x)))*10^(-(EbNo(i)-EbEc)/20);

r=x+noise;

%++++++++++++++++++++++++++++++++++++++++++++++++++++++

%+++++++++++++++++++++++++接收机++++++++++++++++++++++++

RxSD=Demodulator(r,PN,MF,Walsh);%软判决,速率为19.2Kcps

RxHD=(RxSD>0);%定义接收码片的硬判决

if(SD)

[RxDataMetric]=ReceiverSD(RxSD,G_Vit,Scrambler);%软判决

else

[RxDataMetric]=ReceiverHD(RxHD,G_Vit,Scrambler);%硬判决

end

%++++++++++++++++++++++++++++++++++++++++++++++++++++++

if(show)

subplot(311);plot(RxSD,'-o');title('SoftDecisions');

subplot(312);plot(xor(TxChips,RxHD),'-o');title('ChipErrors');

subplot(313);plot(xor(TxData,RxData),'-o');

title(['DataBitErrors.Metric=',num2str(Metric)]);

pause;

end

if(mod(iter,50)==0)

fprintf('.');

saveTempResultsErrBErrCNiter

end

ErrB=ErrB+sum(xor(RxData,TxData));

ErrC=ErrC+sum(xor(RxHD,TxChips));

iter=iter+1;

end

ErrorsB=[ErrorsB;ErrB];

ErrorsC=[ErrorsC;ErrC];

NN=[NN;N*iter];

saveSimData*

end

%+++++++++++++++++++++++++误码率计算++++++++++++++++++++++++

PerrB=ErrorsB./NN;

%PerrB1=ErrorsB1./NN1;

PerrC=ErrorsC./NN;

Pbpsk=1/2*erfc(sqrt(10.^(EbNo/10)));

PcVit=1/2*erfc(sqrt(10.^((EbNo-EbEcVit)/10)));

Pc=1/2*erfc(sqrt(10.^((EbNo-EbEc)/10)));

%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

%%+++++++++++++++++++++++++性能仿真显示++++++++++++++++++++++

figure;

semilogy(EbNo(1:

length(PerrB)),PerrB,'b-*');holdon;

%%semilogy(EbNo(1:

length(PerrB1)),PerrB1,'k-o');holdon;

%semilogy(EbNo(1:

length(PerrC)),PerrC,'b-o');gridon;

%semilogy(EbNo,Pbpsk,'b-.^');

%%semilogy(EbNo,PcVit,'k-.x');ylabel('BER');

%semilogy(EbNo,Pc,'b-.x');

xlabel('信噪比/dB');

ylabel('误码率');

gridon;

%legend('PbofSystem(HD)','PbofSystem(SD)','PcbeforeViterbiofSystem',

%...'PbofBPSKwithnoViterbi(theory)','PconReceiver(theory)');

%

%

%

%legend('PbofSystem','PcbeforeViterbiofSystem',...

%'PbofBPSKwithnoViterbi(theory)',

%'PcbeforeViterbi(theory)','PconReceiver(theory)');

%+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

disp('--------------end-------------------');

%------------------------------------------------------

%************************beginningoffile*****************************

%PacketBuilder.m

function[ChipsOut,Scrambler]=PacketBuilder(DataBits,G,Gs);

%

%此函数用于产生IS-95前向链路系统的发送数据包

%+++++++++++++++++++++++variables++++++++++++++++++++++++++++

%DataBits发送数据(二进制形式)

%GViterbi编码生成多项式

%Gs长序列生成多项式(扰码生成多项式)

%ChipsOut输入到调制器的码序列(二进制形式)

%Scrambler扰码

%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

globalZs

K=size(G,2);

L=size(G,1);

N=64*L*(length(DataBits)+K-1);%码片数(9.6Kbps->1.288Mbps)

chips=VitEnc(G,[DataBits;zeros(K-1,1)]);%Viterbi编码

%交织编码

INTERL=reshape(chips,24,16);%IN:

列,OUT:

chips=reshape(INTERL',length(chips),1);%速率=19.2KBps

%产生扰码

[LongSeqZs]=PNGen(Gs,Zs,N);

Scrambler=LongSeq(1:

64:

end);

ChipsOut=xor(chips,Scrambler);

%************************endoffile***********************************

%************************beginningoffile*****************************

%VitEnc.m

functiony=VitEnc(G,x);

%此函数根据生成多项式进行Viterbi编码

%

%+++++++++++++++++++++++variables++++++++++++++++++++++++++++

%G生成多项式的矩阵

%x输入数据(二进制形式)

%yViterbi编码输出序列

%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

K=size(G,1);

L=length(x);

yy=conv2(G,x');

yy=yy(:

1:

L);

y=reshape(yy,K*L,1);

y=mod(y,2);

%************************endoffile***********************************

%************************beginningoffile*****************************

%PNGen.m

function[y,Z]=PNGen(G,Zin,N);

%

%此函数是根据生成多项式和输入状态产生长度为N的伪随机序列

%+++++++++++++++++++++++variables++++++++++++++++++++++++++++

%G生成多项式

%Zin移位寄存器初始化

%NPN序列长度

%y生成的PN码序列

%Z移位寄存器的输出状态

%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

L=length(G);

Z=Zin;%移位寄存器的初始化

y=zeros(N,1);

fori=1:

N

y(i)=Z(L);

Z=xor(G*Z(L),Z);

Z=[Z(L);Z(1:

L-1)];

end

%yy=filter(1,flipud(G),[1;zeros(N-1,1)]);

%yy=mod(yy,2);

%************************endoffile***********************************

%************************beginningoffile*****************************

%Modulator.m

function[TxOut,PN,MF]=Modulator(chips,MFType,Walsh);

%

%此函数用于实现IS-95前向链路系统的数据调制

%+++++++++++++++++++++++variables++++++++++++++++++++++++++++

%chips发送的初始数据

%MFType成型滤波器的类型选择

%Walshwalsh码

%TxOut调制输出信号序列

%PN用于扩频调制的PN码序列

%MF匹配滤波器参数

%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

globalZiZqshowRGiGq

N=length(chips)*length(Walsh);

%输入速率=19.2KBps,输出速率=1.2288Mcps

tmp=sign(Walsh-1/2)*sign(chips'-1/2);

chips=reshape(tmp,prod(size(tmp)),1);

[PNiZi]=PNGen(Gi,Zi,N);

[PNqZq]=PNGen(Gq,Zq,N);

PN=sign(PNi-1/2)+j*sign(PNq-1/2);

chips_out=chips.*PN;

chips=[chips_out,zeros(N,R-1)];

chips=reshape(chips.',N*R,1);

%成型滤波器

switch(MFType)

case1

%升余弦滤波器

L=25;

L_2=floor(L/2);

n=[-L_2:

L_2];

B=0.7;

MF=sinc(n/R).*(cos(pi*B*n/R)./(1-(2*B*n/R).^2));

MF=MF/sqrt(sum(MF.^2));

case2

%矩形滤波器

L=R;

L_2=floor(L/2);

MF=ones(L,1);

MF=MF/sqrt(sum(MF.^2));

case3

%汉明滤波器

L=R;

L_2=floor(L/2);

MF=hamming(L);

MF=MF/sqrt(sum(MF.^2));

end

MF=MF(:

);

TxOut=sqrt(R)*conv(MF,chips)/sqrt

(2);

TxOut=TxOut(L_2+1:

end-L_2);

if(show)

figure;

subplot(211);plot(MF,'-o');title('MatchedFilter');gridon;

subplot(212);psd(TxOut,1024,1e3,113);title('Spectrum');

end

%************************endoffile***********************************

%************************beginningoffile*****************************

%Demodulator.m

function[SD]=Demodulator(RxIn,PN,MF,Walsh);

%

%此函数是实现基于RAKE接收机的IS-95前向信链路系统的数据包的解调

%+++++++++++++++++++++++variables++++++++++++++++++++++++++++

%RxIn输入信号

%PNPN码序列(用于解扩)

%MF匹配滤波器参数

%Walsh用于解调的walsh码

%SDRAKE接收机的软判决输出

%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

globalR

N=length(RxIn)/R;

L=length(MF);

L_2=floor(L/2);

rr=conv(flipud(conj(MF)),RxIn);

rr=rr(L_2+1:

end-L_2);

Rx=sign(real(rr(1:

R:

end)))+j*sign(imag(rr(1:

R:

end)));

Rx=reshape(Rx,64,N/64);

Walsh=ones(N/64,1)*sign(Walsh'-1/2);

PN=reshape(PN,64,N/64)';

PN=PN.*Walsh;

%输入速率=1.2288Mpbs,输出速率=19.2KBps

SD=PN*Rx;

SD=real(diag(SD));

%***********************endoffile***********************************

%************************beginningoffile*****************************

%ReceiverSD.m

function[DataOut,Metric]=ReceiverSD(SDchips,G,Scrambler);

%

%此函数用于实现基于Viterbi译码的发送数据的恢复

%+++++++++++++++++++++++var

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 临时分类 > 批量上传

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2