综合课程设计报告CDMA部分 含FPGAverilog代码.docx
《综合课程设计报告CDMA部分 含FPGAverilog代码.docx》由会员分享,可在线阅读,更多相关《综合课程设计报告CDMA部分 含FPGAverilog代码.docx(19页珍藏版)》请在冰豆网上搜索。
综合课程设计报告CDMA部分含FPGAverilog代码
第一章项目背景
1.1CDMA原理及背景简介
CDMA是码分多址的英文缩写(CodeDivisionMultipleAccess),它是在数字技术的分支——扩频通信技术上发展起来的一种崭新的无线通信技术。
CDMA技术的原理是扩频技术,即将需传送的具有一定信号带宽信息数据,用一个带宽远大于信号带宽的高速伪随机码(GOLD码)进行调制,使原数据信号的带宽被扩展,再经载波调制并发送出去。
接收端使用完全相同的伪随机码,与接收的带宽信号作相关处理,把宽带信号换成原信息数据的窄带信号即解扩,以实现信息通信。
码分多址(CDMA)技术是扩频通信技术在多用户通信系统中的应用,其利用了扩频序列的编码正交可分性,使得多个用户信号可以在同一媒介、同一频率、同一时间内传输。
每一路码分信号,都是经过扩频调制的信号,每一路码分信道都分配了独特的扩频序列。
扩频通信的主要特征是它们的频带宽度B比信息速率Rb大得多,通过扩频得到扩频增益,用于抵抗各种干扰。
因此就CDMA本身的优势而言,CDMA拥有无与伦比的巨大潜力。
扩频通信技术、码分多址技术和同步技术是CDMA的关键技术,通过CDMA数字基带发射系统的研究更进一步了解CDMA数字基带系统的过程,加深对CDMA的扩频通信技术和码分多址技术的理解,加深对CDMA系统的理解。
同时,我们可以知道CDMA技术为什么得以快速发展。
本项目的重点集中于应用FPGA来实现CDMA数字基带系统发射系统,并在此基础上实现接收系统,具体讲就是将信号进行扩频、GOLD码调制、基带求和、再进行并/串转换,在接收端进行解扩和解调,还原出初始发送的数据,其中利用的载波调制技术室2PSK技术,解调利用相干解调。
1.2FPGA在通信领域的巨大作用
21世纪是一个数字化的世纪,数字信号处理在新的世纪中有着广泛的应用,信息高速公路、移动通信、自动化系统都采用了数字信号处理技术。
单片机系统,虽然在一定程度上满足了部分需要,但是由于它的速度和数据处理能力非常有限,不能满足现代数字系统数据的高速率的要求。
近几年发展起来的FPGA技术,满足了这种需求,FPGA功能上比早期的PLD更加强大,主要有编程方式方便先进,并且拥有较高的工作频率,像Altera的Cyclone的EP1C3系列,其工作频率就有40MHZ。
此外,硬件描述语言VerilogHDL在编写风格上与C语言十分的接近,所以FPGA技术不仅可以完成单片机所不能完成的指标,而且更具有灵活性。
这种基于EDA技术的芯片正在成为电子系统设计的主流。
此外,FPGA还具有静态可重复编程和动态在系统重构的特性,使得硬件的功能可以像软件一样通过编程来修改。
因此,FPGA技术的应用前景非常广阔。
FPGA的发展不断满足当今电子工业的快速发展,随着集成电路的设计规模日益增大,复杂程度日益增高,FPGA的出现和发展大大改变了传统的系统设计方法,这种方法使得电子系统设计变得更加简单方便、灵活快速。
第二章CDMA系统简介
CDMA技术的基础是扩频通信。
扩频:
用来传输信息的信号带宽远远大于信息本身带宽的一种传输方式,频带的扩展由独立于信息的扩频码来实现,与所传信息数据无关,在接收端用同步接收实现解扩和数据恢复。
如下图,我们可以知道CDMA系统的基本原理和TDMA、FDMA的区别。
CDMA、TDMA、FDMA比较
扩频通信的理论基础就是著名的香农定理:
…………………………………………
(1)
这个公式表明,在高斯信道中当传输系统的信号噪声功率比S/N下降时,可用增加系统传输带宽W的办法来保持信道容量C不变。
对于任意给定的信号噪声功率比,可以用增大传输带宽来获得较低的信息差错率。
正因为这个原因,扩频通信具有比较强的抗噪声干扰的能力。
CDMA技术是以扩频通信为基础的载波调制和多址接入技术,所以如何实现扩频部分对于整个CDMA系统的实现有着重要的影响。
2.1CDMA系统的关键技术
扩频技术是CDMA系统的基础,在扩频系统中,常使用伪随机码来扩展频谱,伪随机码的特性,如编码类型、长度、速度等在很大程度上决定了扩频系统的性能,如抗干扰能力、多址能力、码捕获时间。
因此要实现扩频部分,关键就是如何选择一个比较好的方法来实现PN码产生器。
而实现PN码产生器的难点就是实现其同步,即在接收端进行解扩所用的PN码和接收到的信号在发送时所用的PN码是同步的,这是扩频技术中的难点。
CDMA系统要求接收机的本地伪随机码与接收到的PN码在结构、频率和相位上完全一致,否则就不能正常接收所发送的信息,接收到的只是一片噪声。
若实现了收发同步但不能保持同步,也无法准确可靠地获取所发送的信息数据。
因此,PN码序列的同步是CDMA通信扩频模块的关键技术。
但是要真正成为一种商业应用的通信系统,还有很多技术问题需要解决,本文暂不做考虑。
2.2CDMA系统的基本结构
CDMA技术是以扩频通信为基础的载波调制和多址接入技术,所以如何实现扩频部分对于整个CDMA系统的实现有着重要的影响。
下图是标准的CDMA系统的基本原理图:
信号经信源编码后成为数字信号,经过纠错编码、卷积编码和交织等相关处理后送入调制器中,利用PN码发生器产生的高速PN码将数字信号变成码片,使得信号的传输带宽远大于信号本身的带宽以实现扩频通信,同时,为了使信号的传输与信道特性相匹配,必须用载波发生器产生的载波去调制扩频信号。
使其频率变为适合信道传愉的射频频段,将数字信号调制成模拟信号后通过放大器发射出去。
在接收端,利用下变频器将射频信号还原成中频信号,采用与发射端相同的信号处理技术再将信号还原成原始信号,从而达到数据通信传输的目的。
下面是我们根据标准的CDMA通信系统设计的我们系统中的发射机框图:
下面是我们系统的接收机框图:
整体的FPGA设计的CDMA通信系统如下:
第三章基于FPGA的CDMA系统设计及仿真分析
FPGA是电子设计领域中最具活力和发展前途的一项技术,它的影响丝毫不亚于70年代单片机的发明和使用。
可以毫不夸张的讲,FPGA能完成任何数字器件的功能。
在PCB完成以后,还可以利用FPGA的在线修改能力,随时修改设计而不必改动硬件电路。
使用FPGA来开发数字电路,可以大大缩短设计时间,减少PCB面积,提高系统的可靠性。
FPGA的这些优点使得FPGA技术在90年代以后得到飞速的发展,同时也大大推动了EDA软件和硬件描述语言的进步。
本设计主要利用了FPGA及VerilogHDL语言来设计CDMA数字基带发送接收系统。
4.1FPGA通信系统设计的注意点
对于通信系统的建模,除了外围的模拟电路的设计是整个大系统需要考虑外,更重要的是针对纯数字部分的输入、输出接口信号的要求,进行细致的研究。
对于数字通信系统,对于不同的VerilogHDL来建模有着不同的效果。
一般对于选择什么方法来进行数字通信的建模,从以下几个方面讨论研究[27]:
·可行性的影响
对于以FPGA通用芯片为目标器件的建模和设计,受到输入信号性质的限制,对于一些速度要求较高的通信系统,由于现行的FPGA目标器件的限制,无法使用。
因此对于通信系统的VerilogHDL建模的可行性应在设计系统方案做充分考虑。
·可靠性分析
对于通信系统来说,实现系统的可靠性指标是VerilogHDL建模的难点,这一点与实现硬件电路是相似的,用硬件描述语言,实现系统功能,有许多方法,实现建模的方法也可以不同,有时不同的建模风格和方式,可以得到相同的设计结果和相近的可靠性能,同时,对于组合逻辑电路来说,设计的可靠性,还要考虑组合逻辑电路的竞争和冒险现象和硬件延时问题。
·效率的影响
系统效率的因素包括芯片资源的优化,软件程序运行的速度等。
从软件设计方面考虑,采用并行方式比串行运行方式运行速率高。
在FPGA设计,合理的引脚定义也是很重要的。
一个好的引脚定义可以充分利用芯片资源,而一个不好的引脚定义可能造成芯片资源的巨大浪费,甚至布线失败。
总的来讲,通信系统的性能可以根据公式来计算,采用波形级的仿真或通过硬件构成样机及进行测量来评估。
对于数字通信系统的VerilogHDL建模,其建模效果最终要经过一定方式的检验和评估,而检验的结果反过来促进其建模或程序设计的改进与完善。
4.2CDMA系统分模块简介、代码及仿真
发射机
分频器模块:
moduleclk_div
(clk_in,rst_n,clk_out);
parametercnt_top=10;
clk_in/clk_out=cnt_top
parameterwidth=4;
parameterduty=50;
inputclk_in;
inputrst_n;
outputclk_out;
regclk_out;
reg[width-1:
0]cnt;
always@(posedgeclk_inornegedgerst_n)
begin
if(!
rst_n)
cnt<=0;
elseif(cnt==(cnt_top-1))
cnt<=0;
else
cnt<=cnt+1'b1;
end
always@(posedgeclk_inornegedgerst_n)
begin
if(!
rst_n)
clk_out<=0;
elseif(cnt<(cnt_top*duty)/100)clk_out<=1;
else
clk_out<=0;
end
endmodule
(系统用的各路时钟)
(PLL模块产生2倍频信号,ROM的读取时钟)
仿真以输入的20M时钟分频得到10K数据信道串行传输时钟为例,可见设计完全正确:
四路用户GOLD序列产生模块(通过ROM寻址):
MATLAB代码:
clc;clearall;
hgld=comm.GoldSequence('FirstPolynomial',[730],...
'SecondPolynomial',[73210],...
'FirstInitialConditions',[0000001],...
'SecondInitialConditions',[0000001],...
'Index',1,'SamplesPerFrame',127);
gold1=step(hgld);
hgld=comm.GoldSequence('FirstPolynomial',[730],...
'SecondPolynomial',[73210],...
'FirstInitialConditions',[0000001],...
'SecondInitialConditions',[0000001],...
'Index',2,'SamplesPerFrame',127);
gold2=step(hgld);
hgld=comm.GoldSequence('FirstPolynomial',[730],...
'SecondPolynomial',[73210],...
'FirstInitialConditions',[0000001],...
'SecondInitialConditions',[0000001],...
'Index',3,'SamplesPerFrame',127);
gold3=step(hgld);
hgld=comm.GoldSequence('FirstPolynomial',[730],...
'SecondPolynomial',[73210],...
'FirstInitialConditions',[0000001],...
'SecondInitialConditions',[0000001],...
'Index',4,'SamplesPerFrame',127);
gold4=step(hgld);
其设计参数如下:
利用quartus的ROM表存储MATLAB生成的周期为127的gold序列,如下:
最终四路gold序列如下所示:
以一路仿真得到的gold码为例,如下图所示:
并串转换模块:
modulepar2ser2(clk,rst,in,out,stat,num,flags,bug);//paralleltoserial
inputclk,rst;
input[3:
0]in;
outputout,stat,num,flags,bug;
regout,stat,num,flags,bug;
reg[1:
0]cnt;
always@(posedgeclkornegedgerst)
begin
if(!
rst)out=0;
else
begin
case(cnt)
2'b00:
out=in[0];
2'b01:
out=in[1];
2'b10:
out=in[2];
2'b11:
out=in[3];
default:
out=in[0];
endcase
end
end
always@(posedgeclk)
begin
cnt=cnt+1;
end
always@(posedgeclk)
begin
begin
stat=in[0];
num=in[1];
flags=in[2];
bug=in[3];
end
end
endmodule
固定一路用户数据为8’b00100110,仿真波形图如下,最下面一列为并串转换数据,倒数第二列为串行时钟,可见串行传输数据为00100110,因此串并转换设计通过。
GOLD序列与并串转换数据过异或门:
载波设置模块:
频率设置小模块:
modulefreq_set(clk,rst,fset);
inputclk,rst;
output[9:
0]fset;
reg[9:
0]fset;
reg[9:
0]temp;
always@(posedgeclkornegedgerst)
begin
if(!
rst)
fset=64;
else
begin
temp=fset;
fset=temp+temp;
end
end
endmodule
正弦波选址(DDS)小模块:
modulecos_adr(clk,rst,adr,fset);//cosfrequencyanditsset
inputclk,rst;
input[9:
0]fset;
output[9:
0]adr;
reg[9:
0]adr;
always@(posedgeclkornegedgerst)
begin
if(!
rst)
begin
adr=0;
end
else
begin
adr=adr+fset;
end
end
endmodule
正弦波幅度步进小模块:
moduleamp_set(clk,sysclk,rst,in,out);
inputsysclk,clk,rst;
input[7:
0]in;
output[7:
0]out;
reg[7:
0]out;
reg[3:
0]cnt;
always@(posedgesysclkornegedgerst)
begin
if(!
rst)out=in;
else
begin
if(in>127)out=127+(in-127)/cnt;//positive
elseout=127-(127-in)/cnt;//negetive
end
end
always@(posedgeclkornegedgerst)
begin
if(!
rst)cnt=1;
elsecnt=cnt+1;
end
endmodule
PSK调制模块:
modulepskmod(clk,rst,seq,in,out);
inputclk,rst,seq;
input[7:
0]in;
output[7:
0]out;
reg[7:
0]out;
always@(posedgeclkornegedgerst)
begin
if(!
rst)
out=0;
else
begin
if(seq)
out=in;
else
out=~in;
end
end
endmodule
仿真得到的2PSK调制波形如下:
可以看出在数据零一跳变点处波形相位发生180度突变,2PSK设计正确。
AWGN信道模拟10dB噪声数据:
MATLAB代码:
clc;
clearall;
y=round(wgn(1,1024,20));
fori=1:
1024
ify(i)<0
y1(i)=-y(i);
else
y1(i)=y(i);
end
end
out=dec2bin(y1,8);
噪声波形如下:
其统计数据如下:
ValueCountPercent
0343.32%
1797.71%
2838.11%
3969.38%
4868.40%
5646.25%
6676.54%
7585.66%
8595.76%
9626.05%
10535.18%
11474.59%
12383.71%
13262.54%
14313.03%
15242.34%
16201.95%
17161.56%
18151.46%
19121.17%
20111.07%
2170.68%
2280.78%
2350.49%
2440.39%
2540.39%
2640.39%
2830.29%
2920.20%
3020.20%
3110.10%
3210.10%
3510.10%
3610.10%
接收机
相干解调模块:
乘法器输出过滤波,然后对输出符号位进行相关判决,得到解调出来的串行零一数据,最终仿真得到的串行接收数据如下:
其中seq_test1为发送端串行数据,seq_test3为发送端gold序列,seq_test2为接收端提取出的相应用户的gold序列,seq_test4为解调出来的串行数据,seq_test4与seq_test1完全一致,说明解调正确。
FIR数字滤波器设计:
FIR滤波器仿真结果如下,结果与理论设计一致:
串并转换:
moduleser2par2(clk,rst,in,out,flag);//serialtoparallel
inputclk,rst;
inputin;
outputflag;
output[3:
0]out;
reg[3:
0]out;
reg[1:
0]cnt;
regflag;
always@(posedgeclkornegedgerst)
begin
if(!
rst)
begin
out=0;
end
else
begin
case(cnt)
2'b00:
out[0]=in;
2'b01:
out[1]=in;
2'b10:
out[2]=in;
2'b11:
out[3]=in;
default:
out[0]=in;
endcase
end
end
always@(posedgeclkornegedgerst)
begin
if(!
rst)flag=0;
else
begin
cnt=cnt+1;
if(cnt==2'b11)flag=1;
elseflag=0;
end
end
endmodule
仿真模拟四个用户数据,每个用户为8位二进制码,结果如下:
经过8*4*=64个串行时钟周期,输出数据稳定为100、84、100、68与输入数据一致,可见解调成功,加上之前的仿真,目前已完整地完成了本项目中关于cdma通信系统的设计,且仿真正确。
经实际烧录结果也与仿真基本一致,接下来便是关于VGA控制doodlejump的设计环节。