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

因最近客户需求,用纯PL实现AD9361的数字信号调制解调,于是就把各种数字调制都在AD9361上都实现了一遍。

优点就是:既可以在zynq系列上配置9361,也可以在纯FPGA系列配置9361。并且理解起来比较简单!!!

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

完整工程文件下载:纯逻辑设计AD9361发射QSPK工程下载 (点击蓝色文字即可下载)

提取码:19w5


 对于之前学习过我文章的小伙伴来说,大家应该都了解如何利用 AD936x Evaluation Software 生成 AD9361 的配置,并在 Vivado 中调用该配置,最后写入 AD9361 芯片。

        对于新来的小伙伴而言,我建议你可以先回顾一下我之前的文章内容。在那些文章中,我详细介绍了如何通过软件生成 AD9361 的配置,并在 Vivado 开发环境中使用该配置。这些基础知识对于接下来的内容学习很重要。

        在接下来的设计中,我们将在纯逻辑配置 AD9361 的基础上,实现各种数字信号的调制解调功能。这将涉及更多的数字信号处理知识和技术。如果你对这些内容感兴趣,不妨继续关注我的后续文章。我会在这些文章中, 全面地讲解如何基于 AD9361 实现各种数字调制解调功能的具体实现方法。

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

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

一、QPSK调制解调原理

QPSK (Quadrature Phase Shift Keying) 是一种广泛使用的数字调制方式,它通过改变载波的相位来传输数据。QPSK 实现 IQ 调制解调的基本原理包括以下几个方面:

1. 基本概念

  • I 和 Q 分量:QPSK 使用两个正交的载波,即相差90度的两个信号,称为 I(同相)分量和 Q(正交)分量。
  • 相位变化:QPSK 通过改变载波信号的相位来表示数据,每个符号可以表示两个比特(00、01、10、11)。

2. 调制过程

QPSK 调制通过将输入比特流转换为 I 和 Q 信号来实现,具体步骤如下:

  1. 比特分组:将输入的比特流分成两位一组。例如,输入比特流为 11001010,则分组为 11、00、10、10。
  2. 映射相位:将每组比特映射到一个相位。例如:
    • 00 -> 0度
    • 01 -> 90度
    • 10 -> 180度
    • 11 -> 270度
  3. 生成 I 和 Q 信号:通过以下公式生成 I 和 Q 信号:
    • I(t)=Acos⁡(θ)
    • Q(t)=Asin⁡(θ) 其中 AAA 是信号的振幅,θ\thetaθ 是相位角。
  4. 合成信号:将 I 和 Q 信号相加,得到调制信号:
    • S(t)=I(t)cos⁡(2πfct)−Q(t)sin⁡(2πfct) 其中 fcf_cfc​ 是载波频率。

3. 解调过程

QPSK 解调的目的是从接收到的调制信号中提取原始的比特流,具体步骤如下:

  1. 分离 I 和 Q 信号:将接收到的信号通过两个正交的本地振荡器,得到 I 和 Q 信号:
    • Ir(t)=S(t)cos⁡(2πfct)
    • Qr(t)=−S(t)sin⁡(2πfct)
  2. 低通滤波:对 I 和 Q 信号进行低通滤波,去除高频分量,得到基带信号:
    • Ibb(t)=LPF(Ir(t))
    • Qbb(t)=LPF(Qr(t))
  3. 恢复相位:计算 I 和 Q 信号的相位:
    • θr=arctan⁡(Qbb(t)/Ibb(t))
  4. 相位映射:将相位映射回比特:
    • 0度 -> 00
    • 90度 -> 01
    • 180度 -> 10
    • 270度 -> 11

二、FPGA工程代码

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

(1)顶层top

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

部分代码:

wire signed [15:0] I, Q;QPSK_Modulator modulator(.clk(clk),.rst(~RstN),.data_in(data_in),.I_out(I),.Q_out(Q)
);QPSK_Demodulator demodulator(.clk(clk),.rst(~RstN),.I_in(I),.Q_in(Q),.data_out(data_out)
);

(2)配置9361模块

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

(3)QPSK调制模块

QPSK_Modulator 模块:主要功能将输入的两位数据(00, 01, 10, 11)转换为 I 和 Q 信号。

部分代码:

module QPSK_Modulator(input wire clk,input wire rst,input wire [1:0] data_in, // 输入两位数据output reg signed [15:0] I_out, // I 分量输出output reg signed [15:0] Q_out  // Q 分量输出
);always @(posedge clk or posedge rst) beginif (rst) beginI_out <= 16'sd0;Q_out <= 16'sd0;

