基于FPGA的QPSK调制解调电路设计与实现

  • 格式:doc
  • 大小:2.30 MB
  • 文档页数:10

基于FPGA的QPSK调制解调电路设计与实现

基于FPGA的QPSK调制解调电路设计与实现

数字调制信号又称为键控信号,调制过程可用键控的方法由基带信号对载频信号的振幅、频率及相位进行调制,最基本的方法有3种:正交幅度调制(QAM)、频移键控(FSK)、相移键控(PSK).根据所处理的基带信号的进制不同分为二进制和多进制调制(M进制).多进制数字调制与二进制相比,其频谱利用率更高.其中QPSK(即4PSK)是MPSK(多进制相移键控)中应用最广泛的一种调制方式。

1 QPSK简介

QPSK信号有00、01、10、11四种状态.所以,对输入的二进制序列,首先必须分组,每两位码元一组。然后根据组合情况,用载波的四种相位表征它们。QPSK信号实际上是两路正交双边带信号, 可由图1所示方法产生。

QPSK信号是两个正交的2PSK信号的合成,所以可仿照2PSK信号的相平解调法,用两个正交的相干载波分别检测A和B两个分量,然后还原成串行二进制数字信号,即可完成QPSK信号的解调,解调过程如图2所示。

图1 QPSK信号调制原理图 基于FPGA的QPSK调制解调电路设计与实现

图2 QPSK信号解调原理图

2 QPSK调制电路的FPGA实现及仿真

2。1基于FPGA的QPSK调制电路方框图

基带信号通过串/并转换器得到2位并行信号,,四选一开关根据该数据,选择载波对应的相位进行输出,即得到调制信号,调制框图如图3所示。

基带信号clkstart串/并转换四选一开关分 频0°90°180°270°调制信号FPGA图3 QPSK调制电路框图

系统顶层框图如下 基于FPGA的QPSK调制解调电路设计与实现

图中输入信号clk为调制模块时钟,start为调制模块的使能信号,x为基带信号,y是qpsk调制信号的输出端,carrier【3。。0】为4种不同相位的载波,其相位非别为0、90、180、270度,锁相环模块用来进行相位调节,用来模拟通信系统中发送时钟与接收时钟的不同步start1为解调模块的使能信号。y2为解调信号的输出端。

2。2调制电路VHDL程序

程序说明

信号yy 载波相位 载波波形 载波符号

“00" 0° f3

“01" 90° f2

“10” 180° f1

“11" 270° f0

library ieee;

use ieee。std_logic_arith。all; 基于FPGA的QPSK调制解调电路设计与实现

use ieee。std_logic_1164.all;

use ieee。std_logic_unsigned。all;

entity PL_MPSK is

port(clk :in std_logic; —-系统时钟

start :in std_logic; ——开始调制信号

x :in std_logic; ——基带信号

y :out std_logic;

carrier :out std_logic_vector(3 downto 0);

xxx :out std_logic_vector(1 downto 0)

); ——调制信号

end PL_MPSK;

architecture behav of PL_MPSK is

signal q:integer range 0 to 7; —-计数器

signal ss:std_logic_vector(1 downto 0); ——中间寄存器

signal yy:std_logic_vector(1 downto 0); ——2位并行码寄存器

signal xx:std_logic_vector(1 downto 0);

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; 基于FPGA的QPSK调制解调电路设计与实现

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;

--ss<=yy;

xxx<=yy;

end process;

y<=f(0) when yy="11" else

f(1) when yy="10" else

f(2) when yy="01" else

f(3) when yy=”00”; ——根据yy寄存器数据,输出对应的载波

carrier〈=f;

end behav;

在quartus ii下的仿真结果总体结果如下图所示 基于FPGA的QPSK调制解调电路设计与实现

局部放大图如下

3 QPSK解调电路的FPGA实现及仿真

3。1 QPSK解调电路方框图

当调制为低电平时,译码器1根据记数器输出值,送入加法器相应的数据。加法器把运算结果送到寄存器,译码器2根据寄存器数据通过译码,输出两位并行信号,该信号再通过并/串转换即可得到解调后的基带信号,调制框图如图4所示。

clkstart调制信号计数器译码器1加法器译码器2并/串转换基带信号FPGA图4 QPSK解调基于FPGA的QPSK调制解调电路设计与实现

电路框图

3。2解调电路VHDL程序

library ieee;

use ieee。std_logic_arith.all;

use ieee.std_logic_1164。all;

use ieee。std_logic_unsigned。all;

entity PL_MPSK2 is

port(clk :in std_logic; ——系统时钟

start :in std_logic; -—同步信号

x :in std_logic; -—调制信号

y :out std_logic); —-基带信号

end PL_MPSK2;

architecture behav of PL_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); --把加法计数器的数据送基于FPGA的QPSK调制解调电路设计与实现

入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;

elsif 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; 基于FPGA的QPSK调制解调电路设计与实现

end if;

end process;

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

begin

if clk=’1' and clk'event then

if 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;使用FPGA实现QPSK调制解调电路,多进制数字调制技术与FPGA的结合使得通信系统的性能得到了迅速的提高。

系统联调的全局仿真图如下