@GZMTU_DZXXGCWHB

基于FPGA的2FSK调制解调器

设计要求:

  1. 用Verilog实现2FSK调制和解调;
  2. 对任意输入二进制数进行调制,并解调。载波频率自定;
  3. 分别对调制和解调结果仿真。

目录

第一部分:实训目的

第二部分:实训准备(包含实训设备及器材)

第三部分:实训要求

第四部分:实训内容

2FSK调制器设计

2FSK信号调制仿真结果

分频法实现2FSK解调器

包络检波法

2FSK信号解调仿真结果

在线逻辑分析仪(ILA)

整体电路

第五部分:源代码

M序列发生器

ROM地址发生器0

ROM地址发生器1

开关选通器

对输入正弦波信号进行整形

微分操作

实现脉冲展宽

第六部分:实训结果

2FSK信号的调制

2FSK信号的解调

实物图

第一部分:实训目的

数字调制技术是现代通信的一个重要内容,在数字通信系统中,由于数字信号具有丰富的低频成份,不宜进行无线传输或长距离电缆传输,因而需要将基带信号进行数字调制(Digital Modulation)。数字调制同时也是数字信号频分复用的基本技术。数字调制与模拟调制都属于正弦波调制,但是,数字调制是调制信号为数字型的正弦波调制,因而数字调制具有自身的特点,一般说来数字调制技术分为两种类型:一是把数字基带信号当作模拟信号的特殊情况来处理;二是利用数字信号的离散取值去键控载波,从而实现数字调制。后一种方法通常称为键控法。例如可以对载波的振幅、频率及相位进行键控,便可获得振幅键控(ASK)、移频键控(FSK)、相移键控(PSK)等调制方式。移频键控(FSK)是数字信息传输中使用较早的一种调制形式,它由于其抗干扰及衰落性较好且技术容易实现,因而在集散式工业控制系统中被广泛采用。以往的键控移频调制解调器采用“定功能集成电路+连线”式设计;集成块多,连线复杂,容易出错,且体积较大,本设计采用 Xilinx公司的 FPGA 芯片,有效地缩小了系统的体积,降低了成本,增加了可靠性,同时系统采用Verilog语言进行设计,具有良好的可移植性及产品升级的系统性。

第二部分:实训准备(包含实训设备及器材)

  1. Windows10操作系统的计算机
  2. Vivado设计套件
  3. Xiinx Zynq-7020 SoC-TLZ7x-EasyEVM评估板

第三部分:实训要求

1、  用Verilog实现2FSK调制和解调;

2、  对任意输入二进制数进行调制,并解调。载波频率分别为32MHz和20MHZ;

3、  分别对调制和解调结果仿真。

第四部分:实训内容

调制信号是二进制数字基带信号时,这种调制称为二进制数字调制。在二进制数字调制中,载波的幅度、频率和相位只有两种变化状态。相应的调制方式有二进制振幅键控(2ASK),二进制频移键控(2FSK)和二进制相移键控(2PSK)。2FSK就是用两种不同频率的载波来传送数字信号。特别适合应用于衰落信道,其占用频带较宽,频带利用率低,实现起来较容易,抗噪声与抗衰减的性能较好,在中低速数据传输中得到了广泛的应用。

1 调制解调的基本原理

FSK就是利用载波信号的频率变化来传递数字信息。

在2FSK中,载波的频率随二进制基带信号在f1和f2两个频率点之间变化。故其表达式为:

也就是说,一个2FSK信号可以看成是两个不同载频的2ASK信号的叠加。因此,2FSK信号的时域表达式又可以写成:

在移频键控中, 和 不携带信息,通常可以令和 为零。因此,2FSK信号的表达式可简化为:

其中:

2FSK信号的产生方法主要有两种。一种可以采用模拟调频电路来实现,另一种可以采用键控法来实现,即在二进制基带矩形脉冲序列的控制下通过开关电路对两个不同的独立频率源进行选通,使其在每个码元Ts期间输出f1或f2两个载波之一。这种方法产生2FSK信号的差异在于:由调频法产生的2FSK信号在相邻码元之间的相位是连续变化的。而键控法产生的2FSK信号,是由电子开关在两个独立的频率源之间转换形成,故相邻码元之间的相位不一定连续。

