FM调制的FPGA实现

基于高云FPGA的FM调制与解调 基于高云FPGA的FM调制与解调一、概述二、平台三、要求四、原理五、程序六、注意事项导出与导入导出导入 一、概述 基于高云FPGA开发板自主设计支持FM调制方式的数字发射机,FM调制外部输入的音频信号,可使FM接收机正确接收并播放。 二、平台 Gowin_V1.9.8 Modelsim SE-64 2019.2 三、要求 (1)FM调制信号由外部音频输入; (2)FM发射机在国家划分的FM广播频段,包含多个电台频率; (3)调制信号通过天线发出,接收距离可达两米以上; 四、原理 FM调制的结构如下图所示: 阅读详情
AI摘要

本文介绍了FM调制的FPGA实现。先说明了平台为Vivado 2017.4和Matlab 2016b,给出相关参数。阐述FM调制原理,即幅度改变频率。详细讲述实现过程,包括用DDS产生调制信号、FM调制模块设计等,最后给出仿真结果并提醒在频谱仪上验证效果。

一、前言

1.1. 平台

  • Vivado 2017.4;
  • Matlab 2016b;

1.2. 参数

  • 载波频率:5M;
  • 频率偏移:-75KHz ~ 75KHz;
  • 系统时钟:100M;
  • AD位宽:12位;

二、关于FM调制

在这里插入图片描述

简单来说就是:幅度改变频率。
与之相对应的是AM:幅度改变幅度。

怎么理解呢?对FM来说:调制信号的幅度大小决定了已调信号的频率。当调制信号的幅度改变时,已调信号的频率也会随之改变,而且只有频率会改变,幅度是保持不变的。

这里对FM调制的理论部分不过多讲述,有兴趣的可以自行上网查阅。

三、FM调制的FPGA实现

一个完整的FM调制系统主要分为以下几个部分:

  • AD模块
  • FM调制模块
  • DA模块

其中,AD模块将模拟调制信号转换成数字调制信号。调制信号可以通过信号发生器产生。在本工程中,将在FPGA内部通过DDS产生一个正弦信号来模拟AD采样数据。FM调制模块的功能就是将调制信号变成FM已调信号。已调信号通过DA模块变成模拟信号后就可以通过天线发送出去。

3.1. 产生调制信号

调制信号是用DDS产生正弦信号来模拟实现的。DDS的实现需要用到ROM IP核,在配置ROM IP核之前需要用Matlab生成IP核所需要的.coe文件。

  1. 生成.coe配置文件

Matlab代码部分参考本人之前的博客:
AM调制的FPGA实现

其中只需要把位宽(改成12)和文件生成路径作相应修改即可。

  1. 调用一个单口ROM IP核

关于IP核的配置如下


  1. 产生调制信号

整个工程的系统时钟为100MHz,这里假设调制信号是一个频率为500KHz的单频信号,换算成频率控制字的话为:

500K * 2^32 / 100M = 21474836

DDS代码如下:

module DDS_Mod(
    input 	clk,
    input   rst_n,

	output  signed  [11:0]  sin		//调制信号
);
//--------------------------------------------------------//
parameter   Freq = 32'd21474836;	//500kHz
parameter   cnt_width =  8'd32;    
//--------------------------------------------------------//

//--------------------------------------------------------//
reg     [cnt_width-1:0]cnt_I = 0;
wire    [9:0] 	addr_I;

always @(posedge clk or negedge rst_n) begin
	if(!rst_n)	begin
		cnt_I <= 0;
	end
	else	begin
	    cnt_I <= cnt_I + Freq;
	end
end

assign  addr_I = cnt_I[cnt_width-1:cnt_width-10];
//--------------------------------------------------------//

//--------------------调用一个单口ROM核--------------------//
Sin				Sin_inst(
  	.clka		(clk),
  	.addra		(addr_I),
  	.douta		(sin)
);

endmodule

3.2. FM调制模块

其实FM调制模块本质上也是一个DDS,区别就在于前者是一个频率可以按照一定规律变化的DDS。那么如何才能让频率不断变化呢?回到上面的代码中,有一个名为“Freq”的常量,这个常量的大小决定了DDS输出频率的大小。如果在这个常量后面再加上一个不断变化的值,那么这个DDS输出的就是一个频率不断变化的波形了。

