m基于FPGA的gardner环定时同步实现,含testbench测试程序

简介: m基于FPGA的gardner环定时同步实现,含testbench测试程序

1.算法仿真效果
使用vivaod2019.2版本仿真结果如下:

59ea6ac1185345141c506f93b2c12d73_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.jpg

将基带信号放大可以看到:

0beae06e67cb97966be6cf60bf2989c9_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.jpg

整个系统的RTL图如下图所示:

1b518561081dd54bd00cb21d4058ffce_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.jpg

其中gardner环的结构如下图所示:
8f4314727691b41aacc922cc59884180_watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=.jpg

2.算法涉及理论知识概要
基于FPGA的Gardner环定时同步是一种用于数字通信系统中实现定时同步的高效方法。该方法通过提取接收信号中的定时误差信息,在不需要先进行载波同步的情况下,实现位同步信号的调整。

2.1 Gardner环概述
首先,我们来看一下Gardner环定时同步的基本原理。Gardner算法是一种非判决指向方法,其基本思想是提取相邻码元最佳采样点的幅度和极性变化信息,以及相邻码元过渡点是否为零这一信息,从而从采样信号中提取出定时误差。在系统设计中,Gardner锁相环位于Costas载波同步锁相环之后,主要由四部分组成:内插器、时钟误差提取模块、环路滤波器以及控制器模块。

    在Gardner算法中,相互正交的I,Q两路信号的采样点会通过运算每个符号期间产生一个定时错误样点。通过定时误差检测,定时错误序列经过环路滤波器后送给数控振荡器。数控振荡器根据接收到的采样时刻信号和误差信号产生参数控制插值滤波器。插值滤波器会根据这些信号进行采样时刻调整,从而完成整个符号同步过程。

2.2 Gardner环定时同步的原理
Gardner定时误差算法通常用在BPSK、QPSK信号,通过改进可以应用在QAM等多进制基带信号中。Gardner定时误差算法,该算法的一个特点是每个符号只需要使用两个采样点,一个是strobe点,即最佳观察点,另外一个是midstrobe点,即两个观察点之间的采样点。Gardener环中的数控振荡器与锁相环路中的NCO功能完全不同,这里的NCO作用是产生时钟,即确定内插基点mk,同时完成分数间隔uk的计算,以提供给内插器进行内插。位同步环路中的数控振荡器(NCO)是一个相位递减器,它的差分方程为:
η(m+1)=[η(m)-ω(m)]mod1

   式中,η(m)是第m个工作时钟NCO寄存器的内容,ω(m)为NCO的控制字,两者都是正小数。NCO的工作周期是T s(采样周期),内插器的周期为T i,ω(m)由环路滤波器进行调节,使NCO在最佳采样时刻溢出。当环路达到平衡时,ω(m)近似是个常数,此时平均每隔1/ω(m)个采样周期,NCO就溢出一次,所以

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

2.3 Gardner环定时同步的实现步骤
具体来说,Gardner定时同步算法的实现过程可以概括为以下几个步骤:

采样信号处理:从接收到的数字基带信号中提取出I,Q两路正交信号,并对它们进行采样。每个采样点都包含了一个符号的幅度和相位信息。
定时误差检测:在每个符号周期内,通过计算相邻码元最佳采样点的幅度和极性变化信息,以及相邻码元过渡点是否为零的信息,得到定时误差信号。
滤波处理:利用数控振荡器产生的插值滤波器对定时误差信号进行滤波处理。插值滤波器的作用是根据采样时刻信号和误差信号来调整采样时刻,以减小定时误差。
反馈控制:将滤波后的定时误差信号反馈给数控振荡器,再由数控振荡器根据这个信号调整插值滤波器的参数,以实现更精确的定时同步。
总的来说,基于FPGA的Gardner环定时同步是一种利用插值算法实现位同步信号调整的有效方法。它能在不改变采样时钟的频率和相位的情况下,根据采样值以及数控振荡器输出的采样时刻信号和误差信号获取最佳采样值。这种方法对于高采样频率和受限本地时钟的数字通信系统来说非常有优势,可以有效地提高数字通信系统的性能。

3.verilog核心程序
````timescale 1ns / 1ps
//
// Company:
// Engineer:
//
// Create Date: 2023/09/27 02:16:25
// Design Name:
// Module Name: TEST
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//

module TEST();

reg i_clk;
reg i_clkr;
reg i_clkSYM;
reg i_rst;
reg i_dat;

wire signed[15:0]o_Ifir_T;
wire signed[15:0]o_Qfir_T;

//QPSK调制
Tqpsk Tqpsku(
.i_clk (i_clk),
.i_clkSYM(i_clkSYM),
.i_rst (i_rst),
.i_dat(i_dat),

.o_Ifir (o_Ifir_T),
.o_Qfir (o_Qfir_T)
);

wire signed [17:0] o_inserti; //插值I支路数据
wire signed [17:0] o_insertq; //插值Q支路数据
wire signed [15:0] o_uk; //插值间隔输出

wire o_syn_clock; //位同步脉冲/1MHz
Gardner_tops Gardner_topsuut(
.i_clk (i_clkr),
.i_rst (i_rst),
.i_basei (o_Ifir_T),
.i_baseq (o_Qfir_T),
.o_inserti (o_inserti),
.o_insertq (o_insertq),
.o_syn_clock (o_syn_clock),
.o_uk (o_uk)
);

initial
begin
i_clk = 1'b1;
i_clkr= 1'b1;
i_clkSYM=1'b1;
i_rst = 1'b1;

#160000
i_rst = 1'b0;

