m基于FPGA的DQPSK调制解调通信系统verilog实现,包含testbench,不包含载波同步

206 阅读3分钟

1.算法仿真效果

 

本系统进行了两个平台的开发,分别是:

 

Vivado2019.2

 

Quartusii18.0+ModelSim-Altera 6.6d  Starter Edition

 

其中Vivado2019.2仿真结果如下:

c2aedc2399c056cfd0187bdbeba26d00_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png  

将上面的各个信号放大,各个信号含义如下:

f5f1673c015cd70bec287e0a354029c1_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png  

 Quartusii18.0+ModelSim-Altera 6.6d  Starter Edition的测试结果如下:

 

3c2f6649b9c3b9ecb4b331d0396ae5eb_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.png

 

2.算法涉及理论知识概要

       DQPSK调制解调通信系统是一种数字通信系统,用于将数字信息转换为电信号进行传输。DQPSK代表差分四相移键控调制,是一种数字调制技术,它在发送端对数字信息进行编码,并在接收端对信号进行解码。DQPSK调制解调通信系统具有高效、可靠和抗干扰等优点,在现代通信系统中得到广泛应用。

 

一、DQPSK调制原理

 

       DQPSK调制是通过改变信号的相位来传输数字信息的调制方式。在DQPSK调制中,每个符号代表两个比特,因此,DQPSK调制器需要将两个连续的比特组合在一起来形成一个符号。DQPSK调制器使用了差分编码器来避免相位漂移问题,这是一种将相邻符号之间的相位差编码为一个比特的技术。

 

下面是DQPSK调制器的数学公式:

 

每个符号代表两个比特,因此,输入比特串b1和b2可以组成一个符号s,公式如下:

s=cos(θ1+θ0)s = \cos(\theta_1+\theta_0)

 

其中,θ1\theta_1是上一个符号的相位,θ0\theta_0表示本次符号的相位。

 

DQPSK调制器需要根据上一个符号和本次符号的相位来计算相位差,公式如下:

Δθ=arctan(sin(θ1+θ0)cos(θ0)cos(θ1+θ0)sin(θ0)cos(θ1+θ0)cos(θ0)+sin(θ1+θ0)sin(θ0))\Delta\theta = \arctan\left(\frac{\sin(\theta_1+\theta_0)\cos(\theta_0)-\cos(\theta_1+\theta_0)\sin(\theta_0)}{\cos(\theta_1+\theta_0)\cos(\theta_0)+\sin(\theta_1+\theta_0)\sin(\theta_0)}\right)

 

最后,DQPSK调制器需要将相位差映射到相位平面上,公式如下:

s=cos(θ1+θ0+Δθ)s = \cos(\theta_1+\theta_0+\Delta\theta)

 

二、DQPSK解调原理

 

        DQPSK解调器需要根据接收到的信号来计算出相位差,然后将相位差解码为数字信息。DQPSK解调器使用低通滤波器来滤除高频噪声,并将接收到的信号分为两个时间窗口。接下来是DQPSK解调器的数学公式:

 

接收到的信号r可以表示为:

r=scos(θ0)+nr = s\cos(\theta_0)+n

 

其中,θ0\theta_0是本地参考信号的相位,n是接收到的噪声。

 

接下来,将接收到的信号r分为两个时间窗口r1和r2:

r1=rT/21:0r_1 = r_{T/2-1:0}

 

r2=rT1:T/2r_2 = r_{T-1:T/2}

 

其中,T是一个符号的持续时间。

 

计算相位差,公式如下:

Δθ=arctan(hsin(2πfT)(r1cos(θ0)r2sin(θ0))hcos(2πfT)(r2cos(θ0)+r1sin(θ0)))\Delta\theta = \arctan\left(\frac{h\sin(2\pi fT)(r_1\cos(\theta_0)-r_2\sin(\theta_0))}{h\cos(2\pi fT)(r_2\cos(\theta_0)+r_1\sin(\theta_0))}\right)

 

其中,h是低通滤波器的传递函数,f是载波频率。

 

最后,将相位差解码为数字信息,公式如下:

b1=Δθ>0b_1 = \Delta\theta > 0

 

b2=Δθ>π/2b_2 = |\Delta\theta| > \pi/2

 

这里,如果相位差Δθ\Delta\theta大于0,则将b1b_1设置为1,否则设置为0;如果相位差的绝对值大于π/2\pi/2,则将b2b_2设置为1,否则设置为0。

 

三、DQPSK调制解调算法的实现过程

 

下面是DQPSK调制解调算法的实现过程:

 

产生本地参考信号

      在DQPSK调制解调通信系统中,发送端和接收端需要使用相同频率和相位的载波信号。因此,需要在接收端产生一个本地参考信号,用于解调接收到的信号。本地参考信号可以使用一个简单的正弦波振荡器产生,公式如下:

 

θ0(nT)=θ0((n1)T)+2πf0T\theta_0(nT) = \theta_0((n-1)T) + 2\pi f_0 T

 

其中,f0f_0是载波频率,TT是一个符号的持续时间。

 

进行DQPSK调制

       DQPSK调制器需要将两个连续的比特组合在一起来形成一个符号,然后根据上一个符号和本次符号的相位来计算相位差,最后将相位差映射到相位平面上。

 

3.Verilog核心程序 `module TEST();

 

reg i_clk;

reg i_rst;

reg i_clkSYM;

reg i_dat;

 

wire o_Idiff;

wire o_Qdiff;

wire signed[15:0]o_Ifir_T;

wire signed[15:0]o_Qfir_T;

wire signed[15:0]o_cos_T;

wire signed[15:0]o_sin_T;

wire signed[31:0]o_modc_T;

wire signed[31:0]o_mods_T;

wire signed[31:0]o_mod_T;

 

wire signed[15:0]o_cos_R;

wire signed[15:0]o_sin_R;

wire signed[31:0]o_modc_R;

wire signed[31:0]o_mods_R;

wire signed[31:0]o_Ifir_R;

wire signed[31:0]o_Qfir_R;

 

wire o_I;

wire o_Q;

wire o_bits;

 

//DQPSK调制

TDQPSK TQPSKU(

.i_clk  (i_clk),

.i_rst  (i_rst),

.i_clkSYM(i_clkSYM),

.i_dat  (i_dat),

.o_Idiff(o_Idiff),

.o_Qdiff(o_Qdiff),

 

.o_Ifir (o_Ifir_T),

.o_Qfir (o_Qfir_T),

.o_cos  (o_cos_T),

.o_sin  (o_sin_T),

.o_modc (o_modc_T),

.o_mods (o_mods_T),

.o_mod  (o_mod_T)

);

 

 

 

 

//DQPSK解调

RDQPSK RQPSKU(

.i_clk  (i_clk),

.i_rst  (i_rst),

.i_clkSYM(i_clkSYM),

.i_med  (o_mod_T[25:10]),

.o_cos  (o_cos_R),

.o_sin  (o_sin_R),

.o_modc (o_modc_R),

.o_mods (o_mods_R),

.o_Ifir (o_Ifir_R),

.o_Qfir (o_Qfir_R),

.o_I(o_I),

.o_Q(o_Q),

.o_bits(o_bits)

);

 

initial

begin

    i_clk = 1'b1;

    i_clkSYM=1'b1;

    i_rst = 1'b1;

    #1600

    i_rst = 1'b0;

end`