一、概述

本文通过设计 Testbench 对 AM 调制解调模块进行功能验证,主要检查以下几点:

(1)各阶段波形是否正确输出。

(2)各信号幅值是否符合预期。

(3)调制深度是否接近预设值。

(4)解调波形能否高度还原调制信号。

(5)借助 MATLAB 检查仿真数据是否正常。

二、Testbench 代码

`timescale 1ns / 1ps
//
// Company: UESTC
// Engineer: chylinne
//
// Create Date: 2022/08/01 21:59:51
// Design Name: am
// Module Name: am_tb
// Project Name: am
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//module am_tb();/* System clock */reg         clk;/* System reset */reg         rst_n;/* Phase Increment ProgrammabilityPINC = fout * 2^B / fclk= 8MHz * 2^16 / 100 MHz= 5243*/wire [15:0] pinc_carrier = 'd5243;/* Phase Increment ProgrammabilityPINC = fout * 2^B / fclk= 8kHz * 2^24 / 100 MHz= 1342*/wire [23:0] pinc_modulate = 'd1342; // clocks/* Modulation Depth */wire [3:0]  depth = 'd9; // 0.9wire [7:0]  modulate_signal;wire [7:0]  carrier_signal;wire [17:0] modulated_signal;   wire [7:0]  demodulated_final;reg  [17:0] modulated_out;reg  [7:0]  demodulated_out;integer modulated_file, demodulated_file;initial beginclk <= 1'b0;rst_n <= 1'b0;modulated_file = $fopen("D:/FPGA/am/modulated_out.txt", "w");demodulated_file = $fopen("D:/FPGA/am/demodulated_out.txt", "w");#10rst_n <= 1'b1;end// system clock is set to 100 MHzalways #5 clk = ~clk;always@(posedge clk) beginmodulated_out <= modulated_signal;demodulated_out <= demodulated_final;endalways@(posedge clk) begin$fwrite(modulated_file, "%d\n", $signed(modulated_out));$fwrite(demodulated_file, "%d\n", demodulated_out);endam u_am(.clk(clk),.rst_n(rst_n),.pinc_carrier(pinc_carrier),.pinc_modulate(pinc_modulate),.depth(depth),.modulate_signal(modulate_signal),.carrier_signal(carrier_signal),.modulated_signal(modulated_signal),.demodulated_final(demodulated_final)   );endmodule

三、测试结果

(1)总览

如下图所示,信号由上到下依次为:调制信号(8 kHz 正弦波)、载波信号(8 MHz 正弦波)、已调信号、解调信号。

(2)调制信号

最大值为 126,如下。

最小值为 -126,如下。

(3)载波信号

最大值为 126,如下。

最小值为 -126,如下。

(4)已调信号

在最大值处,幅值为 30240,如下。

在最小值处,幅值为 1612,如下。

因此,仿真结果所对应的调制深度为

误差为

四、MATLAB 验证

(1)验证代码

通过 MATLAB 分别读取 Testbench 生成的两个 .txt 文件(modulated_out.txt 和 demodulated_out.txt)来获取仿真的时域数据,并通过 fft 函数计算其频域数据。

clear;
file = fopen('modulated_out.txt');
content = textscan(file,'%s');
fclose(file);
data = content{1,1}(2:end,:);
X = str2num(char(data));
Fs = 100000000;%采样频率
dt = 1/Fs;%采样周期
L = length(X);%数据长度
t=0:dt:dt*(L-1);%时间
n = 2^nextpow2(L);%求得最接近数据长度的2^n
Y = 2*abs((fft(X,n))/n);%求频谱subplot(2, 1, 1);
plot(t,X);
title('时域图');
xlabel('t');
ylabel('X');
set(gca,'XLim',[0 10^-3]);subplot(2, 1, 2);
plot(Fs*(0:(n/2))/n,Y(1:n/2+1));
title('频谱图');
xlabel('f');
ylabel('|Y(f)|');
axis([7500000 8500000 0 15000]); % display modulated data
%axis([0 100000 0 150]); % display demodulated data

(2)验证结果

调制结果:

解调结果:

基于 VIVADO 的 AM 调制解调(3)仿真验证相关推荐

  1. 基于 VIVADO 的 FM 调制解调(上)设计篇

    一.概述 本文先简要介绍了频率调制(frequency modulation,FM,简称调频)的原理,然后对其进行方案设计,最后基于 VIVADO 2018.3 使用 Verilog 进行实现. 二. ...

  2. 基于锁相环的调制解调仿真实现

    基于锁相环的调制解调仿真实现 论文+代码+实验结果下载地址:下载地址 摘要 随着现代集成电路技术的发展,锁相环已经成为集成电路设计中非常重要的一个部分,所以对锁相环的研究具有积极的现实意义.锁相环电路 ...

  3. matlab实现ofdm调制解调,基于MATLAB的OFDM调制解调仿真

    基于MATLAB的OFDM调制解调仿真 题目:基于 MATLAB的 OFDM调制解调仿真2009年 6 月 13 日目 录摘要 .IIAbstract IV第 1章 正交频分复用的来源 - 1 -1. ...

  4. 脉位调制解调 matlab,基于matlab的am调制解调

    基于matlab的am调制解调 基于 Matlab 的 AM 调制解调一.AM 的调制原理AM 是指对信号进行幅度调制 [2].一般做法是先在原信号上叠加一个直流信号,以保证信号 , 然后乘上一个高频 ...

  5. FPGA学习笔记(七): DSB调制解调的仿真

    笔记七是DSB调制解调的仿真实现. DSB调制解调的实现原理:首先使用DDS产生低频正弦波信号作为调制信号,再用DDS产生高频信号作为载波信号,然后使用乘法器将两者相乘产生DSB信号,DSB信号与载波 ...

  6. am解调matlab程序,基于Matlab的AM调制解调.doc

    学号20100602050101 密级 公 开 本科毕业论文 基于Matlab的AM调制解调 及抗噪性能分析 学 院 名 称: 专 业 名 称: 学 生 姓 名: 指 导 教 师: 讲师 二〇一四年五 ...

  7. 基于simulink的FM调制解调系统仿真

    目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 基于simulink的FM调制解调系统仿真 2.仿真效果预览 matlab2022a仿真结果如下: ...

  8. matlab simlink fm调制,基于MATLABSIMULINK的FM调制解调

    基于MATLABSIMULINK的FM调制解调 1 FM调制与解调原理 1.1模拟通信系统的简介 通信的目的是传输信息.通信系统的作用就是将信息从信息源发送到一个或多个目的地.通信系统对信号进行两种基 ...

  9. FPGA学习笔记(八):ASK调制解调的仿真

    笔记八是ASK调制解调的仿真实现. ASK调制解调的实现原理:首先使用MATLAB产生存储基带波形的coe文件,再让ROM读取coe文件输出基带波形,然后DDS产生正弦波信号作为载波信号,接下来使用乘 ...

最新文章

  1. 都在建议,不要直接使用 @Async 注解,为什么?
  2. Java精讲:生产者-消费者
  3. bzoj2538: [Ctsc2000]公路巡逻
  4. Pad和Margin
  5. 自动分页,返回时跳回指定页
  6. Ubuntu 下修改 Could not reliably determine the serve
  7. ElasticSearch、kibana、head、ik分词器在Windows下的安装
  8. U盘安装linux后无法引导
  9. linux挂载nfs权限不够,无法写入挂载点(nfs-server),获得“权限被拒绝”
  10. 列表框、下拉列表框或组合框与数据库
  11. 为什么C++静态static函数不能访问非静态成员
  12. c语言程序设计怎么改卷,C语言程序设计(B卷)教程.doc
  13. lasted是什么意思_lasted是什么意思_lasted怎么读_lasted翻译_用法_发音_词组_同反义词_继续存在( last的过去式和过去分词 )-新东方在线英语词典...
  14. 西门子PLCSIM仿真与第三方组态软件(包括HMI)的通信
  15. 关于穿越机FPV视频果冻效应的讨论
  16. ueditor限制字数长度与加入提示语
  17. (statistic)你所不知道的P值--对统计学的批判
  18. 15款秋季养生粥DIY
  19. Affinity propagation 近邻传播算法
  20. php关注账号,一键关注微信公众平台账号

热门文章

  1. 郭平欣老先生在恢复中
  2. Opencv基于改进VGG19的表情识别系统(源码&Fer2013&教程)
  3. Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能
  4. 20200307 NOI Online T2 冒泡排序(逆序对)
  5. 【学习笔记】Java 开发手册(嵩山版)
  6. 修改 Windows 7 / XP 双系统启动菜单名称
  7. 使用Kali linux生成木马入侵局域网安卓手机
  8. OpenCV中图像的深度
  9. 外卖返利系统,外卖返利系统小程序,外卖系统,返利系统
  10. 带你认识磁性材料及下游产品全球主流认证标识