CDMA仿真.docx

上传人:b****5 文档编号:11814199 上传时间:2023-04-02 格式:DOCX 页数:21 大小:617.29KB
下载 相关 举报
CDMA仿真.docx_第1页
第1页 / 共21页
CDMA仿真.docx_第2页
第2页 / 共21页
CDMA仿真.docx_第3页
第3页 / 共21页
CDMA仿真.docx_第4页
第4页 / 共21页
CDMA仿真.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

CDMA仿真.docx

《CDMA仿真.docx》由会员分享,可在线阅读,更多相关《CDMA仿真.docx(21页珍藏版)》请在冰豆网上搜索。

CDMA仿真.docx

CDMA仿真

 

《CDMA蜂窝移动通信》

课程设计报告

 

姓名:

班级:

学号:

指导老师:

 

目录

第一部分

1.设计要求说明1

2、设计思路2

3、核心原理2

3.1Viterbit(卷积)编码2

3.2Walsh码扩频2

3.3数据扰码3

3.4QPSK信号3

3.4.1QPSK调制3

3.4.2QPSK解调4

4、设计过程及仿真结果5

4.1设计流程5

4.2仿真结果5

4.2.1原始序列图以及原始序列频谱图5

4.2.2维特比编码序列图以及其频谱图6

4.2.3扩频序列及其频谱图6

5.2.4扰码序列及其频谱图6

5.2.5I信道序列图及其频谱图7

4.2.6Q信道序列图及其频谱图8

4.2.7滤波器模型图及其频谱图8

4.2.8同相分量成型图及其频谱图9

4.2.9正交分量成型图及其频谱图10

4.2.10QPSK已调信号图及其频谱图10

4.2.11同相分量解调图及其频谱图10

4.2.12正交分量解调信号图及其频谱图11

4.2.13解调恢复后所得序列图及其频谱图12

4.2.14信噪比曲线图12

5、核心程序代码13

第一部分

1.设计要求说明

按照下列框图设计一个CDMA系统,并进行仿真。

图1CDMA系统框图

2、设计思路

通过对IS-95窄带CDMA反向业务信道原理的了解,采用模块化思想,分为信源编码,信道交织编码,AWGN信道传播,信道解码以及信源解码等部分。

3、核心原理

3.1Viterbit(卷积)编码

卷积码是分组的,但它的监督元不仅与本组的信息元有关,还与前若干组的信息由关。

着种码纠错能力强,不仅可以纠正随机差错,还能纠正突发差错。

本系统采用(2,1,8)卷积编码,编码器如图2所示:

图2卷积编码

3.2Walsh码扩频

Walsh码是一组由0和1元素构成的正交方阵,即其任意两行(或两列)相互正交。

IS-95系统利用Walsh码作为地址码,与信息数据相乘(或模2加)进行地址么调制,增强系统的抗干扰能力。

3.3数据扰码

利用伪随机序列对数据进行扰码,增强系统的抗干扰能力。

伪随机序列具有类似于随机序列的确定序列,序列中不同位置的元素取值相互独立,取0和1的概率相等。

本系统采用生成矩阵为[1000000101010001110011011110000010011101111]的m序列发生器,对数据进行扰码。

3.4QPSK信号

3.4.1QPSK调制

MPSK调制中最常用的就是4PSK,又称QPSK。

因为它有四种相位状态,所以称为四相键控;又因为他是两个相互相交的BPSK之和,所以又称作为正交移相键控,记作QPSK。

对于矩形包络的多进制移相键控(MPSK),其已调信号的表达式为:

式中

同相分量

正交分量

当M=4时,即位QPSK,它是由两个互相正交的BPSK之和构成的。

输入的二进制信息码元经串/并变换电路后分为两个支路,一路为奇数码元,另一路为偶数码元。

这时,每个支路的码元宽度为原码元宽度的Tb的两倍。

每个支路再按BPSK的方法进行调制。

不过两支路的载波相位不同,他们为正交,即相位差为90°,一个称为同相支路,即I支路,另一个称为正交支路,即Q支路。

这两个支路非别调制,将调制后的信号合并相加,就得到QPSK信号,即完成了调制任务。

其原理图如图3。

图3QPSK调制原理图

3.4.2QPSK解调

QPSK信号解调方法可分为相干解调和差分解调两类。

本实验采用了相干解调。

图4为相干解调的组成方框图。

图4QPSK相干解调器

如图4所示,输入的QPSK信号,加入同相支路和正交支路的相关器(或匹配滤波器)。

由QPSK信号通过载波恢复(或载波提取)电路,产生相干载波。

供给同相支路相关器;本地载波经90°移相,供给正交支路相关器。

相关器输出经积分、判决、并/串变换,即可恢复出原始二进制信息数据,从而完成解调。

4、设计过程及仿真结果

4.1设计流程

该CDMA通信系统的设计流程图如图5所示。