针对FSK信号的特点,我们可以提出基于FPGA的FSK调制器的一种实现方法--分频法,这种方法是利用数字信号去控制可变分频器的分频比来改变输出载波频率,产生一种相位连续的FSK信号,而且电路结构简单,容易实现。在2FSK信号中,载波频率随着二元数字基带信号(调制信号)的“1”或“0”而变化,“1”对应于频率为f1的载波,“0”对应于频率为f2的载波。2FSK的已调信号的时域表达式为:

2FSK信号的常用解调方法是采用非相干解调和相干解调。其解调原理是将2FSK信号分解为上下两路2ASK信号分别进行解调,然后进行判决。这里的抽样判决是直接比较两路信号抽样值的大小,可以不专门设置门限。

判决规则应与调制规则相呼应,调制时若规定“1”符号对应载波频率f1,则接收时上支路的样值较大,应判为“1”,反之则判为“0”。

2FSK调制器设计

键控法也常常利用数字基带信号去控制可变分频器的分频比来改变输出载波频率,从而实现FSK的调制。实现2FSK调制的原理方框图如图1所示。

其中FSK调制的核心部分包括分频器、二选一选通开关等,图中的两个分频器分别产生两路数字载波信号;二选一选通开关的作用是以基带信号作为控制信号,当基带信号为“0”时,选通载波f1;当基带信号为“1”时,选通载波f2。从选通开关输出的信号就是数字FSK信号。这里的调制信号为数字信号。

2FSK信号调制仿真结果

整个设计使用Verilog语言编写,以Xilinx Zynq-7020 SoC为下载的目标芯片,在Vivado软件平台上进行布局布线后进行波形仿真,其中200MHZ为输入主时钟信号;start为起始信号,当out为“1”的时候,开始解调;rd_data0、rd_data1为载波信号;out为基带信号;

dout为经过FSK调制器后的调制信号;当输入的基带信号out=‘0’时,输出的调制信号dout为f1,当输入的基带信号out=‘1’时,输出的调制信号dout为f2。

2FSK解调器设计

分频法实现2FSK解调器

过零检测法与其他方法比较,最明显的优点就是结构简单、易于实现,而且对增益起伏不敏感,特别适用于数字化实现。它是一种经济、实用的最佳数字解调方法。

FSK过零检测法。

它利用信号波形在单位时间内与零电平轴交叉的次数来测定信号频率。输入的已调信号经限幅放大后成为矩形脉冲波,再经微分电路得到双向尖脉冲,然后整流得到单向尖脉冲,每个尖脉冲代表信号的一个过零点,尖脉冲重复的频率是信号频率的两倍。将尖脉冲去触发一单稳态电路,产生一定宽度的矩形脉冲序列,该序列的平均分量与脉冲重复频率,即输入频率信号成正比。所以经过低通滤波器的输出平均量的变化反映了输入信号的变化,这样就完成了频率-幅度的变换,把码元“1”与“0”在幅度上区分开来,恢复出数字基带信号。实现2FSK解调器的原理方框图如图所示。

FSK信号经过限幅、微分、整流后形成与频率变化相对应的脉冲序列,由此再形成  相同宽度的矩形脉冲,矩形脉冲的低频分量与数字信号相对应,由滤波器滤出低频分量, 然后经抽样判决,即可得到原始的数字调制信号。

包络检波法

2FSK的包络检波法解调原理如下,可视为由两路2ASK解调电路组成,这里两个带通滤波器,对应两个中心频率,用以分开两路2ASK信号,将两路滤波之后的包络信号相减,在经过抽样判决其进行判决,根据调制规则(f1代表符号1,f2代表符号0),当判决值大于0时,判决为1,否则判决为0。

