基于FPGA的FM调制(载波频率、频偏、峰值、DAC输出)-带仿真文件-上板验证正确

基于FPGA的FM调制-带仿真文件-上板验证正确

  • 前言
  • 一、FM调制储备知识
        • 载波频率
        • 频偏
        • 峰值
        • 个人理解
  • 二、代码分析
    • 1.模块分析
    • 2.波形分析
  • 总结


前言

FM、AM等调制是学习FPGA信号处理一个比较好的小项目,通过学习FM调制过程熟悉信号处理的一个简单流程,进而熟悉信号变换的一些基本方法。

一、FM调制储备知识

载波频率

载波频率是指在调制过程中未被调制(或是未被输入信息影响)的频率。也就是说,载波频率是FM信号中不含信息的那部分信号的频率。在调频广播中,通常会选择一个固定的载波频率,比如88 MHz到108 MHz(调频广播的常见范围)。

载波频率是基带信号的载体,信号的频率会围绕这个载波频率上下偏移,偏移的幅度和方向取决于输入的信号的特性

频偏

频偏是指调制过程中,载波的频率偏离原始载波频率的幅度。FM调制中,信息信号(如音频信号)通过改变载波频率的偏移量来传递信息。频偏越大,表示信号的频率变化范围越广。频偏大小直接影响FM信号的带宽和质量。频偏较大时,带宽较宽,且信号可以携带更多的信息量。

峰值

在FM调制中,峰值通常指的是信号的最大变化值,尤其是指调制信号的最大频率偏移值。峰值反映了调频过程中信号的最大频率变化幅度。

个人理解

首先明确对象,一个是调制信号,一个是载波信号,另一个就是频偏幅度。其次再深一层次就是频率控制字的控制了,首先载波频率是固定的,所以频率控制字也是固定的,而频偏是根据调制信号进行变化的,所以主要就是频偏控制字的实现。
重点考察:DDS的使用、DAC模块的使用

二、代码分析

本模块中涉及到fft频谱分析,所以增加了一些端口,fft的按键控制、输出有效、持续、标志等。
本文产生载波频率为50k,频偏3k

1.模块分析

模块输入:时钟、复位、调制信号
模块输出:FM调制信号
载波信号的产生是基于ROM读取进行产生的,深度是1024 宽度是8位。基础时钟是50mhz,所以如果正常读取信号的话,这个频率是50m/1024=48.8khz左右。通过这个基础的变化进行其他频率信号的产生。
本文要产生一个50k的载波信号,因此50k/48.8k=1.024左右,得出来这个系数之后怎么获取频率字?首先这个系数是一个小数,FPGA本身是处理不了小数的,因此我们需要进行放大,本文选择放大2的22次方倍,1.024*2^22=4294967,得到了频率字,同时因为1024和放大倍数,频率字的位宽是10+22=32。
频偏控制,首先确定范围是3k,因此按照上面的方法算出来3k的频率控制字:255852,其次通过调用一个乘法器ip核将调制信号与3k频率字进行想乘,进而得到随调制信号变化的频偏数值,最后将这个频偏数值作用到载波频率上,就完成了FM的调制工作。
本篇文章的大致实现方法参考了:FM调制讲解DDS

module FM_Mod(input	clk,input	rst_n,input  signed	[7:0]	adc_data,input   key_fft,output  reg   last,output  reg   s_axis_data_tvalid,output  reg   fft_flag,output	signed  [7:0]	FM_Mod
);parameter signed Freq_I = 32'd4294967;		//  1.024 * 2的22次方
parameter signed Freq_Word = 20'd255852;	  //  0.061 * 2的22次方
wire	signed	[27:0]	mult_data;             //0.061*adc_data
wire	signed	[20:0]	Freq_Offset;           
reg             [14:0]  count;MULT	b2v_inst6(.CLK(clk),.A(adc_data),.B(Freq_Word),.P(mult_data)
);
assign	Freq_Offset = mult_data[27:7];	//移位  除法   2的7次方reg   signed  [31:0] cnt_I;//22+10
wire    [9:0]   addr_I;
always @(posedge clk or negedge rst_n) beginif(!rst_n)	begincnt_I <= 0;endelse	begincnt_I <= cnt_I + Freq_I + Freq_Offset;end
endalways @(posedge clk or negedge rst_n) beginif(!rst_n)	beginfft_flag <= 1'b0;endelse if(key_fft==1'b0)	beginfft_flag <= ~fft_flag;endelse beginfft_flag <= fft_flag;end
endalways @(posedge clk or negedge rst_n) beginif(!rst_n)	begincount <= 15'd0;last <=1'b0;s_axis_data_tvalid<=1'b0;endelse if(fft_flag && count<2048)	begins_axis_data_tvalid <=1'b1;count <= count + 1'b1;last <= 1'b0;endelse if(fft_flag && count==2048)	begins_axis_data_tvalid= 1'b0;count <= 15'd0;last <=1'b1;end
endassign  addr_I = cnt_I[31:22] ; //移位  除法   2的16次方ROM	b2v_inst(.clka(clk),.addra(addr_I),.douta(FM_Mod)
);endmodule