图5CDMA设计流程图

4.2仿真结果

4.2.1原始序列图以及原始序列频谱图

图6

4.2.2维特比编码序列图以及其频谱图

图7

4.2.3扩频序列及其频谱图

图8

5.2.4扰码序列及其频谱图

由于扰码序列位数多,导致仿真结果中其序列图无法区分。

图9

5.2.5I信道序列图及其频谱图

由于I信道序列位数多,导致仿真结果中其序列图无法区分。

图10

4.2.6Q信道序列图及其频谱图

由于Q信道序列位数多,导致仿真结果中其序列图无法区分。

图11

4.2.7滤波器模型图及其频谱图

图12

4.2.8同相分量成型图及其频谱图

图13

4.2.9正交分量成型图及其频谱图

图14

4.2.10QPSK已调信号图及其频谱图

图15

4.2.11同相分量解调图及其频谱图

图16

4.2.12正交分量解调信号图及其频谱图

图17

4.2.13解调恢复后所得序列图及其频谱图

图18

4.2.14信噪比曲线图

图19

5、核心程序代码

clearall;%清除数据记录

closeall;%关闭图形窗

clc;%清除命令窗

N=184;%产生二进制随机信息个数

Fc=20000;%调制/解调载波频率

df=0.3;

zero_in=5;%插入4个0

snr_lin=-2:

1:

6;%仿真信噪比范围

show=1;%图形显示控制

bit_err_count=zeros(1,length(snr_lin),'double');

bit_err_rate=zeros(1,length(snr_lin),'double');

forcount=1:

length(snr_lin)

forkk=1:

5%相同信噪比下,多次数据求平均

%-------------------原始二进制随机信息-------

InputData=rand(N,1);

fori=1:

N

ifInputData(i)>0.5

InputData(i)=1;

else

InputData(i)=0;

end

end

