基于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.mzph.cn/web/61458.shtml

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

相关文章

论文笔记(五十九)A survey of robot manipulation in contact

A survey of robot manipulation in contact 文章概括摘要1. 引言解释柔顺性控制的概念&#xff1a;应用实例&#xff1a; 2. 需要接触操控的任务2.1 环境塑造2.2 工件对齐2.3 关节运动2.4 双臂接触操控 3. 接触操控中的控制3.1 力控制3.2 阻抗控制3.3 顺应控制 4. 接触操控中的…

拥抱 OpenTelemetry:阿里云 Java Agent 演进实践

作者&#xff1a;陈承 背景 在 2018 年的 2 月&#xff0c;ARMS Java Agent 的第一个版本正式发布&#xff0c;为用户提供无侵入的的可观测数据采集服务。6 年后的今天&#xff0c;随着软件技术的迅猛发展、业务场景的逐渐丰富、用户规模的快速增长&#xff0c;我们逐渐发现过…

学习ASP.NET Core的身份认证(基于Session的身份认证3)

开源博客项目Blog中提供了另一种访问控制方式&#xff0c;其基于自定义类及函数的特性类控制访问权限。本文学习并测试开源博客项目Blog的访问控制方式&#xff0c;测试程序中直接复用开源博客项目Blog中的相关类及接口定义&#xff0c;并在其上调整判断逻辑。   首先是接口A…

电子应用设计方案-31:智能AI音响系统方案设计

智能 AI 音响系统方案设计 一、引言 智能 AI 音响作为一种新兴的智能家居设备&#xff0c;通过融合语音识别、自然语言处理、音频播放等技术&#xff0c;为用户提供便捷的语音交互服务和高品质的音乐体验。本方案旨在设计一款功能强大、性能稳定、用户体验良好的智能 AI 音响系…

可变电阻和电位器

1.可变电阻和电位器 &#xff08;1&#xff09;可变电阻&#xff1a;阻值可以调整的电阻。 &#xff08;2&#xff09;电位器&#xff1a;为了获得某个电位&#xff08;电势、电压&#xff09;的器件。其本质就是在一个固定阻值的电阻中间增 加一个触点&#xff0c;滑动电阻的中…

RK3568平台开发系列讲解(PWM篇)PWM 子系统框架

🚀返回专栏总目录 文章目录 一、PWM 设备驱动层二、PWM 核心层三、PWM 适配器驱动层沉淀、分享、成长,让自己和他人都能有所收获!😄 📢整个 PWM 子系统可以用下面的框图来描述: 再上图中 PWM 子系统被划分为了三个层次, 分别为用户空间、 内核空间和硬件层, 内核空…

CSAPP Cache Lab(缓存模拟器)

前言 理解高速缓存对 C 程序性能的影响&#xff0c;通过两部分实验达成&#xff1a;编写高速缓存模拟器&#xff1b;优化矩阵转置函数以减少高速缓存未命中次数。Part A一开始根本不知道要做什么&#xff0c;慢慢看官方文档&#xff0c;以及一些博客&#xff0c;和B站视频&…

【趣味升级版】斗破苍穹修炼文字游戏HTML,CSS,JS

目录 图片展示 开始游戏 手动升级&#xff08;满100%即可升级&#xff09; 升级完成&#xff0c;即可解锁打怪模式 新增功能说明&#xff1a; 如何操作&#xff1a; 完整代码 实现一个简单的斗破苍穹修炼文字游戏&#xff0c;你可以使用HTML、CSS和JavaScript结合来构建…

hadoop环境配置-vm安装+麒麟ubantu

一.VM版本 选择16版本&#xff0c;15版本存在windows蓝屏的情况&#xff0c;也不用设置HV等相关设置 激活下载参考下述博客&#xff1a;https://blog.csdn.net/matrixlzp/article/details/140674802 提前在bois打开SVM设置&#xff0c;不设置无法打开新建的虚拟机 ubantu下载…

会议直击|美格智能亮相2024紫光展锐全球合作伙伴大会,融合5G+AI共拓全球市场

