当前位置:   article > 正文

m基于FPGA的8FSK调制解调系统verilog实现,包含testbench测试文件_fpga实现fsk

fpga实现fsk

目录

1.算法仿真效果

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

3.Verilog核心程序

4.完整算法代码文件获得


1.算法仿真效果

vivado2019.2仿真结果如下:

将波形放大,看到如下效果:

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

       8FSK(8-Frequency Shift Keying)是一种常用的数字调制方法,它通过在不同的频率上发送二进制数据来进行通信。8FSK在通信系统中被广泛应用,因为它具有较高的数据传输速率和较强的抗干扰能力。

       在8FSK中,每个二进制位被发送在一个特定的频率上。发送频率根据发送的数据位而变化,具体地说,发送的频率根据发送的二进制位的值确定。

      具体地,8FSK使用8个不同的频率来表示8个不同的二进制位。频率f0到f7对应于二进制位000到111。每个频率对应于一个特定的时间间隔,称为符号时间。在一个符号时间内,数据位被发送出去。在发送端,输入的二进制数据首先被分成两个比特一组,然后根据以下规则映射到相应的频率上:

  • 000 - f0
  • 001 - f1
  • 010 - f2
  • 011 - f3
  • 100 - f4
  • 101 - f5
  • 110 - f6
  • 111 - f7

以上是一种常见的映射方式,但也可以使用其他的映射方式。

       在接收端,8FSK信号被接收并解调,以恢复原始的二进制数据。解调器需要知道每个频率对应的二进制位,以便正确地恢复数据。解调器可以使用各种方法来实现,例如滤波器、频谱分析等。

       8FSK调制的基本原理可以用数学公式表示。假设输入的二进制数据为b(t),发送的频率为f(t),则调频信号s(t)可以表示为:

s(t) = Re[b(t)exp(j2πf(t))]

其中Re表示取实部,j表示虚数单位,π表示圆周率。

       在接收端,解调器需要对接收到的信号进行解调,以恢复出原始的二进制数据。解调可以使用各种方法来实现,例如包络检波、同步检测等。其中包络检波的基本原理是检测接收信号的包络线,以恢复出原始的数据。其数学公式可以表示为:

b(t) = Re[s(t)exp(-j2πf(t))]

8FSK调制具有以下优点:

  1. 较高的传输速率:由于使用了多个频率进行传输,因此可以实现较高的传输速率。
  2. 较强的抗干扰能力:由于使用了频率偏移键控,因此具有较强的抗干扰能力。
  3. 适用于多径传播环境:由于使用了不同的频率进行传输,因此可以适用于多径传播环境。
  4. 实现简单:相对于其他数字调制方法,8FSK的实现较为简单。

然而,8FSK调制也存在以下缺点:

  1. 频带利用率较低:由于使用了多个频率进行传输,因此频带利用率较低。

3.Verilog核心程序

  1. `timescale 1ns / 1ps
  2. //
  3. //
  4. module test_FSK;
  5. reg i_clk;
  6. reg i_rst;
  7. reg[2:0]i_bits;
  8. wire signed[15:0]o_carrier1;
  9. wire signed[15:0]o_carrier2;
  10. wire signed[15:0]o_carrier3;
  11. wire signed[15:0]o_carrier4;
  12. wire signed[15:0]o_carrier5;
  13. wire signed[15:0]o_carrier6;
  14. wire signed[15:0]o_carrier7;
  15. wire signed[15:0]o_carrier8;
  16. wire signed[31:0]o_de_fsk1;
  17. wire signed[31:0]o_de_fsk2;
  18. wire signed[31:0]o_de_fsk3;
  19. wire signed[31:0]o_de_fsk4;
  20. wire signed[31:0]o_de_fsk5;
  21. wire signed[31:0]o_de_fsk6;
  22. wire signed[31:0]o_de_fsk7;
  23. wire signed[31:0]o_de_fsk8;
  24. wire signed[15:0]o_fsk;
  25. wire [2:0]o_bits;
  26. FSK uut(
  27. .i_clk(i_clk),
  28. .i_rst(i_rst),
  29. .i_bits(i_bits),
  30. .o_carrier1(o_carrier1),
  31. .o_carrier2(o_carrier2),
  32. .o_carrier3(o_carrier3),
  33. .o_carrier4(o_carrier4),
  34. .o_carrier5(o_carrier5),
  35. .o_carrier6(o_carrier6),
  36. .o_carrier7(o_carrier7),
  37. .o_carrier8(o_carrier8),
  38. .o_fsk(o_fsk),
  39. .o_de_fsk1(o_de_fsk1),
  40. .o_de_fsk2(o_de_fsk2),
  41. .o_de_fsk3(o_de_fsk3),
  42. .o_de_fsk4(o_de_fsk4),
  43. .o_de_fsk5(o_de_fsk5),
  44. .o_de_fsk6(o_de_fsk6),
  45. .o_de_fsk7(o_de_fsk7),
  46. .o_de_fsk8(o_de_fsk8),
  47. .o_bits(o_bits)
  48. );
  49. initial
  50. begin
  51. i_clk = 1'b1;
  52. i_rst = 1'b1;
  53. #1000
  54. i_rst = 1'b0;
  55. end
  56. initial
  57. begin
  58. i_bits= 3'b000;
  59. #3050
  60. repeat(100)
  61. begin
  62. #700
  63. i_bits= 3'b000;
  64. #900
  65. i_bits= 3'b011;
  66. #880
  67. i_bits= 3'b000;
  68. #900
  69. i_bits= 3'b001;
  70. #700
  71. i_bits= 3'b010;
  72. #800
  73. i_bits= 3'b100;
  74. #800
  75. i_bits= 3'b011;
  76. #1600
  77. i_bits= 3'b011;
  78. #1600
  79. i_bits= 3'b100;
  80. #600
  81. i_bits= 3'b110;
  82. #700
  83. i_bits= 3'b100;
  84. #600
  85. i_bits= 3'b101;
  86. #1600
  87. i_bits= 3'b111;
  88. #1800
  89. i_bits= 3'b010;
  90. #1400
  91. i_bits= 3'b01;
  92. #1400
  93. i_bits= 3'b101;
  94. #1400
  95. i_bits= 3'b100;
  96. #1900
  97. i_bits= 3'b101;
  98. #1700
  99. i_bits= 3'b101;
  100. #700
  101. i_bits= 3'b001;
  102. #1700
  103. i_bits= 3'b000;
  104. #1800
  105. i_bits= 3'b101;
  106. #1600
  107. i_bits= 3'b100;
  108. #1400
  109. i_bits= 3'b100;
  110. #1600
  111. i_bits= 3'b000;
  112. end
  113. end
  114. always #5 i_clk=~i_clk;
  115. endmodule
  116. 00_048m

4.完整算法代码文件获得

V

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

闽ICP备14008679号