#基于VHDL语言的2FSK调制解调 下载本文

内容发布更新时间 : 2024/6/26 20:57:06星期一 下面是文章的全部内容请认真阅读。

哈尔滨理工大学VHDL程序设计

基于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的调制波形如下:

第 1 页 共 9 页

哈尔滨理工大学VHDL程序设计

实现数字频率调制的一般方法有两种, 直接调频法和键控法。

直接调频法:即连续调制中的调频(FM) 信号的产生方法,是将输入的基带脉冲去控制一个振荡器的参数而改变振荡频率,这种方法实现容易,输出的波形相位是连续的,但电路的振荡频率稳定性较差。

键控法:是用数字信号去控制两个独立振荡器,两个门电路按数字信号的变化规律通断。

3,2FSK的解调

2FSK频移键控信号的解调方法有多种,有模拟鉴频法德数字检测法,有非相干解调方法和相干解调方法。然而在数字系统中倡议使用数字检测法较为方便和有效,具体的原理和方法我们将会在第三部分详细介绍。

三,研究内容:

这一部分我们会详细研究和讨论怎样用数字方式和VHDL语言来实现2FSK的调制和解调。

1.2FSK调制器设计 1.1 分频法实现2FSK调制器

在数字系统中我们可以借用调制方法中开闭开关的键控法莱实现2FSK的调制。利用分频器的知识来求取不同频率的两列方波f1,f2来作为信号的载波,通过对信号的检测,判断信号是否为‘0’或‘1’来决定信号f1或f2通过,实现2FSK的调制。实现2FSK调制的原理方框图如图1所示。

图1 2FSK调制实现原理框图

其中FSK调制的核心部分包括分频器、二选一选通开关等,图中的两个分频器分别产生两路数字载波信号;二选一选通开关的作用是以基带信号作为控制信号,当基带信号为‘0’时,选通载波f1;当基带信号为‘1’时,选通载波f2。从选通开关输出的信号就是数字FSK信号。这里的调制信号为数字信号。 2.2FSK解调器的设计 2.1 分频法实现2FSK解调器

第 2 页 共 9 页

哈尔滨理工大学VHDL程序设计

通过调制过程我们里了解到2FAK利用载波频率的不同来实现信号‘0’‘1’的区分和传输,所以我们也同样可以利用传出信号频率的大小来识别原始信号的值,一般情况下我们利用高频来代表信号‘1’时准确度较高,详细的证明在这里不做解释了。

利用信号波形在单位时间内(例如clk信号的n个周期,一般去f1,f2信号周期的最小公倍数)上升沿的次数来测定信号频率。显而易见,只要是在单位时间内上升沿次数高的频率一定就大,次数可能会呈现倍数关系,然后判断决定让次数大的那个单位时间里输出‘1’,反之输出‘0’。实现2FSK解调器的原理方框图如图2所示。

图2 2FSK解调实现原理框图。

3,2FSK调制解调器整体设计

对于2FSK调制解调的整体设计,通过前两个过程的分析就变得十分简单,只要保证两个过程时钟信号一致,且调制的输出信号作为解调的输入信号即可。 在整体设计过程中,整体电路如图3所示,其中x为基带信号,y为经过调制解调后的解调信号。

图3 2FSK调制解调整体电路。

四,源程序代码: 1.FSK调制VHDL程序

Library ieee;

Use ieee.std_logic_1164.all; Use ieee.std_logic_arith.all; Use ieee.std_logic_unsigned.all; Entity fsk is

Port(clk:in std_logic; Start:in std_logic; x:in std_logic;

第 3 页 共 9 页