FPGA数字信号处理(十三)锁相环位同步技术的实现

前面介绍了数字通信系统中ASK解调技术的FPGA实现,以及判决门限选择的问题。本文将介绍解调系统中的位同步技术,只有在位同步模块的控制下,才能正确的提取出基带信号中携带的数据。本文设计参考自杜勇老师的《数字调制解调技术的MATLAB与FPGA实现》。


位同步

位同步模块的主要作用是产生一个与输入数据频率一致的时钟信号,保证每一位数据判决一次,且最好在信噪比最大的时刻进行判决。目前常用的位同步技术有插入导频法、非线性变换滤波法、锁相环法和Gardner定时恢复算法。本文将采用锁相环实现位同步技术,其它方法将在后续的文章中介绍。


锁相环位同步

锁相环位同步技术的实现条件是获取基带数据的初始相位(即相邻不同码元之间的跳变时刻),这也就决定了该方法不适合于多进制调制信号的解调(如4ASK,比如00-11之间存在着01和10两个过渡码元,从而无法获得00跳变到11时的初始相位)。对于2ASK而言,只有0和1两个状态,根据判决门限做简单判决即可得到基带数据码元的初始相位。但是该方法没有考虑最佳判决时刻,因此只适合于信号质量好(SNR大)的信号。

锁相环位同步有超前-滞后型触发器型两种实现方式,本文以第一种方式实现,原理框图如下:
这里写图片描述
本地产生相互正交的超前脉冲和滞后脉冲,鉴相器(DPD)比较本地脉冲与输入信号(由判决门限判决后的单比特信号)的相位差(超前或滞后),据此来调整位同步脉冲信号的相位(扣除或附加一个时钟周期)。


FPGA设计

根据功能划分各子模块,顶层模块原理图及各子模块代码如下:
这里写图片描述
●clk_gen:该模块用于产生两路相互正交、占空比为1:3的时钟信号clk_d1、clk_d2,为了达到位同步脉冲的“扣除”和“附加”一个时钟周期的目的。

`timescale 1ns/1ps
//-----------------------------------------------------
//   双相时钟信号生成模块
//-----------------------------------------------------
module clk_gen
(
    input clk,      //32MHz系统时钟
    input rst,      //高电平有效复位信号
    output clk_d1,  //时钟1
    output clk_d2   //时钟2
);

//-----------------------------------------------------
//  产生占空比为1:3,时钟为采样频率(8MHz)的双相时钟
//  两路时钟输出相位相差两个系统时钟周期 
//-----------------------------------------------------
reg [1:0] cnt;     //计数器
reg clkd1, clkd2;

//在计数器的控制下完成指定时钟输出
always @ (posedge clk or posedge rst)
    if (rst) begin
        cnt <= 'd0; clkd1 <= 1'b0; clkd2 <= 1'b0;
    end
    else 
        case (cnt)
            2'd0 : begin  
                clkd1 <= 1'b1;
                clkd2 <= 1'b0;
                cnt <= cnt + 1'b1;
            end
            2'd2 : begin
                clkd1 <= 1'b0;
                clkd2 <= 1'b1;
                cnt <= cnt + 1'b1;
            end
            default : begin
                clkd1 <= 1'b0;
                clkd2 <= 1'b0;
                cnt <= cnt + 1'b1;
            end
        endcase

assign clk_d1 = clkd1;
assign clk_d2 = clkd2;

endmodule

●phaseDetec:鉴相器,检测输入码元的跳变情况以及完成与分频器输出的clk_i和clk_q之间的鉴相。

`timescale 1ns/1ps
//-----------------------------------------------------
//   鉴相器模块
//-----------------------------------------------------
module phaseDetec
(
    input clk,      //32MHz系统时钟
    input rst,      //高电平有效复位信号
    input datain,   //输入单比特基带数据 
    input clk_i,    //同相同步脉冲信号,1:1占空比
    input clk_q,    //正交同步脉冲信号,1:1占空比
    output pd_before,  //输出超前脉冲信号
    output pd_after    //输出滞后脉冲信号
);

reg din_d, din_edge;
reg pdbef, pdaft;

