基于卷积编码的扩频通信系统软件平台设计 打印要点.docx
《基于卷积编码的扩频通信系统软件平台设计 打印要点.docx》由会员分享,可在线阅读,更多相关《基于卷积编码的扩频通信系统软件平台设计 打印要点.docx(23页珍藏版)》请在冰点文库上搜索。
基于卷积编码的扩频通信系统软件平台设计打印要点
基于卷积编码的扩频通信系统
软件平台设计
班级:
通信131
姓名:
崔校通
学号:
201300484316
目录
一设计内容及要求3
1.1设计目的3
1.2设计任务4
1.3设计内容4
二设计原理5
2.1数据源5
2.2卷积编码5
2.3m序列发生器6
2.4扩频与解扩6
2.4.1扩频6
2.4.2解扩7
2.5Viterbi译码7
2.6可靠度评估8
三软件仿真及结果分析9
3.1信源调制9
3.1.1信息码生成模块9
3.1.2卷积编码9
3.1.3伪随机码生成模块10
3.1.4扩频调制模块11
3.1.5BPSK调制模块12
3.2信息传输13
3.2.1加噪模块13
3.3信宿解调14
3.3.1BPSK解调模块14
3.3.2解扩模块15
3.3.3Viterbi译码16
3.4性能分析19
3.4.1卷积扩频分析19
3.4.2信源信宿比较20
3.4.3频谱分析20
四心得体会22
参考文献23
前言
扩频通信是现代通信系统中新的通信方式,它具有较强的抗干扰、抗衰落和抗多径性能,频谱利用率高。
扩频信号是不可预测的、伪随机的宽带信号,其带宽远大于要传输的数据(信息)带宽,同时接收机中必须有与宽带载波同步的副本。
在发端输人的信息先调制形成数字信号,然后由扩频码发生器产生的扩频码序列去调制数字信号以展宽信号的频谱,展宽后的信号再调制到射频发送出去。
在接收端收到的宽带射频信号,变频至中频,然后由本地产生的与发端相同的扩频码序列去相关解扩,再经信息解调,恢复成原始信息输出。
通信系统都要进行3次调制和相应的解调。
一次调制为信息调制。
与一般通信系统比较,多了扩频调制和解扩部分。
扩频通信具备如下特征:
(1)数字传输方式;
(2)传输信号的带宽远大于被传信息带宽;(3)带宽的展宽,是利用与被传信息无关的函数(扩频函数)对被传信息的信元重新进行调制实现的;(4)接收端用相同的扩频函数进行相关解调(解扩),求解出被传信息的数据。
用扩频函数(也称伪随机码)调制和对信号相关处理是扩频通信有别于其他通信的两大特点。
一设计内容及要求
1.1设计目的
(1)学习通信中的纠错编码技术及其主要应用;
(2)掌握扩频通信原理技术及其特点,了解其在通信系统中特别是第三代移动通信系统所采用的码分多址(CDMA)技术中的应用;
(3)学会用C或MATLAB软件方法设计一般通信系统;
(4)学习CDMA手机的信息处理过程,掌握其基带电路主要组成部分和工作原理及功能;模拟CDMA手机的信息处理过程。
完成基带电路主要组成部分的软件平台设计并评估系统的可靠性。
1.2设计任务
(1)建立CDMA手机处理信息的卷积编码扩频通信系统
(2)软件实现卷积编码和Viterbi译码的算法
(3)软件实现扩频通信系统的扩频与解扩
(4)评估卷积编码扩频通信系统的可靠性
1.3设计内容
本次课程设计主要实现的任务有:
建立卷积编码扩频通信系统;软件实现卷积编码和Viterbi译码的算法;软件实现扩频通信系统的扩频与解扩;评估卷积编码扩频通信系统的可靠性。
系统设计的总体框图如图1-1:
m序列发生器
判决数据
Viterbi
译码
解扩
信道
扩频
卷积编码
数据源
图1-1
二设计原理
2.1数据源
随机产生b(t)={b(0),b
(1),b
(2),……}的二进制数据
2.2卷积编码
卷积码(又称连环码),是由伊莱亚斯(P.Elis)提出的一种非分组码。
它把k比特信息段编成n比特的码组,该码组不仅同当前的k比特信息段有关,而且还同前面的(N-1)个信息段有关联(N为大于1的整数)。
通常,把卷积码记作(n,k,N),其中k为输入码元数,n为输出码元数,N为约束长度,表示编码器的存储器级数。
卷积编码属于信道编码,主要用来纠正码元的随机差错,它是以牺牲效率来换取可靠性,利用增加监督位,进行检错和纠错。
卷积码编码器是一个由k个输入端、n个输出端,且具有(N-1)或m节移位寄存器构成的有限状态记忆系统,通常称为时序网络,其原理如图2-1所示。
图2-1
2.3m序列发生器
二进制的m序列是一种重要的伪随机序列,有良好的自相关特性,有时称为伪噪声序列。
m序列是最长线性移位寄存器序列的简称。
顾名思义,m序列是由多级移位寄存器或其延迟元件通过线性反馈产生的最长的码序列。
它能产生的的最大长度的码序列为2^n-1位。
2.4扩频与解扩
将编码输出与扩频码相乘,即完成扩频;将扩频后的信号(叠加有噪声)与扩频码相乘,即为解扩。
2.4.1扩频
扩频通信的基本特点是传输信号所占用的频带宽度(W)远大于原始信息本身实际所需的最小(有效)带宽(DF),其比值称为处理增益Gp,其中Gp=W/DF。
任何信息的有效传输都需要一定的频率宽度,为了充分利用有限的频率资源,增加通路数目,人们广泛选择不同调制方式,采用宽频信道(同轴电缆、微波和光纤等)和压缩频带等措施,同时力求使传输的媒介中传输的信号占用尽量窄的带宽。
因现今使用的电话、广播系统中,无论是采用调幅、调频或脉冲编码调制制式,Gp值一般都在十多倍范围内,统称为“窄带通信”,而扩频通信的Gp值,高达数百、上千,称为 “宽带通信”。
如图图2-2为扩频系统能够一般原理图:
图2-2
2.4.2解扩
正如在一般的窄带通信中,已调信号在接收端都要进行解调来恢复所传的信息。
在扩频通信中接收端则用与发送端相同的扩频码序列与收到的扩频信号进行相关解调,恢复所传的信息。
换句话说,这种相关解调起到解扩的作用。
即把扩展以后的信号又恢复成原来所传的信息。
这种在发端把窄带信息扩展成宽带信号,而在收端又将其解扩成窄带信息的处理过程,会带来一系列好处。
弄清楚扩频和解扩处理过程的机制,是理解扩频通信本质的关键所在。
基本的扩频过程就是在收端产生与发端完全相同的PN码,对收到的扩频信号,在平衡调制器中再一次进行二相相移键控调制。
可以看出发端相移键控调制后的信号在收端又被恢复成原来的载波信号。
当然一个必要的条件是本地的PN码信号的相位必须和收到的相移后的信号在相移点对准,才能正确地将相移后的信号再翻转过来。
2.5Viterbi译码
Viterbi译码算法是一种卷积码的解码算法。
卷积码的Viterbi译码是根据接收码字序列寻找编码时通过网格图最佳路径的过程,找到最佳路径即完成了译码过程,并可以纠正接收码字中的错误比特。
所谓“最佳”,是指最大后验条件概率:
P(C/R)=maxj[P(Cj/R)],其译码流程为:
(1)根据接收码符号计算出相应的分支量度值;
(2)进入某一状态的分支量度与其前状态路径量度累加求和;
(3)比较到达当前状态的新的路径量度的大小,选择最大者作为新的状态路径量度存储起来,并保存与此路径对应的码字;
(4)对所有状态都实施上述加、比、选运算;
(5)在每一译码时刻,满足延时就从256条留存路径中,选择路径量度最大的一条路径作为译码数输出;
(6)进入下一译码时刻,重复以上步骤,直至译码结束。
2.6可靠度评估
用误码率(BER)指标,计算公式
……
比较两个数据
三软件仿真及结果分析
3.1信源调制
3.1.1信息码生成模块
code_length=20;%信息码元个数
N=1:
code_length;
rand('seed',0);
x=sign(rand(1,code_length)-0.5);%信息码从0、1序列变成-1、1序列
x1=rectpulse(x,800);%每个码元内采样800个点
plot(x1);
axis([016000-1.51.5]);
title('信源信息码序列');
gridon;
生成信息码的波形图
3.1.2卷积编码
functionoutput=cnv_encd(g,k0,input)
ifrem(length(input),k0)>0
input=[input,zeros(size(1:
k0-rem(length(input),k0)))];
end
n=length(input)/k0;
ifrem(size(g,2),k0)>0
error('Error,gisnotoftherightsize.')
end
l=size(g,2)/k0;
n0=size(g,1);
u=[zeros(size(1:
(l-1)*k0)),input,zeros(size(1:
(l-1)*k0))];
u1=u(l*k0:
-1:
1);
fori=1:
n+l-2
u1=[u1,u((i+l)*k0:
-1:
i*k0+1)];
end
uu=reshape(u1,l*k0,n+l-1);
output=reshape(rem(g*uu,2),1,n0*(l+n-1));
********************************************************
g=[00101001;00000001;10000001];
k0=2;input=[10011100110000111];
output=cnv_encd(g,k0,input)
********************************************************
g=[101;111];k0=1;
channel_output=[01101111010001];
[decoder_output,survivor_state,cumulated_metric]=viterbi(g,k,channel_output)
3.1.3伪随机码生成模块
functiony=mgen(g,state,N)
%输入g:
m序列生成多项式(10进制输入)
%state:
寄存器初始状态(10进制输入)
%N:
输出序列长度
figure
(1)
g=19;state=8;N=2000;
gen=dec2bin(g)-48;
M=length(gen);
curState=dec2bin(state,M-1)-48;
fork=1:
N
y(k)=curState(M-1);
a=rem(sum(gen(2:
end).*curState),2);
curState=[acurState(1:
M-2)];
end
x_code=sign(y-0.5);
pn=rectpulse(x_code,8);%每个伪码元内采样8个点
plot(pn);
axis([0600-1.51.5]);
title('伪随机码序列');
gridon;
生成伪随机码的波形图
3.1.4扩频调制模块
gt=x1.*pn;
plot(gt);
axis([01000-1.51.5]);
title('复合码序列');
gridon;
生成的复合码波形图
3.1.5BPSK调制模块
%用BPSK调制
fs=20e6;
f0=30e6;
fori=1:
2000
AI=2;
dt=fs/f0;
n=0:
dt/7:
dt;%一个载波周期内采样8个点
cI=AI*cos(2*pi*f0*n/fs);
x_bpsk((1+(i-1)*8):
i*8)=gt((1+(i-1)*8):
i*8).*cI
end
plot(x_bpsk);
axis([0200-2.52.5]);
title('BPSK调制后的波形');
gridon;
生成BPSK调制后的波形图
3.2信息传输
3.2.1加噪模块
sigma=0.1;
nt=sigma*randn(1,20);
nt1=rectpulse(nt,800);
gt1=gt+nt1;
fs=20e6;
f0=30e6;
fori=1:
2000
AI=2;
dt=fs/f0;
n=0:
dt/7:
dt;%一个载波周期内采样8个点
cI=AI*cos(2*pi*f0*n/fs);
x_bpsk1((1+(i-1)*8):
i*8)=gt1((1+(i-1)*8):
i*8).*cI
end
plot(x_bpsk1);
axis([0200-2.52.5]);
title('加噪后已调波的波形');
gridon;
生成加噪后已调波的波形图
3.3信宿解调
3.3.1BPSK解调模块
AI=1;
dt=fs/f0;
n=0:
dt/7:
dt;%一个载波周期内采样八个点
cI=AI*cos(2*pi*f0*n/fs);
fori=1:
2000
s((1+(i-1)*8):
i*8)=x_bpsk1((1+(i-1)*8):
i*8).*cI;
end
plot(s);
axis([0200-2.52.5]);
title('解调后的波形');
gridon;
生成BPSK解调后的波形图
3.3.2解扩模块
%相关解扩
jk_code=s.*pn;
%低通滤波
wn=5/1000000;%截止频率wn=fn/(fs/2),这里fn为扩频码的带宽5M
b=fir1(16,wn);
H=freqz(b,1,16000);
xx=filter(b,1,jk_code);
plot(xx);
axis([016000-1.51.5]);
title('解扩并滤波后的波形');
gridon;
生成解扩后的波形图
3.3.3Viterbi译码
function[decoder_output,survivor_state,cumulated_metric]=viterbi(g,k,channel_output)
n=size(g,1);
ifrem(size(g,2),k)~=0
error('Sizeofgandkdonotagree')
end
ifrem(size(channel_output,2),n)~=0
error('channeloutputnotoftherightsize')
end
L=size(g,2)/k;
number_of_states=2^((L-1)*k);
forj=0:
number_of_states-1
forl=0:
2^k-1
[next_state,memory_contents]=nxt_stat(j,l,L,k);
input(j+1,next_state+1)=l;
branch_output=rem(memory_contents*g',2);
nextstate(j+1,l+1)=next_state;
output(j+1,l+1)=int_state(branch_output);
end
end
state_metric=zeros(number_of_states,2);
depth_of_trellis=length(channel_output)/n;
channel_output_matrix=reshape(channel_output,n,depth_of_trellis);
survivor_state=zeros(number_of_states,depth_of_trellis+1);
fori=1:
depth_of_trellis-L+1
flag=zeros(1,number_of_states);
ifi<=L
step=2^((L-i)*k);
else
step=1;
end
forj=0:
step:
number_of_states-1
forl=0:
2^k-1
branch_metric=0;
binary_output=bin_state(output(j+1,l+1),n);
forll=1:
n
branch_metric=branch_metric+metric(channel_output_matrix(ll,i),binary_output(ll));
end
if((state_metric(nextstate(j+1,l+1)+1,2)>state_metric(j+1,1)+branch_metric)|flag(nextstate(j+1,l+1)+1)==0)
state_metric(nextstate(j+1,l+1)+1,2)=state_metric(j+1,1)+branch_metric;
survivor_state(nextstate(j+1,l+1)+1,i+1)=j;
flag(nextstate(j+1,l+1)+1)=1;
end
end
end
state_metric=state_metric(:
2:
-1:
1);
end
fori=depth_of_trellis-L+2:
depth_of_trellis
flag=zeros(1,number_of_states);
last_stop=number_of_states/(2^((i-depth_of_trellis+L-2)*k));
forj=0:
last_stop-1
branch_metric=0;
binary_output=bin_state(output(j+1,1),n);
forll=1:
n
branch_metric=branch_metric+metric(channel_output_matrix(ll,i),binary_output(ll));
end
if((state_metric(nextstate(j+1,1)+1,2)>state_metric(j+1,1)+branch_metric)|flag(nextstate(j+1,1)+1)==0)
state_metric(nextstate(j+1,1)+1,2)=state_metric(j+1,1)+branch_metric;
survivor_state(nextstate(j+1,1)+1,i+1)=j;
flag(nextstate(j+1,1)+1)=1;
end
end
state_metric=state_metric(:
2:
-1:
1);
end
state_sequence=zeros(1,depth_of_trellis+1);
state_sequence(1,depth_of_trellis)=survivor_state(1,depth_of_trellis+1);
fori=1:
depth_of_trellis
state_sequence(1,depth_of_trellis-i+1)=survivor_state((state_sequence(1,depth_of_trellis+2-i)+1),depth_of_trellis-i+2);
end
decoder_output_matrix=zeros(k,depth_of_trellis-L+1);
fori=1:
depth_of_trellis-L+1
dec_output_deci=input(state_sequence(1,i)+1,state_sequence(1,i+1)+1);
dec_output_bin=bin_state(dec_output_deci,k);
decoder_output_matrix(:
i)=dec_output_bin(k:
-1:
1)';
end
decoder_output=reshape(decoder_output_matrix,1,k*(depth_of_trellis-L+1));
cumulated_metric=state_metric(1,1);
3.4性能分析
3.4.1卷积扩频分析
3.4.2信源信宿比较
3.4.3频谱分析
通过以上图形可以得出的结论如下:
在加入卷积后,系统的抗干扰能力比没有加卷积的时候强;加入扩频比不加扩频的时候抗干扰能力强,并且扩频因子越大,系统的抗干扰能力越强。
在相同条件下,码率越小系统的抗干扰能力越好。
四心得体会
转眼间方向课程设计就结束了。
这次课程设计也是我们大学学习中的最后一次课程设计了,因此对于这次课程设计我也更加珍惜,比以前更加认真对待。
回想以前的多次课程设计,似乎也觉得这次比以前学到的东西要多。
毕竟这次课程设计是我们专业方向的课设,对专业只是的要求也比较高,不仅让我们能巩固到进入大学以来所学的专业知识,更让我们提前体会到进入社会后从事专业技术工作的状态。
这次课程设计要求我们用到MATLAB软件工具或者是C语言进行软件的编程,来实现课设中所要求的卷积编码和Viterbi译码的算法以及实现扩频通信系统的扩频与解扩。
这就要求我们对MATLAB和C语言能够熟练应用,面对复杂的程序编写刚开始我和我的小组成员有点儿手足无措,不知从哪里入手,但经过老师对课设原理的基本讲解后,我们对课设实现的基本模块也有了初步了解。
在这个基础上我们有从图书馆借来MATLAB的相关书籍来作为参考,也把和《通信原理》课本相关的知识内容进行了巩固。
最后我们针对课设原理的模块各个击破,最后终于把程序完成了,病进行了相关的仿真和调试。
通过这次课设又让我进一步学习到了小组合作的重要性,也学到了在面对困难及问题的时候不能慌张,要仔细认真的从中一步步找错误,急于求成只能让问题更复杂。
在以后毕业的工作中更需要这种合作精神以及严谨认真的态度。
这些对我们以后的发展都很重要。
参考文献
【1】兴雯等.扩展频谱通信及其多址技术[M].西安:
西安电子科技大学出版社, 2004.【2】蓉,李署坚.扩频通信技术[J].无线电工程,2001,(S1).
【3】淑君,柳铎.浅谈扩频通信技术及其应用[J].山东电子,2004,(01).
【4】孟令彪.无线扩频通信技术述略[J].商场现代化,2004,(15).1998,(06).
【6】徐明元,邵玉斌.matlab仿真在通信与电子工程中的应用[M].西安电子科技大学出版社,2001
【7】郭海燕,毕红军.MATLAB在伪随机码的生成及仿真中的应用[J].计算机仿真,21(3),2004.3