(4)QPSK解调模块

QPSK_Demodulator 模块:将 接受到的I 和 Q 信号重新转换为两位数据。

部分代码:

module QPSK_Demodulator(input wire clk,input wire rst,input wire signed [15:0] I_in, // I 分量输入input wire signed [15:0] Q_in, // Q 分量输入output reg [1:0] data_out // 解调后的数据输出
);always @(posedge clk or posedge rst) beginif (rst) begindata_out <= 2'b00;end else beginif (I_in > 16'sd0 && Q_in > -16'sd16384 && Q_in < 16'sd16384) begin

三、下板测试

把上述FPGA工程,综合编译,然后生成bit文件

本设计使用的硬件为官方开发板zedboard和ad9361发射,然后通过一个sdr设备进行信号接收,硬件链接如下所示

然后把bit文件下载到zedboard开发板,通过ila查看升余弦函数的输出

然后通过频谱仪和示波器可以看出符合QPSK信号特征,最后利用逻辑信号分析仪对QPSK信号查看星座图。本设计的码元速率设置的为1MHZ

通过上述分析仪可以观察到,星座图符合QPSK信号的特征,且相位稳定,表明信号调制正确。整个工程的9361接口和配置函数运行正常。

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/43820.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推荐4款免费好用文本转语音工具

Edge文本转语音 Edge文本转语音功能主要通过Edge-TTS实现。Edge-TTS是由微软开发的文本转语音&#xff08;TTS&#xff09;Python库&#xff0c;利用微软Azure Cognitive Services的强大功能&#xff0c;能够将文本信息转换成流畅自然的语音输出。该库支持多种中文语音语色&…

PID控制与模糊PID控制的比较

一、PID控制器的设计 1.PID控制原理图&#xff1a; PID控制其结构框图如下图所示&#xff1a; 图1&#xff1a;PID控制器结构框图 2.PID控制器传递函数的一般表达式 PID控制器传递函数的一般表达形式为&#xff1a; 其中kp为比例增益&#xff1b;ki为积分增益&#xff1b;k…

《大语言模型的临床和外科应用:系统综述》

这篇题为《大语言模型的临床和外科应用&#xff1a;系统综述》的文章对大语言模型&#xff08;LLM&#xff09;目前在临床和外科环境中的应用情况进行了全面评估。 大语言模型&#xff08;LLM&#xff09;是一种先进的人工智能系统&#xff0c;可以理解和生成类似人类的文本。…

EUC 2024 I. Disks

原题链接&#xff1a;Problem - I - Codeforces 题意&#xff1a;有n个圆&#xff0c;可以调整每个圆的半径&#xff0c;要求相切的圆改变后仍然相切&#xff0c;不能有圆相互覆盖&#xff0c;并且调整之后全部圆半径的总和变小。 思路&#xff1a;一个圆的半径增大&#xff…

【YOLO8系列】(二)YOLOv8环境配置,手把手嘴对嘴保姆教学

目录 一. 准备环境 1.Anaconda下载 2.创建yolov8虚拟环境 3.pytorch安装 4.CUDA下载 5.CUDNN下载 二、yolov8模型下载 1.clone模型 2.pycharm配置 ①解释器配置 ②终端配置 3.安装必要库 4.下载训练模型 三、 环境验证 四、总结 YOLOv8 是 YOLO 系列最新的目标…

“不要卷模型,要卷应用”之高考志愿填报智能体

摘要&#xff1a;李总的发言深刻洞察了当前人工智能领域的发展趋势与核心价值所在&#xff0c;具有高度的前瞻性和实践性。“大家不要卷模型&#xff0c;要卷应用”这一观点强调了在当前人工智能领域&#xff0c;应该更加注重技术的实际应用而非单纯的技术竞赛或模型优化。个性…

兼容性报错--调整字符集解决

文章目录 错误解决办法Unicode 字符集(两个字节来表示一个字符)多字节字符集(一个字节来表示一个字符)如何选择字符集char与wchar_t的区别LPCSTR与LPCWSTR的区别 错误 解决办法 切换字符集类型 Unicode 字符集(两个字节来表示一个字符) 优点&#xff1a; 支持更多的字符集…

Linux|背景 环境搭建

目录 一、简述Linux发展史 1.1计算机的诞生 1.2操作系统的诞生 1.3Linux操作系统开源 1.4Linux发行版本 二、搭建Linux环境 三、使用shell远程登入到Linux 一、简述Linux发展史 可能大家未听说过Linux&#xff0c;或者只知道它是一个搭配在计算机上的操作系统&#xff0…