always @ (posedge clk or posedge rst)
    if (rst) begin
        din_d <= 1'b0; din_edge <= 1'b0;
        pdbef <= 1'b0; pdaft <= 1'b0;
    end
    else begin 
        din_d <= datain;   //一级寄存器缓存
        din_edge <= datain ^ din_d;   //异或检测基带边沿
        pdbef <= din_edge & clk_i;    //与门鉴相
        pdaft <= din_edge & clk_q;    //与门鉴相
    end

assign pd_before = pdbef;
assign pd_after = pdaft;

endmodule

●moniflop:单稳态触发器,检测到高电平输入后持续输出4个时钟周期的高电平脉冲(保证只通过clk_d1或clk_2),从而选择扣除还是附加时钟周期。

`timescale 1ns/1ps
//-----------------------------------------------------
//   单稳态触发器模块
//-----------------------------------------------------
module moniflop
(
    input clk,      //32MHz系统时钟
    input rst,      //高电平有效复位信号
    input din,      
    output dout     
);
//-----------------------------------------------------
// 检测到din的高电平脉冲后,dout输出4个时钟长的高电平 
//-----------------------------------------------------
reg [1:0] cnt;      //计数器控制输出高电平的时间
reg start, dout_reg;

always @ (posedge clk or posedge rst)
    if (rst) begin
        cnt <= 0; start <= 0; dout_reg <= 0;
    end
    else begin
        /* 检测到din的高电平脉冲,则开始输出 */
        if (din) begin
            start <= 1'b1; dout_reg <= 1'b1;
        end
        /* 控制一次4个时钟长高电平脉冲的输出 */
        //输出有效
        if (start) begin
            dout_reg <= 1'b1;
            if (cnt < 2'd3)    //有效输出维持4个时钟
                cnt <= cnt + 1'b1;
            else start <= 1'b0;
        end
        //输出无效
        else begin
            cnt <= 'd0;
            dout_reg <= 1'b0;  //无效期间输出低电平
        end
    end

assign dout = dout_reg; 

endmodule 

●control:控制模块,分频产生超前脉冲和滞后脉冲clk_i、clk_q,并完成扣除或附加脉冲的工作。

`timescale 1ns/1ps
//-----------------------------------------------------
//    控制模块
//-----------------------------------------------------
module control
(
    input clk,      //32MHz系统时钟
    input rst,      //高电平有效复位信号
    input clk_d1,
    input clk_d2,
    input pd_before,
    input pd_after,
    output clk_i,
    output clk_q
);

wire gate_open = (~pd_before) & clk_d1;
wire gate_close = pd_after & clk_d2;
wire clk_in = gate_open | gate_close;   //分频器驱动时钟

reg clki, clkq;
reg [2:0] cnt;
always @ (posedge clk or posedge rst)
    if (rst) begin
        cnt <= 'd0; clki <= 0; clkq <= 0;
    end
    else begin
        if (clk_in) cnt <= cnt + 1'b1;
        clki <= ~cnt[2];
        clkq <= cnt[2];
    end

assign clk_i = clki;
assign clk_q = clkq;

endmodule

仿真与工程下载

