基于VHDL语言的2FSK调制解调

  • 格式:doc
  • 大小:710.00 KB
  • 文档页数:10

摘要:在数字通信系统中,数字调制与解调技术占有非常重要的地位。

本人通过对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所示。

图1 2FSK调制实现原理框图其中FSK调制的核心部分包括分频器、二选一选通开关等,图中的两个分频器分别产生两路数字载波信号;二选一选通开关的作用是以基带信号作为控制信号,当基带信号为‘0’时,选通载波f1;当基带信号为‘1’时,选通载波f2。

从选通开关输出的信号就是数字FSK信号。

这里的调制信号为数字信号。

2.2FSK解调器的设计2.1 分频法实现2FSK解调器通过调制过程我们里了解到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 isPort(clk:in std_logic;Start:in std_logic;x:in std_logic;y:out std_logic);end fsk;architecture behave of fsk issignal q1:integer range 0 to 11;signal q2:integer range 0 to 3;signal f1,f2:std_logic;beginprocess(clk,start)beginif(clk’event and clk=’1’)then if(start=’0’)thenq1<=0;elsif(q1<=5)thenf1<=’1’;q1<=q1+1;elsif(q1=11)thenf1<=’0’;q1<=0;else f1<=’0’;q1<=q1+1;end if;end if;end process;process(clk,start)beginif(clk’event and clk=’1’)then if(start=’0’)thenq2<=0;elsif(q2<=1)thenf2<=’1’;q2<=q2+1;elsif(q1=3)thenf2<=’0’;q2<=0;else f2<=’0’;q2<=q2+1;end if;end if;end process;process(clk,x)beginif(clk’event and clk=’1’)thenif(x=’1’)theny<=f1;elsey<=f2;end if;end if;end process;end behave;2.FSK解调VHDL程序Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_arith.all;Use ieee.std_logic_unsigned.all; Entity fsk2 isPort(clk:in std_logic;Start:in std_logic;x:in std_logic;y:out std_logic);end fsk2;architecture behave of fsk2 issignal q:integer range 0 to 11;signal xx:std_logic;signal m:integer rang 0 to 4; beginprocess(clk,start)beginif(clk’event and clk=’1’)thenxx<=x;if(start=’0’)thenq<=0;elsif(q=11)thenq<=0;else q<=q+1;end if;end if;end process;process(xx,q)beginif(q=11)thenm<=0;elseif(q=10)thenif(m<2)theny<=‘0’;else y<=’1’;end if;end if;if(xx’event and xx=1)then m<=m+1;end if;end if;end process;end behav;3.FSK调制解调VHDL程序Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_arith.all;Use ieee.std_logic_unsigned.all;Entity fsk isPort(clk:in std_logic;Start:in std_logic;x:in std_logic;y:out std_logic);end fsk;architecture behave of fsk issignal q1:integer range 0 to 11;signal q2:integer range 0 to 3;signal f1,f2:std_logic;signal xx:std_logic;beginprocess(clk,start)beginif(clk’event and clk=’1’)then if(start=’0’)thenq1<=0;elsif(q1<=5)thenf1<=’1’;q1<=q1+1;elsif(q1=11)thenf1<=’0’;q1<=0;else f1<=’0’;q1<=q1+1; end if;end if;end process;process(clk,start)beginif(clk’event and clk=’1’)then if(start=’0’)thenq2<=0;elsif(q2<=1)thenf2<=’1’;q2<=q2+1;elsif(q1=3)thenf2<=’0’;q2<=0;else f2<=’0’;q2<=q2+1; end if;end if;end process;process(clk,x)beginif(clk’event and clk=’1’)thenif(x=’1’)thenxx<=f1;elsexx<=f2;end if;end if;end process;process(xx,q1)beginif(q1=11)thenm<=0;elseif(q1=10)thenif(m<2)theny<=‘0’;else y<=’1’;end if;end if;if(xx’event and xx=1)then m<=m+1;end if;end if;end process;end behave;五,结果仿真1.2FSK调制器仿真结果2FSK调制器仿真结果2.2FSK解调仿真结果2FSK解调仿真结果3.2FSK调制解调仿真结果2FSK调制解调仿真结果六,实验结论基于2FSK的基本原理,进行二进制调制解调器的设计。

运用VHDL语言对器件进行功能描述,进行仿真。

设计过程中调制阶段的基带信号,经调制仿真得到解调所需的输入信号。