当前位置:   article > 正文

基于FPGA的FSK调制解调通信系统verilog实现,包含testbench_2fsk testbench

2fsk testbench

目录

1.算法仿真效果

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

3.Verilog核心程序

4.完整算法代码文件


1.算法仿真效果

vivado2019.2仿真结果如下:

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

       频移键控是利用载波的频率变化来传递数字信息。数字频率调制是数据通信中使用较 早的一种通信方式,由于这种调制解调方式容易实现,抗噪声和抗衰减性能较强,因此在 中低速数字通信系统中得到了较为广泛的应用。

        在二进制频移键控中,幅度恒定不变的载波信号的频率随着输入码流的变化而切换(称为高音和低音,代表二进制的1 和0)。产生FSK 信号最简单的方法是根据输入的数据比特是0还是1,在两个独立的振荡器中切换。采用这种方法产生的波形在切换的时刻相位是不连续的,因此这种FSK 信号称为不连续FSK 信号。由于相位的不连续会造频谱扩展,这种FSK 的调制方式在传统的通信设备中采用较多。随着数字处理技术的不断发展,越来越多地采用连继相位FSK调制技术。目前较常用产生FSK 信号的方法是,首先产生FSK 基带信号,利用基带信号对单一载波振荡器进行频率调制。相位连续的FSK信号的功率谱密度函数最终按照频率偏移的负四次幂衰落。如果相位不连续,功率谱密度函数按照频率偏移的负二次幂衰落。

2-FSK功率谱密度的特点如下:

(1) 2FSK信号的功率谱由连续谱和离散谱两部分构成,离散谱出现在f1和f2位置;

(2) 功率谱密度中的连续谱部分一般出现双峰。若两个载频之差|f1 -f2|≤fs,则出现单峰。

PSK:在相移键控中,载波相位受数字基带信号的控制,如在二进制基带信号中为0时,载波相位为0或π,为1时载波相位为π或0。载波相位和基带信号有一一对应的关系,从而达到调制的目的。

  在二进制频移键控(2FSK)中,当传送“1”码时对应于载波频率,传送“0”码时对应于载波频率。 2FSK信号波形可看作两个2ASK信号波形的合成,下图是相位连续的2FSK信号波形。

        FSK信号的解调也有非相干和相干两种,FSK信号可以看作是用两个频率源交替传输得到的,所以FSK的接收机由两个并联的ASK接收机组成。 

       FSK:频移键控是利用两个不同频率f1和f2的振荡源来代表信号1和0,用数字信号的1和0去控制两个独立的振荡源交替输出。对二进制的频移键控调制方式,其有效带宽为B=2xF+2Fb,xF是二进制基带信号的带宽也是FSK信号的最大频偏,由于数字信号的带宽即Fb值大,所以二进制频移键控的信号带宽B较大,频带利用率小。

       FSK功率谱密度的特点如下:

(1) 2FSK信号的功率谱由连续谱和离散谱两部分构成,离散谱出现在f1和f2位置;

(2) 功率谱密度中的连续谱部分一般出现双峰。若两个载频之差|f1 -f2|≤fs,则出现单峰。

3.Verilog核心程序

  1. .........................................................
  2. wire[31:0]m_axis_data_tdata2;
  3. dds_compiler_0 dds_compiler_u2(
  4. .aclk (i_clk), // input wire aclk
  5. .aresetn (~i_rst), // input wire aresetn
  6. .s_axis_config_tvalid(1'b1), // input wire s_axis_config_tvalid
  7. .s_axis_config_tdata(32'd160000000), // input wire [31 : 0] s_axis_config_tdata
  8. .m_axis_data_tvalid(), // output wire m_axis_data_tvalid
  9. .m_axis_data_tdata(m_axis_data_tdata2), // output wire [31 : 0] m_axis_data_tdata
  10. .m_axis_phase_tvalid(), // output wire m_axis_phase_tvalid
  11. .m_axis_phase_tdata() // output wire [31 : 0] m_axis_phase_tdata
  12. );
  13. assign o_carrier2=m_axis_data_tdata2[15:0];
  14. //解调
  15. wire signed[15:0]o_cos3;
  16. wire signed[15:0]o_cos4;
  17. wire[31:0]m_axis_data_tdata3;
  18. dds_compiler_0 dds_compiler_u3(
  19. .aclk (i_clk), // input wire aclk
  20. .aresetn (~i_rst), // input wire aresetn
  21. .s_axis_config_tvalid(1'b1), // input wire s_axis_config_tvalid
  22. .s_axis_config_tdata(32'd60000000), // input wire [31 : 0] s_axis_config_tdata
  23. .m_axis_data_tvalid(), // output wire m_axis_data_tvalid
  24. .m_axis_data_tdata(m_axis_data_tdata3), // output wire [31 : 0] m_axis_data_tdata
  25. .m_axis_phase_tvalid(), // output wire m_axis_phase_tvalid
  26. .m_axis_phase_tdata() // output wire [31 : 0] m_axis_phase_tdata
  27. );
  28. assign o_cos3=m_axis_data_tdata1[15:0];
  29. ......................................................
  30. A788

4.完整算法代码文件

V

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/482388
推荐阅读
相关标签
  

闽ICP备14008679号