8.14 MPSK调制与解调VHDL程序与仿真
2. MPSK调制程序及注释
--文件名:PL_MPSK
--功能:基于VHDL硬件描述语言,对基带信号进行MPSK调制(这里M=4)
--说明:调制信号说明如表8.14.2所示。
表8.14.2 调制信号说明
信号yy |
载波相位 |
载波波形 |
载波符号 |
“00” |
0° |
|
f3 |
“01” |
90° |
|
f2 |
“10” |
180° |
|
f1 |
“11” |
270° |
|
f0 |
--最后修改日期:2004.2.14
library ieee;
use ieee.std_logic_arith.all;
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); --调制信号
end PL_MPSK;
architecture behav of PL_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="11" else
f(1) when yy="10" else
f(2) when yy="01" else
f(3); --根据yy寄存器数据,输出对应的载波
end behav;
3. MPSK调制程序仿真及注释
MPSK调制程序仿真及注释如图8.14.6所示。
(a)MPSK调制VHDL程序仿真全图
(b)MPSK调制VHDL程序仿真局部放大图1
(c)MPSK调制VHDL程序仿真局部放大图2
图8.14.6 MPSK调制VHDL程序仿真及注释
2. MPSK解调VHDL程序及注释
--文件名:PL_MPSK2。
--功能:基于VHDL硬件描述语言,完成对MPSK调制信号 的解调(这里M=4)。
--说明:解调信号说明如表8.14.3所示。将一个信号周期分成4份,高电平权值分别为0、0、0、0,低电平权值分别为1、1、2、3。
表8.14.3 解调信号说明
载波波形 |
载波相位 |
加法器xx |
中间信号yyy |
|
0° |
0+0+2+3=5 |
“00” |
|
90° |
0+1+2+0=3 |
“01” |
|
180° |
1+1+0+0=2 |
“10” |
|
270° |
1+0+0+3=4 |
“11” |
--最后修改日期:2004.2.14。
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); --把加法计数器的数据送入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;
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;
3. MPSK解调程序仿真图及注释
MPSK解调程序仿真图及注释如图8.14.9所示。
(a)MPSK解调VHDL程序仿真全图
注:中间信号yy 与yyy的关系为:5对应“00”;3对应“01”;2对应“10”;4对应“11”。
(b)MPSK解调VHDL程序仿真局部放大图1
(c)MPSK解调VHDL程序仿真局部放大图2
图8.14.9 MPSK解调VHDL程序仿真图及注释