在FM调制中,有两个比较重要的概念:中心频率和频偏。中心频率可以理解为只有“Freq”时的频率;频偏可以理解为当再加上一个变量后,输出频率大小与中心频率的差值。因此FM调制的关键就在于如何确定“Freq”这个常量后面再加上的这个变量的值。

本工程中中心频率为:5M,频偏为:-75KHz ~ 75KHz。当输入调制信号幅度为0时,输出的FM已调信号频率为5MHz,即载波频率;当输入调制信号幅度最大(即+211)时,输出的FM已调信号频率为5.075MHz(5M+75K);当输入调制信号幅度最小(即-211)时,输出的FM已调信号频率为4.925MHz(5M-75K)。根据以上情况,可以通过调制信号的大小计算出此时输出频率的大小。总结如下表:

输入调制信号大小对应的频率偏移对应频偏的频率控制字
000
2^1175k2^32 * 75k / 100M = 3221225
XYN

上表中,X是已知量,只需要通过等式 N = x * 3221225 / 2^11 求出N的值即可。

  1. 乘法操作

乘法器IP核配置如下:

  1. 除法操作

除法操作可以调用除法器IP核来实现,也可以通过移位相加的方法实现。考虑到除数是2的整数次幂,因此只需要把乘法器输出的结果右移11位即可。

  1. DDS输出已调信号

这部分其实和上面的DDS实现方法类似,只是在频率控制字后面再加上频偏控制字即可。代码如下:

module FM_Mod(
	input	clk,
	input	rst_n,
	input	[11:0]	adc_data,
	output	[11:0]	FM_Mod
);

parameter Freq_I = 32'd214_748_365;		//载波信号的频率5M,时钟100M
parameter Freq_Word = 32'd3_221_225;	//频偏为75K
parameter cnt_width = 8'd32;

//-------------计算频偏控制字--------------//
wire	signed	[43:0]	mult_data;
wire	signed	[31:0]	Freq_Offset;

MULT		MULT_inst(
   	.CLK	(clk),
   	.A		(adc_data),
   	.B		(Freq_Word),
   	.P		(mult_data)
);

assign	Freq_Offset = mult_data[43:12];	//移位

//---------------------------------------//
reg     [cnt_width-1:0]cnt_I;
wire    [9:0]   addr_I;
always @(posedge clk or negedge rst_n) begin
	if(!rst_n)	begin
		cnt_I <= 0;
	end
	else	begin
	    cnt_I <= cnt_I + Freq_I + Freq_Offset;
	end
end

assign  addr_I = cnt_I[cnt_width-1:cnt_width-10];

//----------------ROM核-----------------//
Sin				Sin_inst(
  	.clka		(clk),
  	.addra		(addr_I),
  	.douta		(FM_Mod)
);

endmodule

3.3. 顶层模块设计

顶层文件不过多介绍,代码如下:

module TOP(
    input			clk,
	input			rst_n,
    
    output         	[11:0]  FM_Mod_data
);

//----------------ADC-----------------//
wire    [11:0]  adc_data;

DDS_Mod         DDS_Mod_inst(
    .clk        (clk),
    .rst_n      (rst_n),
	.sin		(adc_data)
);
//------------------------------------//

//---------------FM调制----------------//
FM_Mod          FM_Mod_inst(
	.clk        (clk),
	.rst_n      (rst_n),
	.adc_data   (adc_data),
	.FM_Mod     (FM_Mod_data)
);


endmodule

3.4. TestBench