11月26日&#xff0c;2024紫光展锐全球合作伙伴大会在上海举办&#xff0c;作为紫光展锐年度盛会&#xff0c;吸引来自全球的众多合作伙伴和行业专家、学者共同参与。美格智能与紫光展锐竭诚合作多年&#xff0c;共同面向5G、AI和卫星通信为代表的前沿科技&#xff0c;聚焦技术…

工业公辅车间数智化节能头部企业,蘑菇物联选择 TDengine 升级 AI 云智控

小T导读&#xff1a;在工业节能和智能化转型的浪潮中&#xff0c;蘑菇物联凭借其自研的灵知 AI 大模型走在行业前沿&#xff0c;为高能耗设备和公辅能源车间提供先进的 AI 解决方案。此次采访聚焦于蘑菇物联与 TDengine 的合作项目&#xff0c;通过 AI 云智控平台的建设&#x…

华为IPD流程学习之——深入解读123页华为IPD流程体系设计方法论PPT

该方案全面介绍了华为IPD流程体系设计方法论&#xff0c;包括流程体系建设的背景、理念、架构、核心特征、构建模型、与组织和战略的关系、运营机制、数字化转型以及流程管理组织等内容&#xff0c;旨在为企业提供一套系统的流程体系建设指导&#xff0c;以提升运营效率、质量和…

插入数据报错:Data truncation: Out of range value for column ‘id‘ at row 1

问题描述&#xff1a; 使用Mybatis-plus插入用户数据报错 错误&#xff1a; SQL: INSERT INTO t_user ( id, username, pwd ) VALUES ( ?, ?, ? ) Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column ‘id’ at …

IntelliJ+SpringBoot项目实战(十九)--在API接口中实现SpringSecurity登录并生成JWT的accessToken

在上节中实现了SpringBootJWT登录&#xff0c;但是介绍的登录是基于SpringSecurity的默认登录页实现的。但是项目开发目前很多都是前后端分离的&#xff0c;也就是VUEAPI接口的模式。所以我们需要实现在API接口中使用SpringSecurity登录。 首先需要在WebSecurityConfig中增加Au…

流水线并行,重计算:GPipe;1F1B(一前一后)调度机制

目录 GPipe 一、GPipe的背景与目的 二、GPipe的功能与特点 三、GPipe的应用与效果 四、GPipe的开源与可扩展性 1F1B(一前一后)调度机制 一、背景与基本概念 二、1F1B调度机制的要求 三、应用与挑战 GPipe 是一个基于Lingvo(Lingvo是Google基于TensorFlow二次开发的…

1-1 Gerrit实用指南

注&#xff1a;学习gerrit需要拥有git相关知识&#xff0c;如果没有学习过git请先回顾git相关知识点 黑马程序员git教程 一小时学会git git参考博客 git 实操博客 1.0 定义 Gerrit 是一个基于 Web 的代码审查系统&#xff0c;它使用 Git 作为底层版本控制系统。Gerrit 的主要功…

基于TensorFlow的手写体数字识别训练与测试

需求&#xff1a; 选择一个最简单的细分方向&#xff0c;初步了解AI图像识别的训练、测试过程TensorFlow、PyTorch、c&#xff0c;三种代码方案&#xff0c;先从TensorFlow入手探讨最基本问题的优化问题 总结&#xff1a; 基于TensorFlow的python代码库自带了mnist 训练数据…

通信与网络基础

1.网络通信基本概念 通信&#xff1a;人、物通过某种介质和行为进行信息传递与交流 网络通信&#xff1a;终端设备之间通过计算机网络进行通信 两个终端通过网线传递文件 多个终端通过路由器传递文件 终端通过Internet下载文件 2.信息传递过程 图1-1 假定A计算机访问B的web…

[免费]SpringBoot+Vue景区订票(购票)系统【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue大景区订票(购票)系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue景区订票(购票)系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 现代经济快节奏发展以及不断完善升级的信息…

医疗知识图谱的问答系统详解

一、项目介绍 该项目的数据来自垂直类医疗网站寻医问药&#xff0c;使用爬虫脚本data_spider.py&#xff0c;以结构化数据为主&#xff0c;构建了以疾病为中心的医疗知识图谱&#xff0c;实体规模4.4万&#xff0c;实体关系规模30万。schema的设计根据所采集的结构化数据生成&…