MPSK调制解调

更新时间:2024-02-28 02:39:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

多进制数字相位调制(MPSK)

1前言:VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。

2设计主题 2.1设计目的

(1).掌握MPSK的设计原理 (2).掌握MPSK的VHDL设计

2.2 MPSK的设计原理

多进制数字相位调制也称多元调相或多相制。它利用具有多个相位状态的正弦波来代表多组二进制信息码元,即用载波的一个相位对应于一组二进制信息码元。如果载波有2k个相位,它可以代表 k位二进制码元的不同码组。多进制相移键控也分为多进制绝对相移键控和多进制相对(差分)相移键控。

下面以四相相位调制为例进行讨论。四相调相信号是一种四状态符号,即符号有00、01、10、11四种状态。所以,对于输入的二进制序列,首先必须分组,每两位码元一组。然后根据组合情况,用载波的四种相位表征它们。这种由两个码元构成一种状态的符号码元称为双比特码元。同理,k位二进制码构成一种状态符号的码元则称为k比特码元、四相PSK(4PSK)信号实际是两路正交双边带信号。串行输入的二进制码,两位分成一组。若前一位用A表示,后一位用B表示,经串/并变换后变成宽度加倍的并行码(A、B码元在时间上是对齐的)。再分别进行极性变换,把单极性码变成双极性码,然后与载波相乘,形成正交的双边带信号,加法器输出形成4PSK信号。显然,此系统产生的是π/4系统PSK信号。如果产生π/2系统的PSK信号,只需把载波移相π/4后再加到乘法器上即可。

(

?系统信号的产生原理框图 ) 4因为 4 PSK信号是两个正交的2 PSK信号的合成,所以可仿照 2 PSK信号的相平解调方法,用两个正交的相干载波分别检测A和B两个分量,然后还原成串行二进制数字信号,即可完成4 PSK信号的解调。此法是一种正交相平解调法,又称极性比较法,原理图在下。

?系统PSK信号解调原理框图 ) 4根据π/4移相系统PSK信号的相位配置规定,抽样判决器的判决准则表在下页。当判决器按极性判决时,若正抽样值判为1,负抽样值判为0,则可将调相信号解调为相应的数字信号。解调出的A和B再经并/串变换,就可还原出原调制信号。若解调π/2移相系统的PSK信号,需改变移相网络及判决准则。

MPSK调制器方框图

FPGAclkstart0°串/并转换分频90°180°270°基带信号四选一开关调制信号 注:电路符号图中没有包含模拟电路部分,输出信号为数字信号。 基带信号通过串/并转换器xx得到2位并行信号yy;四选一开关 根据yy的数据,选择载波对应的相位进行输出,即得调制信号 y。 MPSK调制器建模符号图

--文件名:MPSK

--功能:基于VHDL硬件描述语言,对基带信号进行MPSK调制(这里 --M=4)

--说明:调制信号说明如下表所示。

MPSK调制VHDL程序仿真图

3 总结

通过这次设计,让我学到了很多知识,也获得很多体会,这是自己将平日学的理论知识应用到实际操作中的一次很好的实践。同时,也是通过自己不断学习和努力,才明白:实际操作和设计,并不是像学习理论知识那么简单,会理论不等于就会应用,很多都是经验的东西,需要在自己的努力设计中才能慢慢体会到,设计多了,才会经验中找到设计自如的感觉。

参考文献

(1)邬春明 《通信原理实验与课程设计》.北京大学出版社.2013; (2)赵全利著《EAD技术及应用》.机械工业出版社.2012; (3)全国大学生电子设计组委会著《电子系统设计实践》.2005; (4)林明权著《VHDL数字控制系统设计范例》. 电子工业出版社.

调制程序: library ieee;

use ieee.std_logic_arith.all; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity MPSK is

port(clk :in std_logic; --系统时钟 start :in std_logic; --开始调制信号 x :in std_logic; --基带信号 y :out std_logic); --调制信号 end MPSK;

architecture behav of MPSK is

signal q:integer range 0 to 7; --计数器 signal xx:std_logic_vector(1 downto 0);--中间寄存器 signal yy:std_logic_vector(1 downto 0);--2位并行码寄存器 signal f:std_logic_vector(3 downto 0); --载波f begin

process(clk)--通过对clk分频,得到4种相位;并完成基带信号的串并转换 begin

if clk'event 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)<=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=\ f(1) when yy=\ f(2) when yy=\

f(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 is

port(clk :in std_logic; --系统时钟 start :in std_logic; --同步信号 x :in std_logic; --调制信号 y :out std_logic); --基带信号 end MPSK2;

architecture behav of MPSK2 is

signal 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(2 downto 0); --寄存xx数据 begin process(clk) begin

if clk'event 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<=\

--调制信号x为低电平时,送入加法器的数据“001” else xx<=\ end if;

elsif q=2 then q<=3; if x='0' then xx<=xx+\

--调制信号x为低电平时,送入加法器的数据“001” end if;

elsif q=4 then q<=5; y<=yyy(1); if x='0' then xx<=xx+\

--调制信号x为低电平时,送入加法器的数据“010” end if;

elsif q=6 then q<=7; if x='0' then xx<=xx+\

--调制信号x为低电平时,送入加法器的数据“011” end if; else q<=q+1; end if; end if; end process;

process(yy) --此进程根据yy寄存器里的数据进行译码 begin

if clk='1' and clk'event then

if yy=\寄存器“101”对应基带码“00” elsif yy=\寄存器“011”对应基带码“01”

elsif yy=\寄存器“010”对应基带码“10” elsif yy=\寄存器“100”对应基带码“11” else yyy<=\ end if; end if; end process; end behav;

本文来源:https://www.bwwdw.com/article/svea.html

Top