2ASK在FPGA中的实现.docx
- 文档编号:8367235
- 上传时间:2023-01-30
- 格式:DOCX
- 页数:22
- 大小:278.21KB
2ASK在FPGA中的实现.docx
《2ASK在FPGA中的实现.docx》由会员分享,可在线阅读,更多相关《2ASK在FPGA中的实现.docx(22页珍藏版)》请在冰豆网上搜索。
2ASK在FPGA中的实现
2ASK&FPG肿的实现
12ASK的FPGA中的实现3
1.12ASK基本原理4
1.1.12ASK信号的时域表达式与波形4
1.1.22ASK信号的功率谱密度4
1.22ASK调制解调原理方法7
1.2.12ASK调制原理方法7
1.2.22ASK解调原理方法8
1.32ASK调制解调的FPGA的实现与调试8
1.3.12ASK的FPGA实现方案8
1.3.22ASK调制部分的代码设计10
1.3.32ASK解调部分代码设计12
1.3.4功能仿真13
1.3.5板上调试15
1.4总结17
1.5思考题18
1.6参考文献19
12ASK的FPGA中的实现
2ASK振幅键控调制)是根据载波信号的有无传输数字信号”0”和”1”的
一种最基本的数字调制方式。
1.12ASK概述及原理
1.1.12ASK的发展及应用
振幅键控法(2ASK最初用于电报系统,(用在传递莫斯Morse电码上面,莫斯在早期的“无线”应用上广为采用,通过开关的长度传递码元)但由于它在抗噪声的能力上较差,故在数字通信中用得不多。
不过,二进制振幅键控常常作为研究其他数字调制方式的基础,因此,熟悉它仍然是必要的。
ASK的应用:
ASK和00!
通信协议通常用在近距离无线通信应用中,例如家庭自动化、工业网络、无线基站、遥控无钥匙进入系统(RKE)以及胎压监测系统(TPMS)。
00K特别适合电池供电的便携式设备使用,因为这样的系统在发送‘0'时无需发送载波,因而可以节省功率。
不同的应用涉及的载波频率可能变化很大,例如在某些基站的低频有线通信中约为2MHz在使用ISM频段(工业、
科学和医疗)的短距离无线通信中约433MHz。
各种无线技术,包括蓝牙、ZigBee、Wi-Fi在当前的消费电子行业中已经取得了一定进展。
这些协议提供了设备之间安全通信的机制,通常都工作在2.4GHz的ISM频段,并且组合使用频移键控(FSK)、相移键控(PSK)和幅移键控(ASK)调制技术。
这些技术提供的安全性包括通信的信道跳频和扩频模式。
这种方案很难被侦听到,因此具有很高的安全性,并能改善抗噪声性能。
所有这些方法在发送‘0'和‘1'的时候都会消耗发送功率。
遗憾的是,这些协议还是具有相对较高的复杂性以及较高的硬件实现成本,特别是当安全性和高抗噪声性不是硬性要求的时候。
ASK缺点:
它的抗噪声能力较差,尤其是抗衰落的能力不强,因而一般只适宜在恒参信道下采用,只能用在像电缆一类的恒参信道中。
1.1.22ASK基本原理
1)2ASK信号的时域表达式与波形
设信息源发出消息代码二是由二进制符号1、0组成的序列,假定符号1出现的概率为P,符号0出现概率为1-P,它们彼此独立。
即:
(1-1)
(1-2)
其中「为码元宽度,则丁)单极性不归零脉冲序列,则根据幅度调制的原理,一个二进制的振幅键控信号可以表示成一个单极性矩形脉冲序列与一个正弦型载波的相乘,即:
仏/)=X2詡一吃)
(1-3)
(1-4)
IH-r-QQ_
土%(f—吨)二坯)
令,则二进制振幅键控信号可表示为
旳40)二耳Jcgqf
其中j•为基带数字信号
2ASK信号的波形:
图1-1二进制振幅键控(2ASK)信号的波形示意图
2)2ASK信号的功率谱密度
二进制振幅键控信号的时域表达式为
(1-5)
其中:
1,出现槪率为戸
0,出现慨率为(1-F)
且厂'为随机变量
2ASK信号的功率谱密度的表达式
进制振幅键控信号的时域表达式为
旳』Z耳訓一吃)
(1-6)
其中:
1,出现槪率为P
卫,出现慨率为〔1-刊
且'为随机变量
10<£<7^
—耳他
则为一随机的单极性矩形脉冲序列,设'匕的功率谱密度为二:
-,
1的功率谱密度为,则有
5仙佃)二寸闪S+叫)+耳@一叫)〕
(1-7)
由上式可知,L可由确定。
因是单极性的随机矩形脉冲序列,■1,''的功率谱密度-为:
E(/)=乳珂-刊g⑺「+7?
少xg銚)蔦&-讥)
2—
(1-8)
设-:
-的傅立叶变换为■-'■,根据矩形波」的频谱特点,对于■-:
的所
有整数有',所以
2ASK信号的功率谱的特点:
(1)2ASK信号的功率谱由连续谱和离散谱两部分组成
(2)2ASK信号的带宽是基带脉冲波形带宽的两倍
1.22ASK调制解调原理方法
1.2.12ASK调制原理方法
2ASK信号的产生有两种方法:
一种是通过调制信号与载波相乘来实现-
相乘电路法;另外一种是通过用调制信号控制开关电路的痛断来选择载波的有无实现的通-断键控法;
(1)相乘电路法:
图1-2二进制振幅键控(2ASK)信号的产生方法之一:
相乘电路法
(2)通-断键控法:
图1-3中,当基带信号''为高电平时,开关电路如图所示,当基带信号;为低电平时,开关处于断开状态,二进制振幅键控信号状态为零,此时二进制振幅键控信号又常称为通-断键控信号(00K信号)。
1222ASK解调原理方法
2ASKQ0K信号的解调通常有两种方法:
一种是相干解调;另外一种是包络检波的非相干解调。
(1)非相干解调法(包络检波法)
疋时脉冲
图1-4二进制振幅键控信号的非相干接收系统方框图此方案的优点是:
不需要提取载波,实现简单。
(2)相干解调法
冲
图1-5二进制振幅键控信号的相干接收系统方框图
此方案优点:
系统误码率比非相干解调的要低,但相差并不大。
1.32ASK调制解调的FPGA的实现与调试
1.3.12ASK的FPGA实现方案
2ASK的FPGA勺实现在同一种调制解调方案下,可以用不同的实现方法来
实现,接着本章就介绍2ASK实现的的各种方法以及介绍本文实现的方法。
1.2ASK调制实现方案
2ASK信号的产生实现比较简单,如图1-6:
1*
图1-62ASK调制信号的产生框图
输入信号是01信号,通过二选一开关,当信号为零时直接输出0,当信号
为一时,使信号和载波相乘,这样就可以产生2ASK调制信号。
载波可以用正弦波,也可以用数字载波。
如用正弦波作为载波,则在解调的时候必须用上面原理介绍的解调方法。
如选用数字载波,则在解调时只需要通过对一个信号周期内的调制信号进行脉冲计数,便可实现解调。
2.2ASK解调实现方案
以正弦波为载波的2ASK解调在原理部分已经介绍,在此不再赘述。
下面介绍以数字信号为载波的2ASK信号的解调。
1)计数器法解调方案
解调框图如下:
图1-7以数字信号为载波的2ASK信号解调框图
时钟计数器进行以信号周期为周期的循环计数,为判别模块提供判别时刻,调制信号计数器也是以信号周期为周期的循环计数器,将判别时刻的计数值送入判别模块进行判别,由此实现解调。
2)同步采样解调方案
同步采样法的解调原理框图如下:
图1-8提取载波同步后调制信号采样的原理框图
解调思想:
根据2ASK调制信号的特点,即:
在高电平调制的地方有载波,而低电平调制的地方没有载波。
所以可以通过载波同步信号采样,即可恢复出调制信号,但是采样时刻要和数据位同步,在这里是通过DPLL数字锁相环实现
了与载波的信号锁相后,再利用锁相后信号的下降沿采样调制信号,即可实现了2ASK的解调。
3.2ASK实现方案的选择
根据前面的分析,可以知道。
用数字信号为载波来实现2ASK相对容易很多,原理也简单。
传统的以正弦波为载波的2ASK实现起来可以增进对通信原理的
理解。
两种实现方法各有各自的优点,本次实验从容易的开始做,因此选用数字载波。
对于2ASK解调方案的选择:
方案一:
通过计数器实现解调,整体实现起来比较简单,但其只能实现调制信号为固定长度的解调,使用起来非常局限。
方案二:
通过采样解调,整体电路设计比方案一稍难,但是其可以对任何信号进行解调,克服了方案一的缺点。
(这里是直接把调制端的载波信号连接到解调模块的)
经过方案比较,两种方案都比较容易在FPGA中实现,但考虑到对通信原理中调制解调原理的理解以及其实用性,这里采用方案二解调。
1.3.22ASK调制部分的代码设计
moduletwo_ASK(clk,reset,en,sig_S,out_rdy,carriers,modata);
inputclk;inputreset;
inputen;
outputmodata;
outputcarriers;
outputsig_S,out_rdy;
reg[1:
0]cnt;
regcarriers;
wiremodata;
regsig_S,out_rdy;
reg[2:
0]addr;
reg[2:
0]count;
parameterCOUNT=3'd7;
always@(posedgeclk)
begin:
initial_control
if(reset)begin
addr<=3'd0;
count<=3'd0;
end
elseif(en)begin
count<=count+1;if(count==COUNT)beginaddr<=addr+1;endelseaddr<=addr;out_rdy<=1;
end
end
always@(posedgeclk)begin:
Red_sig
if(en)case(addr)4'd0:
sig_S<=0;4'd1:
sig_S<=0;4'd2:
sig_S<=1;4'd3:
sig_S<=0;4'd4:
sig_S<=0;4'd5:
sig_S<=1;4'd1:
sig_S<=1;
4'd7:
sig_S<=1;
endcase
end
//下面实现载波产生
always@(posedgeclk)
beginif(reset)begincnt<=2'b00;carriers<=0;endelseif(en)cnt<=cnt+1;carriers<=~cnt[1];
end
assignmodata=sig_S&carriers;
endmodule程序的前面一部分是产生01信号,后面的是产生载波,然后是使01信号和载波相乘,实现了调制。
1.3.32ASK解调部分代码设计
moduleASK_two(clk,en,reset,Kmode,carriers,pll_carriers,modata,demodata);
inputclk,reset,en;
inputmodata,carriers;
input[2:
0]Kmode;
outputdemodata,pll_carriers;
regdemodata;
Dpllu1(.fout(pll_carriers),.se(),.clk(clk),.reset(reset),.enable(en),.Kmode(Kmode),.fin(carriers));
always@(negedgepll_carriers)
begin
if(reset)
demodata<=0;
else
begin
if(!
modata)
demodata<=0;
elsedemodata<=1;
end
end
endmodule
为了使提高解调采样数据的准确性,这里用数字锁相环Dpll对载波相位锁
定后,用pll_carriers下降沿正好是在modata数据比特的中心采样,能够减少解调的误码率。
(DPLL的Verilog代码作为附件放在最后面)。
1.3.4功能仿真
1)调制部分代码的功能仿真
图1-9调制部分功能仿真
如图3-4所示,sig_S为01信号,modata为调制后的信号,观察波形,很
容易可以验证仿真结果正确
2)整体的功能仿真
整体的功能仿真是通过顶层模块调用调制模块和解调模块,实现整体的仿真。
顶层模块代码如下:
module
ASK_ding(clk,reset,en,sig_S,Kmode,mo_rdy,carriers,pll_carriers,modata,demodata);
inputclk,reset,en;
input[2:
0]Kmode;
outputsig_S;
outputcarriers,pll_carriers;
outputmodata;
outputmo_rdy;
outputdemodata;
two_ASKU_mo(.clk(clk),.reset(reset),.en(en),•sig_S(sig_S),.out_rdy(mo_rdy),.carriers(carriers),.modata(modata));
ASK_twoU_demo(.clk(clk),.en(en),.Kmode(Kmode),.reset(reset),.carriers(carriers),.modata(modata),.pll_carriers(pll_carriers),.demodata(demodata));
Endmodule
对顶层模块进行仿真,结果如图3-5
其中ent为时钟计数器,k为调制信号计数器,sig_S为01信号,modata
为已调信号,demodata为解调后信号,观察上图,可知道代码仿真正确,实现
了2ASK的调制解调
1.3.5板上调试
板上调试代码如下:
module
ASK_ding_chipscope(clk,sig_S,mo_rdy,carriers,pll_carriers,modata,demodata);
inputclk;
outputsig_S;
outputcarriers,pll_carriers;
outputmodata;
outputmo_rdy;
outputdemodata;
wirereset,en;
wire[2:
0]Kmode;
//forchipscope
wire[35:
0]control0;
wire[35:
0]control1;
wire[4:
0]async_out;
wire[4:
0]mydata;
assignreset=async_out[0];
assignen=async_out[1];
assignKmode[2:
0]=async_out[4:
2];
assignmydata[0]=sig_S;
assignmydata[1]=carriers;
assignmydata[2]=pll_carriers;
assignmydata[3]=modata;
assignmydata[4]=demodata;
ASK_dingask(.clk(clk),
.reset(reset),
.en(en),
.sig_S(sig_S),
.Kmode(Kmode),
.mo_rdy(mo_rdy),
.carriers(carriers),
.pll_carriers(pll_carriers),
.modata(modata),
.demodata(demodata)
);
my_iconicon(.CONTROLO(controlO),
.CONTROL1(controll)
);
my_ilaila(.CONTROL(controlO),
.CLK(clk),
.DATA(mydata),
.TRIGO(carriers)
);
my_viovio(.CONTROL(control1),
.ASYNC_OUT(async_out)
);
Endmodule
板上调试需要添加三个核,icon,vio和ila,需要添加clk的引脚约束,
如图1-11
1P祇1Hwe亠
PptIIircctc.
Lccb.11sii
P-a.1tvSeiu|?
Clv^L.tvP!
•/
clk
IxLpu.1
AT1S
jf/1
Qg'npdaL电
Output
18/A.
Output
K/Ft
si«_S
Output
H/A
图1-11clk引脚约束
添加完约束后可以通过ise进行实现和产生bit流文件,下载到V-2板上便可进行chipscope在线调试。
调试结果如下
Vio核波形
o-Krwile
b
1
0
1
图1-12vio核波形
这里使用vio核主要是想看各个使能端口信号的作用和做开关模拟操作经检验,结果符合要求。
Ila核波形
1
1
iiiir
1
1
ii丨「iiiH
0
0
rLrLrLrLnrLrLruirLrLrLrLrLrLRrLrLrLnrLrLrLnrLrLrLnrLrLrLrLrL
1
1
ULrLn_rLr_rLn_r_rjuLn_rLn_n_n_rLrLrLrLrLrLmruuirLrLTrLru
0
□
nJiuin.imiilliui
图1-13ila核波形
用ila核来看信号波形,从图中可以看出,实现了2ASK信号的调制与解调。
解调信号虽然有一定的延时,但结果正确。
这个延时是因为判别模块的判别时刻较信号开始时刻延时5个时钟周期,所以解调信号就如图中那样。
1.4总结
在本文设计中遇到的主要问题的2ASK解调部分的实现,开始是用计数法实现解调,虽然可以正确的解调,但其有很大的局限性:
如果一个系统设计好了只限于特定的信号的解调(即每个信号的长度是一个特定数字)。
为了克服这一
弊端,之后想到用同步采样解调法,实现的时候要考虑到载波时钟的同步(文中使用的DPLL数字锁相环来实现的)。
完成本文设计需要对通信原理调制解调特别是2ASK的原理及相关知识点要非常熟练,同时本文是建立在对FPGA熟练使用基础上,这就需要大家对数字电路和FPGA设计很熟悉。
2ASK分析方法是最基本的,也是其他数字调制的理论基础。
此次重在学习2ASKM制解调的原理方法的基础上实现简单的数字载波的2ASK的调制解调。
结
合本文所做的工作,后续还需要完善的地方是:
1•模拟高频载波:
调制信号用正弦信号,对整个ASK原理理解是非常好的,也便于对整个数字调制解调系统的理解。
2.本次ASK调制解调只涉及到二进制的方案,当然还有多进制振幅键控
(MASK调制解调需要后续完成(提高信息传输速率),特别是典型的四进制振幅键控(QASK。
1.5思考题
1.除了文中提到的以及实现方式,还有没有其他的实现方式?
2.结合文中解调方案中,是否可以把计数器法解调不限制与信号的固定长度?
3.本文只是2ASK的一个功能实现,如果应用的实际的调制解调电路中还有哪些需要考虑?
4.2ASK性能指标主要有哪些,如何在实际电路中提高这些性能?
5.2ASK调制解调与其他数字调制解调的思想共同点有哪些?
1.6参考文献
[1]EDA先锋工作室.薛小刚,葛毅敏.XilinxISE9.xFPGA/CPLD设计指南[M].北京:
人民邮电出版社,2007.
[2]樊昌信,徐炳祥,吴成柯等•通信原理(第5版)[M].北京:
国防工业出版社,2001.
[3]常红霞.基于FPGA的QDPSK调制解调技术的研究及实现.中国期刊网,2007.
[4]SamirPalnitkar,夏宇闻,胡燕祥等.VerilogHDL数字设计与综合
(第二版)[M].北京:
电子工业出版社,2004.
[5]FPGA.xst.pdf..2007.
[6]Xilinx.Virtex-2UserGuide,2007.
附录:
DPLL的verilog代码
1.顶层模块
moduleDpll(fin,fout,se,clk,reset,enable,Kmode);
inputfin,clk;
inputreset,enable;//reset
高电平复位,enable高电平有效
input[2:
0]Kmode;//outputfout;//fout
滤波计数器的计数模值设定
是锁频锁相输出
outputse;
wireidout,ca,bo;
wire[14:
0]N;
xor_pdu1(.a(fin),.b(fout),.y(se));
kcounteru2(.Kclock(clk),.reset(reset),.dnup(se),.enable(enable),
.Kmode(Kmode),.carry(ca),.borrow(bo));
idcounteru3(.IDclock(clk),.reset(reset),.inc(ca),.dec(bo),.IDout(idout));
counter_Nu4(.clk(clk),.fin(fin),.reset(reset),.count_N(N));
div_Nu5(.clkin(idout),.n(N),.reset(reset),.clkout(fout));
endmodule
2.异或鉴相器
modulexor_pd(a,b,y);//异或门鉴相器inputa,b;
outputy;
regy;always@(aorb)begin
y=aAb;
end
endmodule
3.加减脉冲计数器
4.
modulekcounter(Kclock,reset,dnup,enable,Kmode,carry,borrow);
wirecarry,borrow;
//根据计数器模值设置信号Kmode来设置预设模值寄存器的值always@(Kmode)
begin
case(Kmode)
3'b001:
Ktop<=7;
3'b010:
Ktop<=15;
3'b011:
Ktop<=31;
3'b100:
Ktop<=13;
3'b101:
Ktop<=127;
3'b110:
Ktop<=255;
3'b111:
Ktop<=511;
default:
Ktop<=15;
endcase
end
//根据鉴相器输出的加减控制信号dnup进行可逆计数器的加减运算always@(posedgeKclockorposedgereset)
begin
if(reset)
Count<=0;
elseif(enable)
begin
if(!
dnup)
begin
if(Count==Ktop)
Count<=0;
else
Count<=Count+1;
end
else
begin
if(Cou
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ASK FPGA 中的 实现