包络检波首先需要通过带通滤波器将FSK信号进行滤波分离,显然,当调制度较      小的时候,两路FSK信号频谱混叠严重,带通滤波器的通带比较窄,能量损失比较严重,会引入另一路信号的频谱干扰,因此性能下降严重,通常需要调制度大于2的时候才能获得较好测性能。

2FSK信号解调仿真结果

整个设计使用Verilog语言编写,以Xilinx Zynq-7020 SoC为下载的目标芯片,在Vivado软件平台上进行布局布线后进行波形仿真,其中dout为输入信号,本文中在调制阶段的被调制信号,即是调制信号中的输出信号,dout为输出信号,在正常情况下out就是在调制信号中的输入信号,在flagout=1时,cnt开始计数。通过判断cnt的数值大小,来解调输出信号dout。

调制解调器设计仿真结果如下图所示。比较输入信号out与输出信号endout,完全一样,只是系统仿真结果有一定的延时。仿真结果表明,系统设计正确 。

在线逻辑分析仪(ILA)

Vivado的在线逻辑分析仪(ILA)其借用了传统逻辑分析仪的理念以及大部分的功能, 并利用 FPGA 中的逻辑资源, 将这些功能植入到 FPGA 的设计当中。如下图所示,ILA占用一部分FPGA内部逻辑资源,可看做一个模块,被设计模块所调用。ILA使用时需要与下载器连接,将FPGA的测试信号传回到vivadoIDE中,显示波形以供调试。运行过程如下:

整体电路

Vivado可实现硬件描述语言或网表文件(VHDL、Verilog、BDF、TDF、EDIF、

VQM)对应的RTL电路图的生成。其方法为:选择Tools︱RTL Viewer,可以打开FSK

工程个层次的RTL电路图,双击图形中有关模块,或选择左侧各项,可了解个层次的电路结构,如下图所示

第五部分:源代码

(由于程序编写工程较复杂,仅贴出部分程序,更多详情请查看随文档附的Vivado项目工程)

M序列发生器

module MXL(

input clk,

output out

);

reg out;

reg[3:0] tmp = 4'b0;

always @(posedge clk )begin

