手把手教你玩转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;可以理解和生成类似人类的文本。…

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

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

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

文章目录 错误解决办法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…

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

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

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;不仅带来了…

单对以太网连接器多场景应用

单对以太网连接器应用场景概述 单对以太网&#xff08;Single Pair Ethernet&#xff0c;简称SPE&#xff09;作为一种新兴的以太网技术&#xff0c;以其独特的优势在多个领域得到了广泛的应用。SPE通过单对电缆进行数据传输&#xff0c;支持高速数据传输&#xff0c;同时还能…

pdf容量大小怎么改,pdf容量太大怎么变小

在数字化时代&#xff0c;pdf文件因其稳定性和跨平台兼容性而成为工作、学习和生活中不可或缺的文件格式。然而&#xff0c;随着文件内容的丰富&#xff0c;pdf文件的体积也日益增大&#xff0c;给存储和传输带来了不少困扰。本文将为你详细介绍多种实用的pdf文件压缩方法&…

基于STM32的智能加湿器

1.简介 基于STM32的加湿器发展前景非常乐观&#xff0c;这主要得益于其在技术、市场需求、应用场景以及政策支持等多方面的优势。STM32微控制器具备强大的处理能力和丰富的外设接口&#xff0c;能够实现精确的湿度监测和智能化控制。基于STM32的加湿器可以根据环境湿度自动调节…

光学传感器图像处理流程(一)

光学传感器图像处理流程&#xff08;一&#xff09; 1. 处理流程总览2. 详细处理流程2.1. 图像预处理2.1.1. 降噪处理2.1.2. 薄云处理2.1.3. 阴影处理 2.2. 辐射校正2.2.1. 辐射定标2.2.2. 大气校正2.2.3. 地形校正 2.3. 几何校正2.3.1. 图像配准2.3.2. 几何粗校正2.3.3. 几何精…

7.9总结

容易推出当移动i与j时等价于j-i-1个左右交换&#xff0c;且每次交换逆序数的奇偶改变&#xff08;无相同元素&#xff09;&#xff0c;假设有一个状态c&#xff0c;且a与b必须以等量的左右交换转移为c&#xff0c;则必须数量相同&#xff0c;元素相同&#xff08;使用异或解决&…

如何忽略部分文件或者文件夹在git提交项目时

嗨&#xff0c;我是兰若&#xff0c;最近发现有些小伙伴在提交代码时&#xff0c;总是把不该提交的文件&#xff0c;比如说本地批跑的缓存文件给提交到了git上面&#xff0c;导致别人在拉取代码的时候&#xff0c;也会把这部分文件拉取到自己本地&#xff0c;从而导致和本地的缓…