编写testbench,产生一个矩形脉冲来模拟对ASK调制信号判决后的单比特信号。Vivado中仿真效果如下图所示:
这里写图片描述
可以看到位同步信号Sync是一个周期与码元数据相同、上升沿对应码元初始相位(超前或滞后来回摆动)的信号。即Sync与原始基带数据一一对应。

  • 31
    点赞
  • 209
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
### 回答1: 数字通信同步技术的Matlab与FPGA实现是一种基于数学模型和硬件平台的技术实现方式。Matlab是一种强大的数学建模和仿真软件,而FPGA(现场可编程门阵列)则是一种可编程逻辑设备,可以用于实现数字电路。同时,Altera Verilog是一种硬件描述语言,可以用于FPGA的设计和编程。 数字通信同步技术主要包括时钟同步、帧同步和均衡同步。时钟同步是通过对发送和接收时钟进行同步,使得接收端能够正确地解读发送端的数据。帧同步是通过识别帧同步字或特定的帧头,使得接收端能够按帧进行数据解析。均衡同步则是通过发现信道中的失真并对其进行补偿来实现数据的准确接收。 在Matlab中,我们可以使用数字通信工具箱来实现同步技术。通过建立数学模型,我们可以对通信系统进行仿真,包括信道模型和信号处理算法。Matlab提供了丰富的函数和工具,可以快速实现同步算法的建模和验证。 然后,我们可以使用Alteraverilog等硬件描述语言来将模型转换为FPGA上的硬件电路。通过使用Verilog语言编写同步算法的详细描述,并使用特定的FPGA开发工具进行编译和综合,我们可以将同步算法部署在FPGA上。 FPGA可以提供高性能和实时性能,使得同步技术可以在实际的通信系统中广泛应用。通过将算法转换为硬件电路,可以提高算法的执行速度和效率,并减少系统的功耗。 综上所述,数字通信同步技术的Matlab与FPGA实现的Alteraverilog版是一种结合了数学模型和硬件开发工具的技术实现方式。这种方式能够高效地实现通信系统的同步功能,提高系统的性能和可靠性。 ### 回答2: 数字通信同步技术是指在数字通信系统中,为了保证发送端和接收端的时钟同步,采用的一种技术。而Matlab和FPGA是两种实现该同步技术的常用工具。下面分别介绍它们的实现方式。 Matlab是一种广泛应用于科学计算和工程领域的软件平台,它提供了丰富的数字信号处理工具箱,可以方便地实现数字通信同步技术。在Matlab中,可以通过编写相关的算法来实现时钟同步。首先,需要对接收到的信号进行采样,然后通过计算信号的频率偏移来调整接收端的本地时钟,使其与发送端时钟同步。最后,通过对接收到的信号进行解调和解码操作,可以实现数据的恢复。 FPGA是一种可编程逻辑器件,它可以通过编程来实现特定的数字电路功能。在数字通信同步技术实现中,可以使用Verilog或VHDL语言来编写同步模块。在该模块中,可以包含时钟生成器和时钟同步的电路。时钟生成器用于产生与发送端时钟相同频率的本地时钟,而时钟同步电路则用于调整本地时钟的相位,使其与发送端时钟同步。接收端将通过调整本地时钟相位,确保采样时的时钟与发送端时钟的相位一致,从而实现时钟同步。 综上所述,Matlab和FPGA都可以用于数字通信同步技术实现。Matlab适用于算法的验证和仿真,而FPGA则适用于硬件设计和实际的部署。根据具体的应用场景和需求,选择适用的工具来实现数字通信同步技术。 ### 回答3: 数字通信同步技术是一种重要的技术,在实现方面可以通过MATLAB和FPGA进行实现。MATLAB是一种用于算法开发和数学建模的高级编程语言和环境,而FPGA是一种可编程逻辑器件,在数字电路设计和实现方面具有很高的灵活性。 在数字通信同步技术的MATLAB实现中,可以利用MATLAB的信号处理工具箱来实现各种同步算法。首先,可以使用时钟和帧同步算法来确保接收端和发送端的时钟和帧同步。然后,可以使用载波同步算法来实现接收端的载波频率和相位与发送端的一致。最后,可以使用块同步算法来实现接收端接收和解码数据块。 而在FPGA实现中,可以使用VHDL或Verilog这样的硬件描述语言进行设计。首先,可以使用逻辑门和触发器等基本电路元件来构建时钟和帧同步电路。然后,可以使用相位锁定环路和数字锁相环等电路来实现载波同步。最后,可以使用数值处理模块来实现块同步和数据解码。 在使用FPGA进行实现时,需要考虑时序问题和资源利用率。由于FPGA是并行计算的,需要考虑数据的并行处理和时钟频率的合理选择。此外,还需要根据FPGA的资源限制,合理地分配存储器和计算单元。 综上所述,数字通信同步技术的MATLAB与FPGA实现是通过不同的工具和方法来实现的。MATLAB适用于算法开发和模拟,而FPGA适用于硬件设计和实现。在实际应用中,可以根据需求和资源限制选择合适的实现方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值