1、多进制数字相位调制(MPSK)1 前言:VHDL 主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL 的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL 的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分) ,既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是 VHDL 系统设计的基本点。2 设计主题2.1 设计目的(1).掌握 MPSK 的
2、设计原理(2).掌握 MPSK 的 VHDL 设计2.2 MPSK 的设计原理多进制数字相位调制也称多元调相或多相制。它利用具有多个相位状态的正弦波来代表多组二进制信息码元,即用载波的一个相位对应于一组二进制信息码元。如果载波有 2k个相位,它可以代表 k 位二进制码元的不同码组。多进制相移键控也分为多进制绝对相移键控和多进制相对(差分)相移键控。下面以四相相位调制为例进行讨论。四相调相信号是一种四状态符号,即符号有00、 01、10 、 11 四种状态。所以,对于输入的二进制序列,首先必须分组,每两位码元一组。然后根据组合情况,用载波的四种相位表征它们。这种由两个码元构成一种状态的符号码元称
3、为双比特码元。同理,k 位二进制码构成一种状态符号的码元则称为 k 比特码元、四相 PSK(4PSK)信号实际是两路正交双边带信号。串行输入的二进制码,两位分成一组。若前一位用 A 表示,后一位用 B 表示,经串/并变换后变成宽度加倍的并行码(A 、B 码元在时间上是对齐的)。再分别进行极性变换,把单极性码变成双极性码,然后与载波相乘,形成正交的双边带信号,加法器输出形成 4PSK 信号。显然,此系统产生的是 4 系统 PSK 信号。如果产生 2 系统的 PSK 信号,只需把载波移相 4 后再加到乘法器上即可。 ( 系统信号的产生原理框图 )4因为 4 PSK 信号是两个正交的 2 PSK 信
4、号的合成,所以可仿照 2 PSK 信号的相平解调方法,用两个正交的相干载波分别检测 A 和 B 两个分量,然后还原成串行二进制数字信号,即可完成 4 PSK 信号的解调。此法是一种正交相平解调法,又称极性比较法,原理图在下。( 系统 PSK 信号解调原理框图 )4根据 4 移相系统 PSK 信号的相位配置规定,抽样判决器的判决准则表在下页。当判决器按极性判决时,若正抽样值判为 1,负抽样值判为 0,则可将调相信号解调为相应的数字信号。解调出的 A 和 B 再经并串变换,就可还原出原调制信号。若解调 2 移相系统的 PSK 信号,需改变移相网络及判决准则。 MPSK 调制器方框图 FPGAclk
5、star基 带 信 号 分 频0918027串 /并 转 换 四 选 一 开 关 调 制 信 号注:电路符号图中没有包含模拟电路部分,输出信号为数字信号。基带信号通过串/并转换器 xx 得到 2 位并行信号 yy;四选一开关 根据 yy 的数据,选择载波对应的相位进行输出,即得调制信号 y。MPSK 调制器建模符号图-文件名:MPSK-功能:基于 VHDL 硬件描述语言,对基带信号进行 MPSK 调制(这里-M=4)-说明:调制信号说明如下表所示。MPSK 调制 VHDL 程序仿真图3 总结通过这次设计,让我学到了很多知识,也获得很多体会,这是自己将平日学的理论知识应用到实际操作中的一次很好的
6、实践。同时,也是通过自己不断学习和努力,才明白:实际操作和设计,并不是像学习理论知识那么简单,会理论不等于就会应用,很多都是经验的东西,需要在自己的努力设计中才能慢慢体会到,设计多了,才会经验中找到设计自如的感觉。参考文献(1)邬春明 通信原理实验与课程设计.北京大学出版社.2013;(2)赵全利著EAD 技术及应用.机械工业出版社.2012;(3)全国大学生电子设计组委会著电子系统设计实践.2005;(4)林明权著VHDL 数字控制系统设计范例. 电子工业出版社.调制程序: library ieee;use ieee.std_logic_arith.all;use ieee.std_logi
7、c_1164.all;use ieee.std_logic_unsigned.all; entity MPSK isport(clk :in std_logic; -系统时钟start :in std_logic; -开始调制信号 x :in std_logic; -基带信号y :out std_logic); -调制信号end MPSK;architecture behav of MPSK issignal q:integer range 0 to 7; -计数器signal xx:std_logic_vector(1 downto 0);-中间寄存器signal yy:std_logic_
8、vector(1 downto 0);-2 位并行码寄存器signal f:std_logic_vector(3 downto 0); -载波 fbeginprocess(clk)-通过对 clk 分频,得到 4 种相位;并完成基带信号的串并转换beginif clkevent and clk=1 then if start=0 then q=0; elsif q=0 then q=1;f(3)=1; f(1)=0; xx(1)=x;yy=xx;elsif q=2 then q=3;f(2)=0; f(0)=1;elsif q=4 then q=5;f(3)=0; f(1)=1; xx(0)=
9、x;elsif q=6 then q=7;f(2)=1; f(0)=0;else q=q+1;end if;end if;end process;y=f(0) when yy=“11“ elsef(1) when yy=“10“ elsef(2) when yy=“01“ elsef(3); -根据 yy 寄存器数据,输出对应的载波end behav;解调程序:library ieee;use ieee.std_logic_arith.all;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity MPSK2 isp
10、ort(clk :in std_logic; -系统时钟start :in std_logic; -同步信号 x :in std_logic; -调制信号y :out std_logic); -基带信号end MPSK2;architecture behav of MPSK2 issignal q:integer range 0 to 7; -计数器signal xx:std_logic_vector(2 downto 0); -加法器signal yyy:std_logic_vector(1 downto 0);-2 位并行基代信号寄存器signal yy:std_logic_vector(
11、2 downto 0); -寄存 xx 数据beginprocess(clk)beginif clkevent and clk=1 then if start=0 then q=0;elsif q=0 then q=1;yy=xx; y=yyy(0); -把加法计数器的数据送入 yy 寄存器if x=0 then xx=“001“; -调制信号 x 为低电平时,送入加法器的数据“001”else xx=“000“;end if; elsif q=2 then q=3; if x=0 then xx=xx+“001“; -调制信号 x 为低电平时,送入加法器的数据“001”end if; els
12、if q=4 then q=5; y=yyy(1); if x=0 then xx=xx+“010“; -调制信号 x 为低电平时,送入加法器的数据“010”end if; elsif q=6 then q=7; if x=0 then xx=xx+“011“; -调制信号 x 为低电平时,送入加法器的数据“011”end if;else q=q+1;end if;end if;end process;process(yy) -此进程根据 yy 寄存器里的数据进行译码beginif clk=1 and clkevent thenif yy=“101“ then yyy=“00“; -yy 寄存器“101 ”对应基带码“00 ”elsif yy=“011“ then yyy=“01“; -yy 寄存器“011”对应基带码“01”elsif yy=“010“ then yyy=“10“; -yy 寄存器“010”对应基带码“10”elsif yy=“100“ then yyy=“11“; -yy 寄存器“100”对应基带码“11”else yyy=“00“;end if;end if;end process;end behav;