`timescale	1ns/1ps

module	tb_TOP();

reg 	sclk;
reg		rst_n;

wire	[11:0]	FM_Mod_data;

//---------系统时钟----------//
initial	sclk = 1;
always	#5	sclk = !sclk;
//---------复位---------//
initial	begin
	rst_n = 0;
	#100
	rst_n = 1;
end

//-----------------------//
TOP					TOP_inst(
    .clk			(sclk),
    .rst_n			(rst_n),
    .FM_Mod_data	(FM_Mod_data)
);
//-----------------------//

endmodule

3.5. 仿真结果

运行仿真结果如下:

其实从仿真来看看不出什么明显的效果,是因为频偏相对于载频来说太小了,变化不明显。如果将频偏改成2MHz再仿真,结果如下:
在这里插入图片描述

从仿真结果来看输出波形存在着明显的频率变化,表明输出的是FM已调信号了。但这些都只是基于仿真来看的,至于输出信号是否正真满足指标要求,还得将已调信号通过DA输出到频谱仪上进行验证。

四、总结

FM调制在实现方式上还是比较简单的,但是可能需要一定的理解。以上的实现过程比较粗糙,只是从仿真层面去大致实现一个FM调制的效果,在实际应用中会有更加复杂的情况。另外,本人建议有条件的尽量在频谱仪上验证调制效果,对于指标严格的调制,普通示波器的频谱分析功能不一定能胜任。

另外,如有需要改进的地方,欢迎各位指出。

DDS实现AM调制、DSB调制【Matlab】【FPGA】【Vivado】【信号处理】【通信原理】【软件无线电】【FPGA探索者】 目录一、为什么要调制二、幅度调制1、AM调制2、抑制载波的双边带调制(DSB)3、单边带(SSB)4、残留边带(VSB)5、性能分析三、Matlab实现1、调制2、非相干解调3、相干解调四、FPGA实现1、AM信号非相干解调2、DSB信号相干解调 一、为什么要调制   调制(modulation)就是对信号源的信息进行处理(低频),加到载波上(高频),使其变为适合于信道传输的形式。 无线电传输时,频率越高,波长越小,发射时需要的天线也越短。   式中,λ为波长(m);c为电磁波传播速度(光速3*10^8 阅读详情

相关推荐

从原理到FPGA实现:FM调制解调的数字信号处理实践

本文详细介绍了FM调制解调的基础原理及其数字信号处理实践,包括MATLAB实现和FPGA迁移。通过DDS技术、正交调制和定点数优化等关键步骤,帮助读者掌握从理论到硬件实现的完整流程,特别适合无线通信和数字信号处理领域的开发者。

weixin_30718391的博客 255

FM调制解调---FPGA

fm调制解调——FPGA

做有挑战的事 7289

从FM广播到FPGA实现:手把手教你用MATLAB仿真FM调制解调(附完整代码)

本文详细介绍了从MATLAB仿真到FPGA实现的FM调制解调完整流程,涵盖核心原理、正交调制架构、解调算法选择及MATLAB到FPGA的迁移策略。通过实战案例和完整代码,帮助通信工程师掌握FM技术的数字实现方法,为无线通信系统开发提供实用指导。

weixin_30608503的博客 289

基于FPGA的FM信号解调

本次实验是将一个已知的FM信号通过FPGA进行解调,解调出波形并进行FFT得到调制频率fm,并且每一步都通过MATLAB进行波形的验证

ZZZZZ0106的博客 8418

手把手教你用FPGA实现FM调制解调:从DMA自研到IQ解调的完整Verilog工程

本文详细介绍了如何使用FPGA实现FM调制解调系统,涵盖从DMA自研到IQ解调的完整Verilog工程。通过系统架构设计、自研AXI DMA模块、跨时钟域处理、FM调制器ROM优化及IQ解调算法实现等关键步骤,帮助开发者掌握FPGA在无线通信领域的应用技巧。特别针对工程调试中的常见问题提供了实用解决方案。

weixin_30439067的博客 209

FPGA GPIO直接调制VCO实现简易FM发射器

FM调制是一种基于瞬时频率偏移的模拟调制技术,其核心原理是基带信号对载波相位的积分控制,可在数字系统中通过相位累加器(DDS结构)高效实现。在资源受限场景下,FPGA凭借确定性时序和可编程逻辑,能以极简硬件——如单路LVCMOS GPIO——驱动变容二极管构成的压控振荡器(VCO),完成从音频采样、频偏控制到射频发射的闭环。该方案突出体现了数字调制与模拟射频的协同设计价值,广泛应用于教学验证、电子竞赛干扰源原型及嵌入式无线模块开发。本文聚焦‘一根线FM发射’这一典型工程实践,深入解析相位累加器设计、VCO调

weixin_29188997的博客 270

FM调制的FPGA-DDS实现

本文的内容包括FPGA IP核的调用,DDS的原理,FM调制的原理,FM调制的FPGA-DDS实现。

weixin_65676138的博客 5708

基于System Generator的1024QAM-FM软件无线电联合调制解调系统的FPGA实现

鉴相器的结构,其结构如下所示。在载波同步过程中,相位检测器的输出误差信号经过环路滤波得到NCO控制信号,从而改变NCO输出信号频率使相差逐渐减小,最后趋近于零,达到载波同步的目的。在跟踪过程中,可能出现频偏,时偏突变的情况,这里,我们队反馈信息进行计算平均,从而有效抑制突变情况。

FPGA/MATLAB学习教程/源码/项目合作开发 1645

FPGA实现FM数字调制

接上篇,我们继续完成题目,这次我们要做FM调制,调频(Frequency Modulation, 简称FM)是一种以调制信号的幅度变化来控制载波频率变化的调制方式。在FM调制中,,而其幅度保持恒定。这使得FM调制在抗干扰性、信噪比和频谱效率方面相比AM(调幅)更具优势,广泛应用于广播、无线通信、雷达等系统。设有一载波信号:其中,Ac是载波幅度,fc​ 是载波频率。β=kf*Am/fm:调频指数,反映调制深度;

XieEnCheng_的博客 1032

FM 调频波调制解调 FPGA Verilog 代码 Xilinx Vivado 工程

FM 调频波调制解调 FPGA Verilog 代码 Xilinx Vivado 工程 FIR 使用 https://blog.youkuaiyun.com/qq_46621272/article/details/125337119 文章有该代码详细说明 https://blog.youkuaiyun.com/qq_46621272/article/details/125292610 FIR 使用详解

FM调制解调FPGA的Verilog实现基于Xilinx Vivado工程

【源码免费下载链接】:https://renmaiwang.cn/s/j20zm 调制解调器设计采用FM调频波调制技术,结合FPGA架构进行Verilog语言实现,并基于Xilinx Vivado平台完成工程开发。其中,FIR滤波器的实现原理及应用方法在详细说明中得到了充分阐述。

FPGA实现FM调制

本文介绍了FM调制的原理及FPGA实现方法。首先解析了FM调制的关键公式,包括调制信号归一化、瞬时角频率计算等核心参数。随后详细展示了一个基于Verilog的FM调制模块设计,包含载波频率、最大频偏等参数设置,以及信号处理流程。文章还提供了改进后的精简代码版本,优化了参数配置。最后介绍了用于计算频率系数的Python工具,该工具可将浮点数转换为定点数格式,并支持频率累加器计算功能。整个方案实现了从理论推导到FPGA实现的完整FM调制系统设计。

2301_78985220的博客 307

FM音频调制解调的FPGA实现.docx

详细描述包括FM调制和解调(收发),verilog实现过程,频率控制字的计算,工程实际应用文档。实用性极强

【亲测免费】 探索无线通信的奥秘:基于FPGA的FM调制解调器实现

探索无线通信的奥秘:基于FPGA的FM调制解调器实现 【下载地址】基于FPGA的FM调制解调器实现资源下载 基于FPGA的FM调制解调器实现资源下载 项目地址: https://gitcode.com/Open-source-do...

gitblog_06670的博客 859

工程伦理-知识点汇总

工程伦理-知识点汇总

m0_46091747的博客 1万+

一文搞懂什么是OTA(空中升级)

OTA(Over-The-Air,空中升级)是一种通过无线通信技术实现远程更新设备固件或软件的方法。这项技术广泛应用于现代物联网(IoT)设备、智能手机、汽车、嵌入式系统等领域,提供了一种无需物理连接的便捷更新方式。OTA更新的核心在于使设备能够自动、可靠、安全地从远程服务器获取和应用更新,改善设备性能、添加新功能或修复安全漏洞。

不积跬步无以至千里 7万+

基于FPGA的FM调制解调器实现资源下载

基于FPGA的FM调制解调器实现资源下载 【下载地址】基于FPGA的FM调制解调器实现资源下载 基于FPGA的FM调制解调器实现资源下载 项目地址: https://gitcode.com/Open-source-document...

gitblog_06604的博客 381

DeepSeek-OCR又更新:一起看下OCR1和OCR2

DeepSeek-AI 最近又又开源了,这次是DeepSeek-OCR2,结合之前发布的DeepSeek-OCR ,可以发现DeepSeek走出了一条不同于主流 OCR 方案的技术路线。第一代模型探索了**“视觉作为文本压缩介质”的可行性,打破了传统的序列长度限制;第二代模型则通过“Visual Causal Flow(视觉因果流)”**架构,将因果推理引入视觉编码器,解决了复杂排版下的阅读顺序难题。本文将从架构设计、逻辑结构、训练范式及工程实现四个维度,深度剖析这两代模型的异同与创新。

kakaZhui的博客 622

FM音频调制解调的FPGA实现.docx 这个是骗子,大家不要下载

首先,需要搞清楚fm调制用dds进行产生调制信号的原理和过程,基本原理为用调制信号的幅度作为频率控制字去控制dds输出频率可变的调制信号,这里幅度要乘以调制系数,即配合最大频偏和dds的相位位宽(取决于频率精度)产生的调制系数。以工程实际为例:一种场景是调制的源是标准仪器,比如说音频模块,它可以产生一个频率为1kHz的调制信号,信号类型为无符号数据,信号的位宽为10bit{[9:0]} ,信号的量值在1024. 这个作为源调制信号进行fm发。是计算得到的理论值8192,512是调制信号的最大量值。

sc_david99的博客 915

时序分析28 - 时序预测 格兰杰因果关系(中) python实践1

时序分析28 - 时序预测 - 格兰杰因果关系(中) Python 实践 1 上一篇文章我们介绍了格兰杰因果关系的基本概念、背景以及相关统计检验法。本篇文章我们使用Python编程实践一下。 实践1:股票价格数据之间的格兰杰因果关系 问题:苹果公司今天的股价是否可以用来预测明天的特斯拉的股价? 数据:来自雅虎财经 import matplotlib.pyplot as plt import seaborn as sns import numpy as np import pandas as pd 读入数据

weixin_43171270的博客 8836

ROS 2在自动驾驶中的应用:感知节点开发

ROS 2在自动驾驶中的应用:感知节点开发 ,人工智能,计算机视觉,大模型,AI,本文围绕ROS 2在自动驾驶感知节点开发展开,介绍了ROS 2基础、感知节点开发流程,包括环境搭建、代码编写等,还阐述了常用传感器感知节点开发、多传感器融合,以及测试调试、性能优化、部署集成等内容,分析了开发面临的挑战与未来趋势,为相关开发提供了全面指导,涉及简单代码示例和概念解释。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 14万+

基于FPGA-DDS架构的FM调制器设计与实现

本文详细介绍了基于FPGA-DDS架构的FM调制器设计与实现过程。通过将FPGA与DDS技术结合,实现了精确的频率调制(FM)功能,包括系统架构设计、代码实现及仿真验证。文章还提供了优化相位噪声和资源利用的实用技巧,适合电子工程师和FPGA开发者参考。

weixin_30385925的博客 390

把 SAP 配置当成一张地图:用 IMG 把实施、变更与治理串成一条清晰的路

摘要 SAP IMG(Implementation Guide)是SAP实施的核心导航体系,它将客户需求转化为系统配置,提供结构化路径和文档化支持。IMG不是简单的菜单树,而是包含业务落地路径、标准化配置活动和文档化知识的实施语言。通过三种视图(Reference、Enterprise、Project)解决不同管理问题,其中Project IMG尤其重要,可管理项目范围、分工和进度。实际工作中应通过SPRO事务码访问IMG,将探索与执行分开管理。案例显示,跨国企业通过Project IMG可有效控制组织架构

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 228

基于FPGA实现FM调制 简易版

本篇文章主要是通过简单的原理帮助大家理解和实现FM的调制。

weixin_46468349的博客 3196

基于YOLOv5/v8/v10的答题卡填涂识别与评分系统(附数据集+UI界面+完整代码)

在教育信息化的大背景下,传统的手工阅卷方式正在被智能化技术所取代。答题卡识别作为标准化考试的核心环节,其准确率和效率至关重要。本文将详细介绍如何利用YOLO系列目标检测算法(YOLOv5、YOLOv8、YOLOv10)构建一个答题卡填涂识别与评分系统。文章从数据集的制作与标注开始,逐步深入到模型的训练、评估与对比,最后基于PyQt5设计了一个用户友好的桌面端UI界面,实现了从图像输入到得分输出的全流程自动化。

YOLO 634

Lammps实现随机粗糙度表面沸腾

Lammps实现随机粗糙度表面沸腾前言 前言

Rockyoung 2703
上一篇: 简易频率特性测试仪
HOOKNET
博客等级 码龄9年 152粉丝 5原创
评论 24
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值