基于FPGA的PSK调制系统实验报告Word文件下载.docx
《基于FPGA的PSK调制系统实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于FPGA的PSK调制系统实验报告Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
为简单起见,载波频率也是1200Hz。
为简单起见,已调信号的相位和基带信的夫系柬用绝对调相方式。
即基带信号为l,己调信号的相位相对于参考相位改变180度。
基带信号为0,已调信号的相位与参考相位相同。
三、实验容
1、PSK调制原理
相移键控(PhaseShiftKeying,PSK),它是受键控的载波相位按数字基带脉冲的规律而改变的一种数字调制方式。
这种以载波的不同相位直接表示相应数字信息的相位键控,通常被称为绝对移相方式。
当基带信号为二进制数字脉冲序列时,所得到的相位键控信号为二进制相位键控,即2PSK,它的表达式为
式中,φ(t)由数字信息“0”“1”控制。
在绝对移相中,因为φ(t)选用的参考相位基准就是未调制的载波,所以φ(t)就是载波的绝对值。
一般说来,数字信息为“1”时,φ(t)=0,数字信息为“0”时,φ(t)=π。
即
如图所示
2、系统总体设计
系统的结构框图
3、系统详细设计
1分频器设计
根据题目中载波频率小于30kHZ的要求,生成载波信号的正弦信号发生器选择16位累加器,则其需要的时钟在30kHZ以上即可。
因此,设计中对20MHZ的系统时钟进行512分频(39KHZ)和16384分频(1.22KHZ)。
512分频所得时钟作为正弦信号发生器的时钟,16384分频所得时钟则作为整个系统的基带信号。
VNDL具体设计见附录一。
通过VHDL包装生成的分频器模块及其波形仿真图如下面两图所示。
分频器模块
分频器模块波形仿真结果
2正弦信号发生器设计
DDS(DirectDigitalSynthesizer)具有较高的频率分辨率,可以实现频率的快速切换,并且在频率切换时能保持相位的连续,很容易实现频率、相位、幅度的数字调制。
本系统的正弦信号发生器模块就是基于DDS技术设计的。
DDS原理图如下:
DDS基本结构
上图中M为相位累加器的位数。
N为信号数据的位数。
F为频率控制字。
fclk为系统的时钟。
由DDS原理知其基频为:
fSIN=fclk/2M
也即是设计的正弦信号发生器的精度为fSIN。
由以上知,当输入的频率控制字为F时,输出正弦波的频率为:
fout=F*fSIN=F*fclk/2M
基于以上DDS原理,系统选择16位的累加器。
一个周期正弦波取64个采样点,在Excel表格中可以用下拉单元格的方式迅速生成地址,地址围为0~63,即波形表中每种波形每周期取64点。
之后输入公式“=sin((A1/64)*2*3.1415926)”,再利用下拉单元格的方式,得到各个地址单元所对应得正弦函数值。
以上得到的正弦函数表往往不能被D/A转换器直接利用,需要将其置映射到D/A转换器所能接受的数据空间。
设计中所用D/A转换器为8位,其数据空间是0——255,可以利用公式“=127.5*(1+B1)”来映射数据,影射后的数据为小数,还须对其取整,输入公式“=INT(C1)”。
然后复制所得数据,在QuartusII平台中生成hex文件。
由以上可得,系统需要使用6位地址线8位数据线的ROM作为数据存储器。
时钟为512分频(约为39KHZ)所得信号。
具体电路图如图10所示。
正弦信号发生器电路图
设计时将频率控制字设置为8192。
也即输出的正弦波频率为4.88KHZ。
仿真结果如图所示。
正弦信号发生器模块波形仿真结果
3PSK模块设计
PSK模块仿真结果如图
PSK模块仿真波形
4数模转换
本系统数模转换器采用DAC0832,数模转换模块如下图18所示。
输出的模拟量与输入的数字量(DN-1*2N-1+……+D0*20)成正比,这就实现了从数字量到模拟量的转换。
输入可有28(=256)个不同的二进制组态,输出为256个电压之一,即输出电压不是整个电压围任意值,只能是256个可能值中的一个。
本系统要求输出量是电压,而DAC0832输出的是电流量,所以还必须经过一个外接的运算放大器转换成电压,这里选用OP07集成运放,此运放具有极低的输入失调电压、极低的失调电压温漂能长期稳定工作等特点。
图18D/A转换模块
系统总电路
3:
源程序清单
1、分频器程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYclkdivIS
PORT(clk:
INSTD_LOGIC;
--clk_div2:
OUTSTD_LOGIC;
--clk_div4:
--clk_div8:
--clk_div16:
--clk_div32:
--clk_div256:
clk_div512:
clk_div16384:
OUTSTD_LOGIC
);
ENDclkdiv;
ARCHITECTURErtlOFclkdivIS
SIGNALcount:
STD_LOGIC_VECTOR(13DOWNTO0);
BEGIN
PROCESS(clk)
IF(clk'
eventANDclk='
1'
)THEN
IF(count="
111"
Count<
=(OTHERS=>
'
0'
);
ELSE
=count+1;
ENDIF;
ENDPROCESS;
--clk_div2<
=count(0);
--clk_div4<
=count
(1);
--clk_div8<
=count
(2);
--clk_div16<
=count(3);
--clk_div32<
=count(4);
--clk_div256<
=count(7);
clk_div512<
=count(8);
clk_div16384<
=count(13);
ENDrtl;
2、加法器程序
libraryieee;
ENTITYADDER16IS
PORT(
A:
INSTD_LOGIC_VECTOR(15DOWNTO0);
B:
S:
OUTSTD_LOGIC_VECTOR(15DOWNTO0)
ENDADDER16;
ARCHITECTUREbehavOFADDER16IS
BEGIN
S<
=A+B;
ENDbehav;
3、寄存器程序
ENTITYREG32BIS
LOAD:
DIN:
DOUT:
ENDREG32B;
ARCHITECTUREbehavOFREG32BIS
BEGIN
PROCESS(LOAD,DIN)
IFLOAD'
EVENTANDLOAD='
THEN
DOUT<
=DIN;
ENDIF;
4、ROM程序
LIBRARYieee;
USEieee.std_logic_1164.all;
LIBRARYaltera_mf;
USEaltera_mf.all;
ENTITYDATAROMIS
PORT
(
address:
INSTD_LOGIC_VECTOR(5DOWNTO0);
inclock:
INSTD_LOGIC;
q:
OUTSTD_LOGIC_VECTOR(7DOWNTO0)
ENDDATAROM;
ARCHITECTURESYNOFdataromIS
SIGNALsub_wire0:
STD_LOGIC_VECTOR(7DOWNTO0);
COMPONENTaltsyncram
GENERIC(
clock_enable_input_a:
STRING;
clock_enable_output_a:
init_file:
intended_device_family:
lpm_hint:
lpm_type:
numwords_a:
NATURAL;
operation_mode:
outdata_aclr_a:
outdata_reg_a:
widthad_a:
width_a:
width_byteena_a:
NATURAL
PORT(
clock0:
address_a:
q_a:
ENDCOMPONENT;
BEGIN
q<
=sub_wire0(7DOWNTO0);
altsyncram_component:
altsyncram
GENERICMAP(
clock_enable_input_a=>
"
BYPASS"
clock_enable_output_a=>
init_file=>
data.hex"
intended_device_family=>
CycloneII"
lpm_hint=>
ENABLE_RUNTIME_MOD=YES,INSTANCE_NAME=ROM1