手把手教你玩转AD9361数字调制解调系列(二) ----纯逻辑实现FSK信号的数字调制解调

因最近客户需求,用纯PL实现AD9361的数字信号调制解调,于是就把各种数字调制都在AD9361上都实现了一遍。优点就是:既可以在zynq系列上配置9361,也可以在纯FPGA系列配置9361。并且理解起来比较简单!!!

制作不易,记得三连哦,给我动力,持续更新中!!!

完整工程文件下载:纯逻辑设计AD9361发射2FSK   提取码:1595


如果看过我之前的文章的小伙伴,肯定都知道如何通过AD936x Evaluation Software,来生成对AD9361的配置,以及如何在vivado里面调用这个配置,并写入AD9361,接下来将继续延伸我们的设计,来基于纯逻辑配置AD9361的基础上,实现各种数字信号的调制解调。

新来的小伙伴可以看一下我以前的文章:

纯逻辑配置AD9361教程/通过UART串口发送配置文件配置AD9361/通过rom配置AD9361/纯PL配置AD9361_ad9361发送数据代码-CSDN博客

本篇文章将介绍如何通过AD9361发射2FSK信号以及纯verilog代码实现和讲解。

一、FSK调制原理

在本系列的设计中,对数字调制的部分,都是采用IQ数字调制。

IQ 调制:
        IQ 调制是一种复数域的调制方式,其中 I 表示实部信号,Q 表示虚部信号。将二进制数据映射到 I/Q 平面上的不同位置,从而实现数字调制。
FSK 的 IQ 调制:
        对于 FSK 调制,每个频率对应一个不同的 I/Q 相位。例如,对于二进制 FSK,可以将logic 0 映射到某一频率的 I/Q 相位,将 logic 1 映射到另一个频率的 I/Q 相位。通过切换这两个频率的 I/Q 相位,就可以实现二进制 FSK 调制。
实现步骤:
        确定 FSK 的两个频率,如 f1 和 f2。根据这两个频率,计算出对应的 I/Q 值。例如,f1 对应 (I1, Q1),f2 对应 (I2, Q2)。根据输入的二进制数据,在 I/Q 平面上切换这两个 I/Q 点,从而生成 FSK 调制后的 I/Q 信号。将 I/Q 信号送到 I/Q 调制器,生成最终的 FSK 调制信号。

二、FPGA工程代码

主要代码为:FSK调制模块、9361数据接收和发射接口、9361配置模块、串口模块,和之前的ASK调制的差异主要是把ASK调制部分替换为了FSK调制,其他代码不变(一劳永逸)

(1)顶层top

主要连接各个模块,已结对差分信号的差分转换

部分代码:

wire AD9361_DATA_CLK;
   IBUFDS #(
      .DIFF_TERM("TRUE"),       // Differential Termination
      .IBUF_LOW_PWR("TRUE"),     // Low power="TRUE", Highest performance="FALSE" 
      .IOSTANDARD("DEFAULT")     // Specify the input I/O standard
   ) IBUFDS_AD9361_DATA_CLK (
      .O(AD9361_DATA_CLK),  // Buffer output
      .I(AD9361_DATA_CLK_p),  // Diff_p buffer input (connect directly to top-level port)
      .IB(AD9361_DATA_CLK_n) // Diff_n buffer input (connect directly to top-level port)
   );

wire AD9361_RX_FRAME;
   IBUFDS #(
      .DIFF_TERM("TRUE"),       // Differential Termination
      .IBUF_LOW_PWR("TRUE"),     // Low power="TRUE", Highest performance="FALSE" 
      .IOSTANDARD("DEFAULT")     // Specify the input I/O standard
   ) IBUFDS_AD9361_RX_FRAME (
      .O(AD9361_RX_FRAME),  // Buffer output
      .I(AD9361_RX_FRAME_p),  // Diff_p buffer input (connect directly to top-level port)
      .IB(AD9361_RX_FRAME_n) // Diff_n buffer input (connect directly to top-level port)
   );

(2)配置9361模块

主要通过读取rom中的配置信息,然后通过SPI去写入9361寄存器,实现对9361的配置 

(3)uart接收模块

主要是接收串口发来的配置信息,然后存储到rom,进而通过上一个模块进行9361的配置

三、下板验证

通过GNUradio搭建一个接收器,对本次设计的验证

经过调制的FSK频谱图:

如上图可以发现,FSK调制信号发射成功

FSK星座图:

如上图可以发现,星座图非常清晰,说明信号质量很稳定.

由上分析可得,FSK调制信号发射成功!

至此FSK的部分就已经结束了,后期更新解调部分和FM调制解调部分

完整工程文件下载:纯逻辑设计AD9361发射FSK   提取码:1589

如果感觉文章对您有用,麻烦三连支持一下,方便下次用到的时候,就可以快速找到我,非常感谢您的支持!!! 

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值