Output_Print(InputData',19.2e3,show,'原始序列')

%----------------Viterbi编码(卷积编码)-------------------------

G_Vit=[111101011;%Viterbi生成多项式

101110001];

K_Vit=size(G_Vit,2);%Viterbi生成多项式列数K=9

L_vit=size(G_Vit,1);%Viterbi生成多项式行数L=2

%-----------根据生成多项式G_Vit对InputData进行编码----------

K=size(G_Vit,1);%K=G_Vit生成矩阵的行数=2

%结束时,为了令寄存器回到全零状态,要在输入序列末尾补K_Vit-1个零

InputData1=[InputData;zeros(K_Vit-1,1)];%补零

L=length(InputData1);%补零后的输入序列长度

yy=conv2(G_Vit,InputData1');%卷积编码

yy=yy(:

1:

L);%截断数据,变为K*L=2×50矩阵

y=reshape(yy,K*L,1);%将矩阵yy转置成(K*L)行1列

Vit_Out=mod(y,2);%y=y%2;Viterbit输出序列【K*L行1列】

Output_Print(Vit_Out',2*19.2e3,show,'维特比编码序列')

%--------------------------交织---------------

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

列,OUT:

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

%---------------------扩频-------------------

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

R=5;

WLen=64;

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

W_N=length(InterLeave_Out)*length(Walsh);%扩频后序列长度

tmp=Walsh*InterLeave_Out';

DS_chips=reshape(tmp,numel(tmp),1);%numel--返回tmp元素个数

Output_Print(DS_chips',64*2*192,show,'扩频序列')

%--------------------加扰码-----------------------

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];%长序列生成器的初始状态

[ScramblerZs]=PNGen(Gs,Zs,W_N);

Scram_out=xor(DS_chips,Scrambler);

Output_Print(Scram_out',64*2*192,show,'扰码序列')

%--------------------加偏置------------------------

%PN码偏置生成多项式:

%Gi=[1010001110100001]';

%Gq=[1001110001111001]';

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

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

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码生成器的初始状态

[PNiZi]=PNGen(Gi,Zi,W_N);%I信道扩频码

I_chips=sign(Scram_out-1/2).*sign(PNi-1/2);

I_chips_out=[I_chips,zeros(W_N,R-1)];%零值插入:

4个

I_chips_out=reshape(I_chips_out.',W_N*R,1);

[PNqZq]=PNGen(Gq,Zq,W_N);%Q信道扩频码

Q_chips=sign(Scram_out-1/2).*sign(PNq-1/2);

Q_chips_out=[Q_chips,zeros(W_N,R-1)];%零值插入

Q_chips_out=reshape(Q_chips_out.',W_N*R,1);

Output_Print2(I_chips_out',64*2*192*5,show,'I信道序列')

Output_Print2(Q_chips_out',64*2*192*5,show,'Q信道序列')

%----------------------调制-----------------

rf=0.1;%rf滚降因子

Nt=100;%滤波器过采样率

zero_in=5;

rate=zero_in;%rate=zero_in=5,

M=2*zero_in*Nt;%调整数据长度

Fs=122880;%Fs码元传输速率

ts=1/Fs;

df=0.3;

Sqpsk=Modulator(I_chips_out,Q_chips_out,rf,Nt,rate,Fs,Fc,show);

%-----------------AWGN信道------------------

Sqpsk_power=(norm(Sqpsk)^2)/length(Sqpsk);%已调信号功率

noise_power=Sqpsk_power/(10^(snr_lin(count)/10));%噪声功率

noise=sqrt(noise_power)*randn(1,length(Sqpsk));%高斯噪声

Sqpsk1=Sqpsk+noise;

%------------------解调--------------------

[DemIpluse,DemQpluse]=Demodulator(Sqpsk1,rf,Nt,rate,Fs,Fc,show);

%----------------抽样判决-------------

threshold=0.3;%判决门限

DemI=Judging(DemIpluse,threshold,M,W_N,zero_in);

DemQ=Judging(DemQpluse,threshold,M,W_N,zero_in);

%--------------------解偏置,码型转换(双极性->0/1码)-------------------

De_PN_Out=(DemI.*sign(PNi'-1/2)+1)/2;

%----------------------解扰------------------

De_Scram=xor(De_PN_Out,Scrambler');

%-----------------------解扩--------------------------

temp=reshape(De_Scram,64,(length(De_Scram)/64));

De_Walsh=ones((length(De_Scram)/64),1)*Walsh';

De_chips=diag(De_Walsh*temp);

%-----------------------解交织-----------------

De_INTERL=reshape(De_chips,16,24);

De_InterLeave=reshape(De_INTERL',length(De_chips),1);

%----------------------解卷积------------------

[DataOutMetric]=SoftVitDec(G_Vit,De_InterLeave,1);

bit_err_count(count)=bit_err_count(count)+sum(xor(De_InterLeave,Vit_Out));

show=0;%关闭图形显示

end

%-------------------误码率计算---------------------

bit_err_rate(count)=bit_err_count(count)/(length(Vit_Out)*kk);

end

Output_Print(DataOut',19.2e3,1,'解调恢复序列')

%---结果显示---

figure;

semilogy(snr_lin,bit_err_rate,'b-*');holdon;

title('信噪比曲线图')

xlabel('信噪比/dB');

ylabel('误码率');

gridon;

%-------------------PN码产生---------------------

%************************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***********************************

end

%************************维特比码*****************************

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

%SoftVitDec.m

function[xx,BestMetric]=SoftVitDec(G,y,ZeroTail);

%

%此函数是实现软判决输入的Viterbi译码

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

%G生成多项式的矩阵

%y输入的待译码序列

%ZeroTail判断是否包含‘0’尾

%xxViterbi译码输出序列

%BestMetric最后的最佳度量

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

L=size(G,1);%输出码片数

K=size(G,2);%生成多项式的长度

N=2^(K-1);%状态数

T=length(y)/L;%最大栅格深度

OutMtrx=zeros(N,2*L);

fors=1:

N

in0=ones(L,1)*[0,(dec2bin((s-1),(K-1))-'0')];

in1=ones(L,1)*[1,(dec2bin((s-1),(K-1))-'0')];

out0=mod(sum((G.*in0)'),2);

out1=mod(sum((G.*in1)'),2);

OutMtrx(s,:

)=[out0,out1];

end

OutMtrx=sign(OutMtrx-1/2);

PathMet=[100;zeros((N-1),1)];%初始状态=100

PathMetTemp=PathMet(:

1);

Trellis=zeros(N,T);

Trellis(:

1)=[0:

(N-1)]';

y=reshape(y,L,length(y)/L);

fort=1:

T

yy=y(:

t);

fors=0:

N/2-1

[B0ind0]=max(PathMet(1+[2*s,2*s+1])+[OutMtrx(1+2*s,0+[1:

L])*yy;OutMtrx(1+(2*s+1),0+[1:

L])*yy]);

[B1ind1]=max(PathMet(1+[2*s,2*s+1])+[OutMtrx(1+2*s,L+[1:

L])*yy;OutMtrx(1+(2*s+1),L+[1:

L])*yy]);

PathMetTemp(1+[s,s+N/2])=[B0;B1];

Trellis(1+[s,s+N/2],t+1)=[2*s+(ind0-1);2*s+(ind1-1)];

end

PathMet=PathMetTemp;

end

xx=zeros(T,1);

if(ZeroTail)

BestInd=1;

else

[Mycop,BestInd]=max(PathMet);

end

BestMetric=PathMet(BestInd);

xx(T)=floor((BestInd-1)/(N/2));

NextState=Trellis(BestInd,(T+1));

fort=T:

-1:

2

xx(t-1)=floor(NextState/(N/2));

NextState=Trellis((NextState+1),t);

end

if(ZeroTail)

xx=xx(1:

end-K+1);

end

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

end

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

当前位置:首页 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1