if(tmp > 4'd15)

tmp<=4'd0;

else

tmp<=tmp+1'b1;

case(tmp)

4'd0:out<=0;

4'd1:out<=1;

4'd2:out<=0;

4'd3:out<=0;

4'd4:out<=1;

4'd5:out<=1;

4'd6:out<=0;

4'd7:out<=1;

4'd8:out<=1;

4'd9:out<=0;

4'd10:out<=1;

4'd11:out<=0;

4'd12:out<=0;

4'd13:out<=0;

4'd14:out<=0;

4'd15:out<=0;

endcase

end

endmodule

ROM地址发生器0

module rd_addr0(

input                   clk_20mhz,

output reg  [9:0]       rd_addr0 //读ROM地址

);

reg rd_addr0;

always@(posedge clk_20mhz)begin

rd_addr0 <= rd_addr0 + 10'd1;

end

endmodule

ROM地址发生器1

module rd_addr1(

input                   clk_32mhz,

output reg  [9:0]       rd_addr1 //读ROM地址

);

reg rd_addr1;

always@(posedge clk_32mhz)begin

rd_addr1 <= rd_addr1 + 10'd1;

end

endmodule

开关选通器

module KAIGUAN(

input   [9:0]   din0,

output  [9:0]   dout,

input   [9:0]   din1,

input           sel

);

wire        [9:0]           MW_din0l;

wire        [9:0]           MW_din1l;

reg         [9:0]           MW_dtempl;

always@(sel)

begin

case(sel)

1'd0:MW_dtempl <= MW_din0l;

default:MW_dtempl <= MW_din1l;

endcase

end

assign dout = MW_dtempl;

assign MW_din0l = din0;

assign MW_din1l = din1;

endmodule

对输入正弦波信号进行整形

module ZX(

input   [9:0]   a,

output          b

);

reg b;

always @(a[9:0])

case({a[9],a[8]})

2'b11:b<=1;

2'b00:b<=0;

2'b10:b<=1;

2'b01:b<=0;           //按高两位进行判决

endcase

endmodule

微分操作

module  wf(

input           clk,

input           rz,

output   reg    bit

);

reg [1:0]pre;

always @(posedge clk)

begin

pre[1]=pre[0];

pre[0]=rz;

if(pre==2'b01)      //上升边沿检测,即微分

bit<=1;

else

bit<=0;

end

endmodule

实现脉冲展宽

module pulse(

input in,

input clk,

output out

);

wire    out;

reg     delay1;

reg     delay2;

reg     delay3;

always@(posedge clk)

begin

delay1 <= in;

delay2 <= delay1;

delay3 <= delay2;

end

assign out = delay2 + delay3;

endmodule

module fir(

input           firclk,

input           pout,

output       endouting,

output  reg    flagout

);

reg     endout;

reg [6:0] cnt;

always@(posedge pout)       //检测pout高电平标志位flag = 1 第二次高电平为2

begin

if(flagout == 2)

flagout <= 1;

else

flagout <= flagout + 1;

end

always@(posedge firclk) begin   //检测频率计数器

if (flagout == 1)

cnt <= cnt + 1;

else

cnt <= 0;

end

always@(posedge ~flagout) begin   //检测频率计数器

if (cnt >= 101)

endout <= 1;

else if(cnt < 102)

endout <= 0;

else

endout <= ~endout;

end

//信号输出

assign cntou = cnt;

assign endouting = ~endout;

endmodule

参考文献 
[1] 樊昌信等.通信原理(第五版).北京:国防工业出版社,2001
[2]
刘昌华.数字逻辑EDA设计与实践. 北京:国防工业出版社,2006  
[3]
苏青,张红.基于CPLD/FPGA技术的数字频率设计.北京:清华大学出版社,2007
[4]
黄智伟.FPGA系统设计与实践.北京:电子工业出版社,2005 
[5]
张凤言.大规模逻辑器件与数字系统设计. 北京:北京航空航天大学出版社,1998
[6]
潘松,黄继业.EDA技术实用教程.北京:科学出版社.2005

第六部分:实训结果

如下图,成功实现对实训要求各功能的实现:

2FSK信号的调制

2FSK信号的解调

实物图

资源:Xiinx_FPGA_2fsk调制-硬件开发文档类资源-CSDN下载

资源:Quarter_2FSK_调制解调-硬件开发文档类资源-CSDN下载

基于FPGA的2FSK调制解调器相关推荐

  1. msk调制 vhdl_基于FPGA的MSK调制解调器的设计与仿真

    论文编号:JD1172  论文字数:10913,页数:35  附任务书,开题报告,文献综述,外文翻译,中期检查 毕业设计说明书(论文)中文摘要 本文根据数字信号MSK调制和解调的工作原理,采用模块化设 ...

  2. 基于verilog实现2FSK调制解调器

    文章目录 前言 一.调制解调概念 1.2FSK原理 二.硬件设计 1.调制器设计思路 2.解调器设计思路 三.代码 1.顶层 2.F1载波发生模块 3.F2载波发生模块 4.频率计模块 5.测试文件 ...

  3. 基于FPGA的2ASK、2FSK、2PSK的调制解调

    文章目录 前言 一.顶层原理图 二.signalTap II 上的仿真图 三.部分代码贴出 总结 前言 这是自己的毕设总结,主要就是基于FPGA的调制解调器的设计.涉及到2ASK.2FSK.2PSK的 ...

  4. 朱斌斌博士|基于FPGA的OFDM可见光通信系统实现

    最实用的LiFi系列技术课程 基于FPGA的OFDM可见光通信系统实现 PART01 直播时间 2022-01-25 19:00 腾讯线上会议:775 191 790 PART02 主讲人 新加坡南洋 ...

  5. 基于FPGA的通信信号源设计

    verilog实现基于FPGA的通信信号源设计 要求: 能够发射正弦波 对发出的正弦波进行2ask,2fsk,2psk,2dpsk调制 调制时用到PN序列(伪随机序列) 步骤: 第一步:产生两个频率不 ...

  6. 基于FPGA通用异步收发器UART设计

    摘要 通用异步收发器(UART)是一种能同时支持近距离和远距离传输的异步串行接口,具有传输速率较高.传输距离长.抗干扰性能好.电路结构简单以及节省布线资源等优点.然而,随着社会的发展,信息传输容量越来 ...

  7. 基于FPGA的USB接口控制器设计(VHDL)(上)

    今天给大侠带来基于 FPGA 的 USB 接口控制器设计(VHDL),由于篇幅较长,分三篇.今天带来第一篇,上篇,USB 接口简介 以及 USB 体系结构.话不多说,上货. 之前有关于 Verilio ...

  8. 基于FPGA实现的MobileNet V1,FPGA深度学习加速器设计 CNN Accelerators based on FPGAs

    Automatic Generation of Multi-precision Multi-arithmetic CNN Accelerators for FPGAs 最近arXiv上挂出来一篇文章, ...

  9. 基于FPGA系统合成两条视频流实现3D视频效果

    目录 1.概述 2.时钟架构 3.带锁定视频解码器的同步系统 4.异步视频系统 4.1.时钟三态模式 4.2.两条视频流中的数据对齐误差 4.3.行锁定摄像机对齐误差 4.4.不同的连接长度 4.5. ...

  10. 基于fpga的数码管动态扫描电路设计_【至简设计案例系列】基于FPGA的密码锁设计(altera版)...

    秦红凯 明德扬FPGA科教 一.项目背景概述 随着生活质量的不断提高,加强家庭防盗安全变得非常重要,但传统机械锁的构造过于简单,很容易被打开,从而降低了安全性.数字密码锁因为它的保密性很高,安全系数也 ...

最新文章

  1. php变量赋值有几种,【后端开辟】php变量赋值体式格局有几种
  2. HighNewTech之Job:关于人工智能领域专业的公司求职数据分析(最全)
  3. GDCM:gdcm::Version的测试程序
  4. 不知道为什么IList.Contains()总是返回FALSE
  5. sql中问号是干什么的??
  6. (转)找回vss超级管理员密码
  7. 人脸识别测试维度定义(欢迎大家拍砖并补充谢谢!)
  8. OO ALV 实现方式 ALV TABLE 之 栏位属性
  9. 数据可视化——利用pandas和seaborn绘图基础
  10. 赛尔笔记 | 对比学习简述
  11. 2005/2006/2007/2008/2009/2010/2012/2013/2014/2015/2016/2017/2018/2019/2020高德poi 一级类别 二级类别
  12. 桌面快捷方式自动消失
  13. VR全景虚拟校园提高学校的知名度和美誉度
  14. 读书笔记:《过程咨询 II》
  15. 海南大学计算机网络空间安全学院研究生,海南大学计算机与网络空间安全学院2021考研调剂公告...
  16. Glide加载图片缩放模式
  17. isolate两三事
  18. Web前端设计与开发课程设计:简易淘宝网页设计
  19. 国漫的又一次崛起?形成独树一帜的“中国学派”
  20. Google Play APK 下载

热门文章

  1. 用一个创业故事串起操作系统原理(五)
  2. java macd指标_Java 验证 MACD 底背离是否真的有效
  3. CapstoneCS5265设计原理图|CS5265设计DP转HDMI2.0 4K60HZ转换电路|CS5265demoboard
  4. EDP转HDMI 4K60HZ视频信号转换方案CS5263完全替代IT6563
  5. 计算机取消健,电脑取消撤销快捷键是什么_电脑健盘中的所有英文组合意思超值解释建议收藏......
  6. JVM 语言的兴衰 【The Rise and Fall of JVM Languages】
  7. 生命也如同平常到化入夏风里的蝉鸣
  8. MPI学习-点对点通信
  9. 随手写的一个小程序,将gz压缩文件读取到内存中 并用base64编码 及相关解码
  10. selenium+python基本知识