2.波形分析

下面是500hz 的调制信号,上面是FM调制完的信号。
3k的频偏对于50k的载波信号来说比较不明显,但是通过观看不同位置的周期能够看出明显差距,通过选取500hz信号的低谷和峰谷测量fm信号周期,能够看出明显的差距。如果需要明显的调制效果,可以将频偏增加。
在这里插入图片描述

总结

能够学习真好,需要学习的太多了,时不时的记录一下,好记性不如烂笔头。因为来医院了一周多没有学习了,没那个精力也没有那个氛围,所以还是想说活着就好,能够学习真好,感谢一切吧。

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

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

相关文章

Scala学习记录,统计成绩

统计成绩练习 1.计算每个同学的总分和平均分 2.统计每个科目的平均分 3.列出总分前三名和单科前三名&#xff0c;并保存结果到文件中 解题思路如下&#xff1a; 1.读入txt文件&#xff0c;按行读入 2.处理数据 &#xff08;1&#xff09;计算每个同学的总分平均分 import s…

路由策略与路由控制实验

AR1、AR2、AR3在互联接口、Loopback0接口上激活OSPF。AR3、AR4属于IS-IS Area 49.0001&#xff0c;这两者都是Level-1路由器&#xff0c;AR3、AR4的系统ID采用0000.0000.000x格式&#xff0c;其中x为设备编号 AR1上存在三个业务网段A、B、C&#xff08;分别用Loopback1、2、3接…

第J7周:对于RenseNeXt-50算法的思考

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 文章目录 一、前言1、导入包2、分组卷积模块3、残差单元4、堆叠残差单元5、搭建ResNeXt-50网络 二、问题思考 电脑环境&#xff1a; 语言环境&#xff1a;Pyth…

某充电桩业务服务内存监控和程序行为分析

原作者&#xff1a;展贝 原文地址&#xff1a;https://mp.weixin.qq.com/s/nnYCcVtwowvmj7Zn9XLIUg 在当今数据驱动的环境中&#xff0c;理解内存指标和程序行为对于确保应用程序的性能和可靠性至关重要。在依赖实时数据处理和高可用性的行业中尤其如此。通过利用可观测工具&am…

基于SpringBoot共享汽车管理系统【附源码】

基于SpringBoot共享汽车管理系统 效果如下&#xff1a; 系统注册页面 系统登陆页面 系统管理员主页面 用户信息管理页面 汽车投放管理页面 使用订单页面 汽车归还管理页面 研究背景 随着计算机技术和计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所。二十…

计算机网络基础(2):网络安全/ 网络通信介质

1. 网络安全威胁 网络安全&#xff1a;目的就是要让网络入侵者进不了网络系统&#xff0c;及时强行攻入网络&#xff0c;也拿不走信息&#xff0c;改不了数据&#xff0c;看不懂信息。 事发后能审查追踪到破坏者&#xff0c;让破坏者跑不掉。 网络威胁来自多方面&#xff1a…

Cesium K-means自动聚合点的原理

Cesium K-means自动聚合点的原理 Cesium 是一个开源的 JavaScript 库&#xff0c;用于在 Web 环境中创建 3D 地球和地图应用。它能够处理地理空间数据&#xff0c;并允许开发者对大规模的地理数据进行可视化展示。在一些应用中&#xff0c;尤其是当处理大量地理坐标点时&#…

JAVA:Spring Boot 3 实现 Gzip 压缩优化的技术指南

1、简述 随着 Web 应用的用户量和数据量增加&#xff0c;网络带宽和页面加载速度逐渐成为瓶颈。为了减少数据传输量&#xff0c;提高用户体验&#xff0c;我们可以使用 Gzip 压缩 HTTP 响应。本文将介绍如何在 Spring Boot 3 中实现 Gzip 压缩优化。 2、配置 Spring Boot 3 对…

TsingtaoAI具身智能高校实训方案通过华为昇腾技术认证