end
always #1000 i_clk=~i_clk;
always #1005 i_clkr=~i_clkr;
always #8000 i_clkSYM=~i_clkSYM;
initial
begin
i_dat = 1'b0;

#144000
repeat(1000)
begin
#16000 i_dat = 1'b1;
#16000 i_dat = 1'b1;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b1;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b1;
#16000 i_dat = 1'b1;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b1;
#16000 i_dat = 1'b1;
#16000 i_dat = 1'b1;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b1;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b1;
#16000 i_dat = 1'b1;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b1;
#16000 i_dat = 1'b1;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b1;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b1;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b1;
#16000 i_dat = 1'b1;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b1;
#16000 i_dat = 1'b1;
#16000 i_dat = 1'b1;
#16000 i_dat = 1'b1;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b1;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b1;
#16000 i_dat = 1'b1;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b0;
#16000 i_dat = 1'b0;

end
$stop();

end

endmodule
```

相关文章
|
安全 JavaScript 前端开发
AppSpider 7.5.020 发布 - Web 应用程序安全测试
AppSpider 7.5.020 for Windows - Web 应用程序安全测试
105 0
|
3月前
|
Java 测试技术 数据安全/隐私保护
通过yaml文件配置自动化测试程序
通过yaml文件可以将自动化测试环境,测试数据和测试行为分开,请看一下案例
136 4
|
7月前
|
监控 安全 测试技术
【01】卓伊凡收到冒充税务机关的诈骗程序-决定在沙盒Sandbox环境中运行测试下-广大企业同胞们注意防诈骗
【01】卓伊凡收到冒充税务机关的诈骗程序-决定在沙盒Sandbox环境中运行测试下-广大企业同胞们注意防诈骗
222 14
【01】卓伊凡收到冒充税务机关的诈骗程序-决定在沙盒Sandbox环境中运行测试下-广大企业同胞们注意防诈骗
|
8月前
|
安全 测试技术 Linux
Acunetix v25.4 发布 - Web 应用程序安全测试
Acunetix v25.4 (Linux, Windows) - Web 应用程序安全测试
270 3
Acunetix v25.4 发布 - Web 应用程序安全测试
|
7月前
|
安全 Devops 测试技术
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
169 0
AppSpider 7.5.018 for Windows - Web 应用程序安全测试
|
8月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于FPGA的SNN脉冲神经网络之LIF神经元verilog实现,包含testbench
本项目展示了 LIF(Leaky Integrate-and-Fire)神经元算法的实现与应用,含无水印运行效果预览。基于 Vivado2019.2 开发,完整代码配有中文注释及操作视频。LIF 模型模拟生物神经元特性,通过积分输入信号并判断膜电位是否达阈值产生脉冲,相较于 Hodgkin-Huxley 模型更简化,适合大规模神经网络模拟。核心程序片段示例,助您快速上手。
|
8月前
|
数据采集 移动开发 算法
【硬件测试】基于FPGA的QPSK调制+软解调系统开发与硬件片内测试,包含信道模块,误码统计模块,可设置SNR
本文基于FPGA实现QPSK调制与软解调系统,包含Testbench、高斯信道、误码率统计模块,并支持不同SNR设置。硬件版本新增ILA在线数据采集和VIO在线SNR设置功能,提供无水印完整代码及测试结果。通过VIO分别设置SNR为6dB和12dB,验证系统性能。配套操作视频便于用户快速上手。 理论部分详细解析QPSK调制原理及其软解调实现过程,涵盖信号采样、相位估计、判决与解调等关键步骤。软解调通过概率估计(如最大似然法)提高抗噪能力,核心公式为*d = d_hat / P(d_hat|r[n])*,需考虑噪声对信号点分布的影响。 附Verilog核心程序代码及注释,助力理解与开发。
290 5
|
8月前
|
数据采集 算法 数据安全/隐私保护
【硬件测试】基于FPGA的2ASK+帧同步系统开发与硬件片内测试,包含高斯信道,误码统计,可设置SNR
本文分享了基于FPGA的2ASK+帧同步系统硬件测试版本,包含ILA数据采集、VIO SNR设置及数据源模块。通过调整SNR(如45dB和10dB),实现对调制解调性能的验证。2ASK调制将数字信号转为二进制码,通过载波振幅变化传输;帧同步用于确定帧起始位置,确保数据正确解调。附带操作视频与核心Verilog代码,便于理解和复现。
271 9
|
9月前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的2ASK+帧同步系统verilog开发,包含testbench,高斯信道,误码统计,可设置SNR
本内容展示了基于Vivado2019.2的算法仿真效果,包括设置不同信噪比(SNR=8db和20db)下的结果及整体波形。同时,详细介绍了2ASK调制解调技术的原理与实现,即通过改变载波振幅传输二进制信号,并提供数学公式支持。此外,还涉及帧同步理论,用于确定数据帧起始位置。最后,给出了Verilog核心程序代码,实现了2ASK解调与帧同步功能,结合DDS模块生成载波信号,完成信号处理流程。
186 0
|
11月前
|
算法 数据安全/隐私保护 异构计算
基于FPGA的变步长LMS自适应滤波器verilog实现,包括testbench
### 自适应滤波器仿真与实现简介 本项目基于Vivado2022a实现了变步长LMS自适应滤波器的FPGA设计。通过动态调整步长因子,该滤波器在收敛速度和稳态误差之间取得良好平衡,适用于信道均衡、噪声消除等信号处理应用。Verilog代码展示了关键模块如延迟单元和LMS更新逻辑。仿真结果验证了算法的有效性,具体操作可参考配套视频。
409 74