Studio One直播声音怎么调 Studio One直播没有声音输出怎么办 studio one如何设置声音变好听

Studio One做为新生代音乐工作站&#xff0c;凭借更低的价格和完备的功能&#xff0c;获得了音乐人和直播行业工作者的青睐&#xff0c;尤其是对硬件声卡的适配支持更好&#xff0c;特别适合用来配合线上教学和电商带货。 一、Studio One直播声音怎么调 在Studio One进行直播时…

C基础day7

一、思维导图 二、课后练习 1、提示并输入一个字符串&#xff0c;统计该字符串中字母、数字、空格以及其他字符的个数 #include<myhead.h> #define M 20 int main(int argc, const char *argv[]) {int sum_a0,sum_b0,sum_c0,sum_d0;char str[M];printf("please en…

鼠标点击触发-----以控制开灯、宝箱触发为例

开灯 当点击时触发开灯效果 &#xff08;不用设置触发器&#xff09; using System.Collections; using System.Collections.Generic; using UnityEngine;public class OpenLight : MonoBehaviour {public Transform light;bool isOpen;private void OnMouseDown(){if (!isOpe…

Hospital Management Startup 1.0 SQL 注入漏洞(CVE-2022-23366)

前言 CVE-2022-23366是一个影响HMS v1.0的SQL注入漏洞。该漏洞存在于patientlogin.php文件中&#xff0c;允许攻击者通过特定的SQL注入来获取或修改数据库中的敏感信息。 具体来说&#xff0c;攻击者可以通过向patientlogin.php发送恶意构造的SQL语句来绕过身份验证&#xff…

想拿高薪?2024年前端面试必问的10道挑战性JS题目!

历史管理 window.location.hash&#xff1a;网址的后面添加的# 字符串 旧方法 如&#xff1a;window.location.hash num; 读取&#xff08;会加1个#&#xff09;、设置&#xff08;会加1个#&#xff09; window.onhashchange改变hash值时触发事件 window.onpopstate &#x…

生信技能51 - 基于BAM文件的微生物污染分析流程

微生物污染分析流程 需提前安装好bwa, bowtie2, samtools,提取未比对到人类参考基因组的bam文件,将其比对到微生物参考基因组,根据比对情况查看是否存在污染。 微生物基因组下载可参考本人文章: 生信软件24 - 查询物种分类学信息和下载基因组TaxonKit和ncbi-genome-down…

拓扑学习系列(9)计算代数拓扑中的复形COMPLEXES

复形 在代数拓扑学中&#xff0c;复形&#xff08;complexes&#xff09;是一种重要的代数结构&#xff0c;用于研究拓扑空间的代数性质和同调理论。复形由一系列的单纯形&#xff08;simplices&#xff09;以特定方式组合而成&#xff0c;形成一个复杂的结构&#xff0c;通过…

Joblib 是一个专注于高效计算和数据持久化的 Python 库

目录 01Joblib 是什么&#xff1f; 为什么选择 Joblib&#xff1f; 安装与配置 02Joblib 的基本用法 并行计算 数据持久化 03实战案例 项目简介 项目结构 依赖安装 应用代码 运行应用 …

mybatisPlus切换数据源不生效和分页不生效解决方法

1.切换数据源不生效 mybatisPlus中&#xff0c;提供了切换数据源的注解DS(“”&#xff09; 但是发现注解并不生效&#xff0c;此时可能性有以下几种&#xff1a; DS注解使用的接口中&#xff0c;一步一步查找是不是使用了Transactional(rollbackFor Exception.class)注解&a…

FunAudioLLM SenseVoice语音转录与CosyVoice语音合成及语音克隆使用案例

参考: https://fun-audio-llm.github.io/ 1、SenseVoice语音转录 在线体验:https://modelscope.cn/studios/iic/CosyVoice-300M 参考:https://github.com/FunAudioLLM/SenseVoice 下载: pip install -U funasr使用: from funasr import AutoModelmodel_dir = "…

怎么将几首音乐合并在一起?这四种合并方法大家都在用!

怎么将几首音乐合并在一起&#xff1f;在音乐的海洋中遨游时&#xff0c;我们是否曾被音乐的海洋所淹没&#xff1f;在享受旋律的流转中&#xff0c;我们是否频繁地在不同的曲目间穿梭&#xff0c;仿佛迷失在无尽的音符之中&#xff1f;但音乐数量的繁多&#xff0c;不仅带来了…