日前&#xff0c;TsingtaoAI推出的“具身智能高校实训解决方案-从AI大模型机器人到通用具身智能”基于华为技术有限公司AI框架昇思MindSpore&#xff0c;完成并通过昇腾相互兼容性技术认证。 TsingtaoAI&华为昇腾联合解决方案 本项目“具身智能高校实训解决方案”以实现高…

vitess使用记录:vtctldclient,设置分表规则

继续探索未完成的事情。 vitess使用记录系列已经写了好几篇了&#xff0c;记录了在测试过程中遇到的各种问题。《vitess使用&#xff1a;从部署到go客户端连接查询》、《vitess使用记录&#xff1a;vtctldclient》、《vitess使用&#xff1a;基于源码运行vtctldclient工具》整…

houdini肌肉刷pin点的方法

目标&#xff1a;产生gluetoanimation这个属性 主要节点&#xff1a;attribute paint(或者muscle paint) 步骤1&#xff1a; 导入肌肉资产 导入的是rest shape的肌肉 在有侧边栏可以打开display group and attribute list&#xff0c;方便查看group。不同的肌肉块按照muscl…

10个Word自动化办公脚本

在日常工作和学习中&#xff0c;我们常常需要处理Word文档&#xff08;.docx&#xff09;。 Python提供了强大的库&#xff0c;如python-docx&#xff0c;使我们能够轻松地进行文档创建、编辑和格式化等操作。本文将分享10个使用Python编写的Word自动化脚本&#xff0c;帮助新…

在开发环境中,前端(手机端),后端(电脑端),那么应该如何设置iisExpress

首先&#xff0c;要想手机端应用能成功请求后端&#xff0c;两个设备至少需在同一个局域网内&#xff0c;且IP地址互通&#xff1b; 因为ajax是http(s)://IP地址端口号的方式请求&#xff0c;但是iisExpress默认是localhost如何解决&#xff0c;并没有IP地址&#xff0c;所以手…

嵌入式硬件面试题【经验】总结----会不断添加更新

目录 引言 一、电阻 1、电阻选型时一般从那几个方面考虑 2、上拉电阻的作用 3、PTC热敏电阻作为电源电路保险丝的工作原理 4、如果阻抗不匹配&#xff0c;有哪些后果 二、电容 1、电容选型一般从哪些方面进行考虑? 2、1uf的电容通常来滤除什么频率的信号 三、三极管…

初识java(4)

今天给大家分享一下java中内置类型定义时的一些要点&#xff0c;我已经整理成笔记&#xff0c;现在分享给大家。 整型变量: 注:在定义int变量时,所赋值不能超过int的范围; 了 intd:1234567890127411编译时报错,初值超过胃int 当你赋值的过而值大于这个变量能够保存的最大值…

计算机毕业设计Python+LSTM天气预测系统 AI大模型问答 vue.js 可视化大屏 机器学习 深度学习 Hadoop Spark

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

初窥 HTTP 缓存

引言 对于前端来说, 你肯定听说过 HTTP 缓存。 当然不管你知不知道它, 对于提高网站性能和用户体验, 它都扮演着重要的角色! 它通过在客户端和服务器之间存储和重用先前获取的资源副本, 来减少网络流量和降低资源加载时间, 从而提升用户体验! 以下是 HTTP 缓存的重要性: 减少…

02_Django路由Router

二、Django路由Router 在实际开发过程中&#xff0c;一个Django 项目会包含很多的 app &#xff0c;这时候如果我们只在主路由里进行配置就会显得杂乱无章&#xff0c;所以通常会在每个 app 里&#xff0c;创建各自的urls.py路由模块&#xff0c;然后从根路由出发&#xff0c;…

110页PPT战略指南:剖析Cross SWOT分析、市场洞察与内部优化方案

您看到的是一个非常全面的通过Cross SWOT制定战略方案的框架。以下是对每个部分的简要解释和补充&#xff0c;以帮助您更好地理解和应用这个框架&#xff1a; 一、通过Cross SWOT制定战略方案 1. 宏观环境 (1) PEST分析&#xff1a;评估政治&#xff08;Political&#xff0…

ArcGIS 软件中路网数据的制作

内容导读 路网数据是进行网络分析的基础&#xff0c;它是建立网络数据集的数据来源。 本文我们以OSM路网数据为例&#xff0c;详细介绍OSM路网数据从下载&#xff0c;到数据处理&#xff0c;添加属性&#xff0c;完成符合网络分析的网络数据集的全部过程。 01 数据获取 比较…