基于VHDL语言的2FSK调制解调.docx
- 文档编号:9582630
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:13
- 大小:623.68KB
基于VHDL语言的2FSK调制解调.docx
《基于VHDL语言的2FSK调制解调.docx》由会员分享,可在线阅读,更多相关《基于VHDL语言的2FSK调制解调.docx(13页珍藏版)》请在冰点文库上搜索。
基于VHDL语言的2FSK调制解调
基于VHDL语言的2FSK调制解调
设计课程:
CPLD/FPGA设计
设计内容:
2FSK的调制解调
涉及专业:
通信工程
实验人员:
指导教师:
刘明珠
基于VHDL语言的2FSK调制解调
摘要:
在数字通信系统中,数字调制与解调技术占有非常重要的地位。
本人通过对FSK调制解调的基本原理了解,用VHDL语言实现了2FSK调制解调器的设计,仿真结果表明此设计方案是可行的,系统具有较高的实用性和可靠性。
加深了对VHDL语言的了解和掌握,特别是对于通信工程的学生进一步理解通信原理,对提高个人对通信工程的兴趣和动手、思考能力有很大的帮助。
一,实验目的:
1,通过实验加深对VHDL语言基本语句的理解和掌握;
2,培养自主思考独立完成VHDL程序设计的能力;3,加深学生(尤其通信工程)对所学专业知识的掌握;
4,培养学生的专业兴趣和独立思考能力。
二,设计原理:
1,FSK频移键控:
FSK又称频移键控,它是利用载频频率的变化来传递数字信息。
数字调频信号可以分为相位离散和相位连续两种。
若两个载频由不同的独立振荡器提供,它们之间的相位互不相关,就称为相位离散的数字调频信号;若两个频率由同一振荡器提供,只是对其中一个载频进行分频,这样产生的两个载频就是相位连续的数字调频信号。
本实验中,二进制的基带信号是用两电平来表示的。
‘1’对应于载波频率F1,‘0’对应于F2。
2,2FSK的调制
FSK就是利用载波信号的频率变化来传递数字信息。
在2FSK中,载波的频率随二进制基带信号在f1和f2两个频率点之间变化。
故其表达式为:
所以2FSK的调制波形如下:
实现数字频率调制的一般方法有两种,直接调频法和键控法。
直接调频法:
即连续调制中的调频(FM)信号的产生方法,是将输入的基带脉冲去控制一个振荡器的参数而改变振荡频率,这种方法实现容易,输出的波形相位是连续的,但电路的振荡频率稳定性较差。
键控法:
是用数字信号去控制两个独立振荡器,两个门电路按数字信号的变化规律通断。
3,2FSK的解调
2FSK频移键控信号的解调方法有多种,有模拟鉴频法德数字检测法,有非相干解调方法和相干解调方法。
然而在数字系统中倡议使用数字检测法较为方便和有效,具体的原理和方法我们将会在第三部分详细介绍。
三,研究内容:
这一部分我们会详细研究和讨论怎样用数字方式和VHDL语言来实现2FSK的调制和解调。
1.2FSK调制器设计
1.1分频法实现2FSK调制器
在数字系统中我们可以借用调制方法中开闭开关的键控法莱实现2FSK的调制。
利用分频器的知识来求取不同频率的两列方波f1,f2来作为信号的载波,通过对信号的检测,判断信号是否为‘0’或‘1’来决定信号f1或f2通过,实现2FSK的调制。
实现2FSK调制的原理方框图如图1所示。
图12FSK调制实现原理框图
其中FSK调制的核心部分包括分频器、二选一选通开关等,图中的两个分频器分别产生两路数字载波信号;二选一选通开关的作用是以基带信号作为控制信号,当基带信号为‘0’时,选通载波f1;当基带信号为‘1’时,选通载波f2。
从选通开关输出的信号就是数字FSK信号。
这里的调制信号为数字信号。
2.2FSK解调器的设计
2.1分频法实现2FSK解调器
通过调制过程我们里了解到2FAK利用载波频率的不同来实现信号‘0’‘1’的区分和传输,所以我们也同样可以利用传出信号频率的大小来识别原始信号的值,一般情况下我们利用高频来代表信号‘1’时准确度较高,详细的证明在这里不做解释了。
利用信号波形在单位时间内(例如clk信号的n个周期,一般去f1,f2信号周期的最小公倍数)上升沿的次数来测定信号频率。
显而易见,只要是在单位时间内上升沿次数高的频率一定就大,次数可能会呈现倍数关系,然后判断决定让次数大的那个单位时间里输出‘1’,反之输出‘0’。
实现2FSK解调器的原理方框图如图2所示。
图22FSK解调实现原理框图。
3,2FSK调制解调器整体设计
对于2FSK调制解调的整体设计,通过前两个过程的分析就变得十分简单,只要保证两个过程时钟信号一致,且调制的输出信号作为解调的输入信号即可。
在整体设计过程中,整体电路如图3所示,其中x为基带信号,y为经过调制解调后的解调信号。
图32FSK调制解调整体电路。
四,源程序代码:
1.FSK调制VHDL程序
Libraryieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_arith.all;
Useieee.std_logic_unsigned.all;
Entityfskis
Port(clk:
instd_logic;
Start:
instd_logic;
x:
instd_logic;
y:
outstd_logic);
endfsk;
architecturebehaveoffskis
signalq1:
integerrange0to11;
signalq2:
integerrange0to3;
signalf1,f2:
std_logic;
begin
process(clk,start)
begin
if(clk’eventandclk=’1’)then
if(start=’0’)then
q1<=0;
elsif(q1<=5)then
f1<=’1’;q1<=q1+1;
elsif(q1=11)then
f1<=’0’;q1<=0;
elsef1<=’0’;q1<=q1+1;
endif;
endif;
endprocess;
process(clk,start)
begin
if(clk’eventandclk=’1’)then
if(start=’0’)then
q2<=0;
elsif(q2<=1)then
f2<=’1’;q2<=q2+1;
elsif(q1=3)then
f2<=’0’;q2<=0;
elsef2<=’0’;q2<=q2+1;
endif;
endif;
endprocess;
process(clk,x)
begin
if(clk’eventandclk=’1’)then
if(x=’1’)then
y<=f1;
else
y<=f2;
endif;
endif;
endprocess;
endbehave;
2.FSK解调VHDL程序
Libraryieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_arith.all;
Useieee.std_logic_unsigned.all;
Entityfsk2is
Port(clk:
instd_logic;
Start:
instd_logic;
x:
instd_logic;
y:
outstd_logic);
endfsk2;
architecturebehaveoffsk2is
signalq:
integerrange0to11;
signalxx:
std_logic;
signalm:
integerrang0to4;
begin
process(clk,start)
begin
if(clk’eventandclk=’1’)then
xx<=x;
if(start=’0’)then
q<=0;
elsif(q=11)then
q<=0;
elseq<=q+1;
endif;
endif;
endprocess;
process(xx,q)
begin
if(q=11)then
m<=0;
else
if(q=10)then
if(m<2)then
y<=‘0’;
elsey<=’1’;
endif;
endif;
if(xx’eventandxx=1)then
m<=m+1;
endif;
endif;
endprocess;
endbehav;
3.FSK调制解调VHDL程序
Libraryieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_arith.all;
Useieee.std_logic_unsigned.all;
Entityfskis
Port(clk:
instd_logic;
Start:
instd_logic;
x:
instd_logic;
y:
outstd_logic);
endfsk;
architecturebehaveoffskis
signalq1:
integerrange0to11;
signalq2:
integerrange0to3;
signalf1,f2:
std_logic;
signalxx:
std_logic;
begin
process(clk,start)
begin
if(clk’eventandclk=’1’)then
if(start=’0’)then
q1<=0;
elsif(q1<=5)then
f1<=’1’;q1<=q1+1;
elsif(q1=11)then
f1<=’0’;q1<=0;
elsef1<=’0’;q1<=q1+1;
endif;
endif;
endprocess;
process(clk,start)
begin
if(clk’eventandclk=’1’)then
if(start=’0’)then
q2<=0;
elsif(q2<=1)then
f2<=’1’;q2<=q2+1;
elsif(q1=3)then
f2<=’0’;q2<=0;
elsef2<=’0’;q2<=q2+1;
endif;
endif;
endprocess;
process(clk,x)
begin
if(clk’eventandclk=’1’)then
if(x=’1’)then
xx<=f1;
else
xx<=f2;
endif;
endif;
endprocess;
process(xx,q1)
begin
if(q1=11)then
m<=0;
else
if(q1=10)then
if(m<2)then
y<=‘0’;
elsey<=’1’;
endif;
endif;
if(xx’eventandxx=1)then
m<=m+1;
endif;
endif;
endprocess;
endbehave;
五,结果仿真
1.2FSK调制器仿真结果
2FSK调制器仿真结果
2.2FSK解调仿真结果
2FSK解调仿真结果
3.2FSK调制解调仿真结果
2FSK调制解调仿真结果
六,实验结论
基于2FSK的基本原理,进行二进制调制解调器的设计。
运用VHDL语言对器件进行功能描述,进行仿真。
设计过程中调制阶段的基带信号,经调制仿真得到解调所需的输入信号。
解调阶段对来自调制阶段得到的信号进行解调,所得解调信号即为原来调制基带信号,起到了调制解调的作用。
整个设计过程采用VHDL语言实现,设计灵活、修改方便,具有良好的可移植性及产品升级的系统性。
七,参考文献
1.罗朝霞,高书莉.CPLD/FPGA设计及应用.北京:
人民邮电出版社
2.谭会生,张昌.EDA技术及运用(第二版).西安:
西安电子科技大学出版社
3.张辉,曹丽娜.现代通信原理与技术(第二版).西安:
西安电子科技大学出版社
4.XX文库——相关知识材料
个人声明:
此实验报告成果归本人所有,仅供互相学习参考,任何集体和个人不得转载使用!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 VHDL 语言 FSK 调制 解调
![提示](https://static.bingdoc.com/images/bang_tan.gif)