您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 基于VHDL的多功能调制解调器的设计
...一、设计功能与要求调制解调器被人们称为“猫”,它是在发送端通过调制将数字信号转换为模拟信号,而在接收端通过解调再将模拟信号转换为数字信号的一种装置。这篇报告将通过这学期所学习的VHDL的相关知识设计一个多功能的调制解调器,下面是设计要求:1、实现二进制振幅键控(2ASK)的调制与解调;2、实现二进制频移键控(2FSK)的调制与解调;3、实现二进制相位键控(2PSK)的调制与解调。二、设计思路1、2ASK调制与解调(1)、2ASK调制器原理图如图1、图2所示,输入随机信号序列Ak,经过基带信号形成器,产生波形序列,然后通过惩罚器进行频谱搬移,并使用带通滤波器来滤除高频谐波和低频干扰,最终输出振幅键控信号)(tuASK。(2)、2ASK解调器以包络解调为例来说明,原理图如图3所示,其中分频器对时钟信号进行分频得到与发射端数字载波相同的数字载波信号;寄存器在时钟上升沿到来时把数字ASK信号存入寄存器;计数器利用分频输出的载波信号作为计数器的时钟信号,在其上升沿到来时,对寄存器中的ASK载波个数进行计数,当计数值大于3时,输出位-1-1,否则为0;判决器则以数字载波为判决时钟,对计数器输出信号进行抽样判决,并输出解调后的基带信号。2、2FSK调制与解调(1)、2FSK调制器的原理图如图4所示,信号通过2个独立的分频器产生不同频率的载波信号,然后通过选通开关选择不同频率的高频信号,从而实现2FSK调制。(2)、2FSK与2ASK解调相似,也是由分频器、寄存器、计数器和判决器构成,其结构构图如图5所示:3、2PSK调制与解调相位键控分为绝对调相(CPSK)与相对调相(DPSK)两种。CPSK是利用载波的不同相位去直接传送数字信息的一种方式;DPSK则是利用载波相位的相对变化来传送数字信号,即利用前后码之间载波相位的变化表示数字基带信号。(1)CPSK调制与解调-2-CPSK调制器结构图如图6所示。计数器对外部时钟信号进行分频与计数,并输出两路相位不同的数字载波信号;2选1开关在基带信号的控制下,对两路载波信号进行选择,输出信号即为CPSK信号。CPSK解调器的结构图如图7所示,计数器q输出与发射端同步的0相数字载波;将计数器输出的0相载波与数字CPSK信号中的载波进行与运算,当两比较信号在判决时刻都为1时,输出为1,否则输出为0,从而实现解调。(2)、DPSK调制与解调DPSK调制器的结构图如图8所示,CPSK调制器,计数器,异或门和寄存器共同完成绝对码到相对码的变换功能。DPSK解调器关键则是实现相对码到绝对码的转换,其结构图如图9所示,DPSK解调采用CPSK解调器与相对码到绝对码转换电路即可实现,其中,相对码到绝对码的转换是以在以计数器输出信号为时钟控制下完成的。-3-三、原理图说明1、顶层模块的原理图利用选择译码器输出矢量的每一位分别作为调制解调器的工作使能输入信号,从而实现不同条件下多种调制解调方式间的选择,对于PSK调制与解调以CPSK为例来输入原理图。2、利用仿真程序生成2ASK调制器的RTL视图及电路符号-4-3、利用仿真程序生成2ASK解调器的RTL视图及电路图4、利用仿真程序生成2FSK调制器的RTL视图及电路图-5-5、利用仿真程序生成2FSK解调器的RTL视图及电路图-6-6、利用仿真程序生成2CPSK调制器的RTL视图及电路图7、利用仿真程序生成2CPSK解调器的RTL视图及电路图-7-8、利用仿真程序生成2DPSK调制器绝对码转换为相对码的RTL视图及电路图9、利用仿真程序生成2DPSK解调器相对码转换为绝对码的RTL视图及电路图-8-四、VHDL源代码的实现1、选择译码器的程序libraryieee;useieee.std_logic_1164.all;entityselecterisport(sel:instd_logic_vector(2downto0);Q:outstd_logic_VECTOR(5downto0));endselecter;architecturertlofselecterisbeginprocess(sel)begincaseseliswhen000=Q=000001;when001=Q=000010;when010=Q=000100;when011=Q=001000;-9-when100=Q=010000;when101=Q=100000;whenothers=null;endcase;endprocess;endrtl;2、2ASK调制器的程序libraryieee;useieee.std_logic_arith.all;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityPL_ASKisport(clk:instd_logic;--系统时钟start:instd_logic;--开始调制信号x:instd_logic;--基带信号y:outstd_logic);--调制信号endPL_ASK;architecturebehavofPL_ASKissignalq:integerrange0to3;--分频计数器signalf:std_logic;--载波信号beginprocess(clk)beginifclk'eventandclk='1'thenifstart='0'thenq=0;elsifq=1thenf='1';q=q+1;--改变q后面数字的大小,就可以改变载波信号的占空比elsifq=3thenf='0';q=0;--改变q后面数字的大小,就可以改变载波信号的频率elsef='0';q=q+1;endif;endif;endprocess;y=xandf;--对基带码进行调制endbehav;3、2ASK解调器的程序libraryieee;useieee.std_logic_arith.all;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityPL_ASK2isport(clk:instd_logic;--系统时钟-10-start:instd_logic;--同步信号x:instd_logic;--调制信号y:outstd_logic);--基带信号endPL_ASK2;architecturebehavofPL_ASK2issignalq:integerrange0to11;--计数器signalxx:std_logic;--寄存x信号signalm:integerrange0to5;--计xx的脉冲数beginprocess(clk)--对系统时钟进行q分频,beginifclk'eventandclk='1'thenxx=x;--clk上升沿时,把x信号赋给中间信号xxifstart='0'thenq=0;--if语句完成q的循环计数elsifq=11thenq=0;elseq=q+1;endif;endif;endprocess;process(xx,q)--此进程完成ASK解调beginifq=11thenm=0;--m计数器清零elsifq=10thenifm=3theny='0';--if语句通过对m大小,来判决y输出的电平elsey='1';endif;elsifxx'eventandxx='1'thenm=m+1;--计xx信号的脉冲个数endif;endprocess;endbehav;4、2FSK调制器的程序libraryieee;useieee.std_logic_arith.all;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityPL_FSKisport(clk:instd_logic;--系统时钟start:instd_logic;--开始调制信号x:instd_logic;--基带信号y:outstd_logic--调制信号);-11-endPL_FSK;architecturertlofPL_FSKissignalq1:integerrange0to11;--载波信号f1的分频计数器signalq2:integerrange0to3;--载波信号f2的分频计数器signalf1,f2:std_logic;--载波信号f1,f2beginprocess(clk)--此进程通过对系统时钟clk的分频,得到载波f1beginifclk'eventandclk='1'thenifstart='0'thenq1=0;elsifq1=5thenf1='1';q1=q1+1;--改变q1后面的数字可以改变载波f1的占空比elsifq1=11thenf1='0';q1=0;--改变q1后面的数字可以改变载波f1的频率elsef1='0';q1=q1+1;endif;endif;endprocess;process(clk)--此进程通过对系统时钟clk的分频,得到载波f2beginifclk'eventandclk='1'thenifstart='0'thenq2=0;elsifq2=0thenf2='1';q2=q2+1;--改变q2后面的数字可以改变载波f2的占空比elsifq2=1thenf2='0';q2=0;--改变q2后面的数字可以改变载波f2的频率elsef2='0';q2=q2+1;endif;endif;endprocess;process(clk,x)--此进程完成对基带信号的FSK调制beginifclk'eventandclk='1'then-12-ifx='0'theny=f1;--当输入的基带信号x=’0’时,输出的调制信号y为f1elsey=f2;--当输入的基带信号x=’1’时,输出的调制信号y为f2endif;endif;endprocess;endrtl;5、2FSK解调器的程序libraryieee;useieee.std_logic_arith.all;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityPL_FSK2isport(clk:instd_logic;--系统时钟start:instd_logic;--同步信号x:instd_logic;--调制信号y:outstd_logic--基带信号);endPL_FSK2;architecturebehavofPL_FSK2issignalq:integerrange0to11;--分频计数器signalm:integerrange0to5;--计数器signalxx:std_logic;--寄存器beginprocess(clk)--对系统时钟进行q分频beginifclk'eventandclk='1'thenxx=x;--在clk信号上升沿时,x信号对中间信号xx赋值ifstart='0'thenq=0;--if语句完成Q的循环计数elsifq=11thenq=0;elseq=q+1;endif;endif;endprocess;process(q,xx)--此进程完成FSK解调-13-beginifq=11thenm=0;--m计数器清零elsifq=10thenifm=3theny='0';--if语句通过对m大小,来判决y输出的电平elsey='1';endif;elsifxx'eventandxx='1'thenm=m+1;endif;endprocess;endbehav;6、2CPSK调制器的程序libraryieee;useieee.std_logic_arith.all;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;e
本文标题:基于VHDL的多功能调制解调器的设计
链接地址:https://www.777doc.com/doc-5608595 .html